2016-03-25 5 views
1

ウィンドウがすでに作成されているかどうかを確認するにはどうすればよいですか?私はこれを試したウィンドウの作成時期を知るにはどうすればよいですか?

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

しかし、IDは動作しません。

+0

をHWNDがあなたの関数でnullの場合は、あなたをprocceed hwndに同じ値を代入すると、最初はnullになって無限ループに陥ってしまいましたか? – coders

+1

'CreateWindow'が有効な結果を返すと、ウィンドウが作成されたかどうかを知ることができます。 –

+0

追加することを忘れました。別のプロセスのウィンドウです。したがって、基本的にプログラムは別のプロセスを開始し、 – revolt

答えて

1

コードは技術的には問題ありません(FindWindow()への2回目の呼び出しは冗長ですが)、windowClassの正しい値を指定していることを条件とします。言われていること

、あなたのループを簡素化することができます。

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

それとも、あなたは後でウィンドウにアクセスするHWNDが必要な場合:

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

私はスリープ機能がOKではないと思った。 – revolt

+0

とbtw、それでも動作しません。 CreateProcessとFindWIndowの間にSleep(800)を追加するだけで動作しますが、これは好きではありません – revolt

+0

もしうまくいかない場合は、1)最初に正しいwindowClassを使用していないか、2ウィンドウが作成され、ループ反復の間に破棄されるため、ウィンドウが表示されません。 –