2014-07-09 118 views
0

我已經使用WaitForInputIdle直接運行CreateProcess的一個小應用程序後,但我似乎無法通過EnumWindows和GetWindowThreadProcessId,我作爲一個進程運行的.exe我新創建的進程得到正確的窗口句柄看起來是這樣的:CreateProcess得到句柄無效

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函數會將新創建的進程放置在任務管理器中與父應用程序一起運行的應用程序/進程的列表中,但它將其作爲自己的後臺進程,如何將進程添加到從父應用程序運行的進程列表?

enter image description here

+2

頂級窗口沒有像子控件那樣的ID。 –

+0

所以'101'不是一個ID? –

+1

這是一個資源ID,但它不會與創建的窗口關聯。 –

回答

4

資源ID 101這裏是不是對你有用。這用於從可執行文件中檢索資源,但它不會幫助您找到窗口句柄。

你需要做的是:

  1. 使用EnumWindows枚舉頂級窗口。
  2. 在每個頂層窗口調用GetWindowThreadProcessId來查找擁有該窗口的進程ID。
  3. 停止枚舉,找到頂級窗口,其進程ID與調用CreateProcess返回的進程ID相匹配。