2016-03-25 132 views
1

如何檢查窗口是否已創建?我試過這個如何知道何時創建窗口?

BOOL isWindowReady = FALSE; 
while(!isWindowReady) 
{ 
    hwnd = FindWindow(windowClass, NULL); 
    if (hwnd == NULL) { 
     hwnd = FindWindow(windowClass, NULL); 
    } 
    else { 
     isWindowReady = TRUE; 
    } 
} 

但是id不起作用。

+0

如果HWND是在你的函數空,你procceed將相同的值分配給hwnd,讓它在第一位置爲空,讓你處於無限循環? – coders

+1

如果'CreateWindow'返回的結果是有效的,你可以知道是否創建了一個窗口.. –

+0

我忘了添加,它是來自另一個進程的窗口,所以基本上我的程序應該啓動另一個進程,並等待它創建另一個窗口。 – revolt

回答

1

你的代碼在技術上沒問題(雖然你的第二個電話號碼是FindWindow()是多餘的) - 假設你提供了windowClass的正確值,也就是說。

話雖這麼說,你的循環可以簡化爲:

while (!FindWindow(windowClass, NULL)) { Sleep(100); } 

或者,如果你需要的HWND後來訪問窗口:

HWND hWindow; 
do 
{ 
    hWindow = FindWindow(windowClass, NULL); 
    if (hWindow) break; 
    Sleep(100); 
} 
while (true); 
+0

我以爲使用睡眠功能並不好。 – revolt

+0

和順便說一句,它仍然無法正常工作。它適用於我在CreateProcess和FindWIndow之間添加Sleep(800),但我不喜歡這個 – revolt

+0

如果它不工作,那麼可能是1)您沒有使用正確的'windowClass'開始,或者2 )窗口正在循環迭代之間被創建和銷燬,所以你永遠不會看到它。 –

相關問題