我直接使用WaitForInputIdle从CreateProcess运行一个小应用程序,但我似乎无法通过EnumWindows和GetWindowThreadProcessId为新创建的进程获取正确的窗口句柄,我运行的.exe运行如下所示:
101 DIALOGEX 0, 0, 333, 180
STYLE WS_POPUP
EXSTYLE WS_EX_TOOLWINDOW
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
FONT 8, "MS Sans Serif"
{
CONTROL "", 1012, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE, 5, 38, 195, 11 , 0x00000020
CONTROL "", 1013, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE, 6, 4, 195, 11 , 0x00000020
CONTROL "", 1011, EDIT, ES_CENTER | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE, 5, 21, 195, 11 , 0x00000020
}
我假设'101'将是主窗口,因此这将是我得到的句柄但是GetDlgItem无法检索错误1400(无效窗口句柄)的子窗口,然后尝试使用找到的句柄的ShowWindow也失败。< / p>
有没有这种经历的人知道为什么我得到一个不适用于任何已知窗口的句柄吗?
此外,我假设CreateProcess函数会将新创建的进程放在与任务管理器中的父应用程序一起运行的应用程序/进程列表中,但它将它作为后台进程自行添加,如何将进程添加到列表中从父应用程序运行的进程?
答案 0 :(得分:4)
资源ID 101对您没用。这用于从可执行文件中检索资源,但它不会帮助您找到窗口句柄。
您需要做的是:
EnumWindows
枚举顶级窗口。GetWindowThreadProcessId
以查找拥有该窗口的进程ID。CreateProcess
时返回的进程ID相匹配。