如何获取一个或多个隐藏窗口的HWND?

4

我需要获取隐藏窗口的HANDLEHWND,以便使用EndTask((HWND)hProc,TRUE,TRUE);来终止它。我尝试了下面列出的所有方法,但都没有起作用。当我使用Spy++手动设置一个句柄到隐藏窗口时,这个方法可以正常工作。

注意:这个窗口使用ShowWindow()无法显示,也无法使用FindWindow()找到。Spy++是如何获取并显示这些句柄的呢?

enter image description here

我尝试了以下方法:

  1. FindProcessId

    and then

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

    or

    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
    
  2. Create process not work: access denied.

  3. FindWindow() does not work for this hidden window.

如何获取隐藏窗口的句柄以便终止进程?


4
尝试使用 EnumWindows() 定位窗口。 - hmjd
1
这是一种企业级程序,IDM代表身份驱动管理器。您可以完全预期它会阻止试图干扰它的尝试。如果它妨碍了您的工作,您需要与局域网管理员合作,尽管很有可能它存在的目的就是明确阻止您想要做的事情。 - Hans Passant
EndTask((HWND) hProc, TRUE, TRUE); 这个语句没有意义。你不能将进程句柄转换为窗口句柄。而且,EndTask已经被弃用了。此外,EndTask并不一定会停止程序,而只是尝试关闭(和/或销毁)指定的窗口。许多程序在其窗口被销毁时并不会停止运行。你真正想做什么? - Adrian McCarthy
1个回答

2
FindWindow 可以查找任何类型的窗口,无论它是否隐藏。
也许你使用 FindWindow 的问题是,你要查找的窗口 是另一个窗口的子窗口,因此你无法找到它。
所以你应该使用 FindWindowEx 并搜索子窗口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接