Как получить HWND одного или нескольких скрытых окон?

Мне нужно получить HANDLE или HWND скрытого окна, чтобы закрыть его с помощью EndTask((HWND)hProc,TRUE,TRUE);. Я использовал все способы, перечисленные ниже, но ни один из них не работает. Когда я вручную установил дескриптор скрытого окна с помощью spy++, это сработало правильно.

ПРИМЕЧАНИЕ. Это окно не отображается с помощью ShowWindow(), а затем используйте FindWindow(). Как spy++ получает и показывает эти дескрипторы?

введите здесь описание изображения

Я использовал:

  1. FindProcessId

    а потом

    hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, id);
    

    or

    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
    
  2. Процесс создания не работает: доступ запрещен.

  3. FindWindow() не работает для этого скрытого окна.

Как я могу получить дескриптор скрытого окна, чтобы завершить процесс?


person user1833748    schedule 19.11.2012    source источник
comment
Попробуйте использовать EnumWindows(). найти окно.   -  person hmjd    schedule 19.11.2012
comment
Это своего рода корпоративная программа, IDM означает Identity Driven Manager. Вы можете полностью ожидать, что он заблокирует попытки возиться с ним. Вам нужно будет работать с администратором локальной сети, если он мешает, хотя высока вероятность того, что он явно мешает вам делать то, что вы хотите.   -  person Hans Passant    schedule 19.11.2012
comment
EndTask((HWND) hProc, TRUE, TRUE); Это не имеет смысла. Вы не можете преобразовать дескриптор процесса в дескриптор окна. Кроме того, EndTask устарел. Кроме того, EndTask не обязательно останавливает программу, а просто пытается закрыть (и/или уничтожить) указанное окно. Многие программы не останавливаются, когда одно из их окон уничтожается. Что вы действительно пытаетесь сделать?   -  person Adrian McCarthy    schedule 20.11.2012


Ответы (1)


FindWindow будет искать любой тип Windows, и неважно, скрыт он или нет.

Возможно, ваша проблема с FindWindow заключается в том, что окно, которое вы искали, было потомком другого окна, и по этой причине вы не можете его найти.

Поэтому вы должны использовать FindWindowEx и искать в детских окнах.

person Mehdi Hosseinzadeh    schedule 19.11.2012