首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcess句柄无效

CreateProcess句柄无效
EN

Stack Overflow用户
提问于 2014-07-09 10:52:47
回答 1查看 1K关注 0票数 0

我在CreateProcess上直接使用WaitForInputIdle运行了一个小应用程序,但是我似乎无法通过EnumWindows和GetWindowThreadProcessId为新创建的进程获得正确的窗口句柄,我作为一个进程运行的.exe如下所示:

代码语言:javascript
复制
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也会失败。

有过这种经历的人知道为什么我有一个不适用于任何已知窗口的把手吗?

此外,我假设CreateProcess函数会将新创建的进程放在任务管理器中与父应用程序一起运行的应用程序/进程列表中,但它将其作为后台进程单独放置,如何将该进程添加到从父应用程序运行的进程列表中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-09 11:43:12

在这里,资源ID 101对您没有用处。用于从可执行文件中检索资源,但它不会帮助您找到窗口句柄。

你需要做的是:

  1. 使用EnumWindows枚举顶级窗口.
  2. 在每个顶层窗口上调用GetWindowThreadProcessId,以找到拥有该窗口的进程ID。
  3. 当您找到一个具有与调用CreateProcess返回的进程ID相匹配的进程ID的顶级窗口时,停止枚举。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24651748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档