【问题标题】:How to get HWND of one or more hidden windows?如何获得一个或多个隐藏窗口的 HWND?
【发布时间】:2012-11-19 07:55:52
【问题描述】:

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

注意:此窗口不显示 ShowWindow(),然后使用 FindWindow()。 spy++ 如何获取并显示这些句柄?

我用过:

  1. FindProcessId

    然后

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

    hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
    
  2. 创建进程不起作用:访问被拒绝。

  3. FindWindow() 不适用于此隐藏窗口。

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

【问题讨论】:

  • 尝试使用EnumWindows()定位窗口。
  • 这是某种企业程序,IDM 表示身份驱动管理器。您可以完全期望它会阻止试图弄乱它的尝试。如果它妨碍您,您将需要与 LAN 管理员合作,尽管它很可能会明确阻止您做您想做的事情。
  • EndTask((HWND) hProc, TRUE, TRUE); 这没有意义。您不能将进程句柄转换为窗口句柄。此外,EndTask 已被弃用。此外,EndTask 不一定会停止程序,而只是尝试关闭(和/或销毁)指定的窗口。许多程序在其中一个窗口被破坏时不会停止。你真正想做什么?

标签: c visual-studio-2010 winapi visual-c++ systems-programming


【解决方案1】:

FindWindow 将搜索任何类型的 Windows,不管它是否隐藏。

也许您对FindWindow 的问题在于,您正在寻找的窗口是另一个窗口的子窗口,因此您无法找到它。

所以你应该使用FindWindowEx 并搜索儿童的窗户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2013-01-17
    • 2016-03-05
    • 2016-06-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多