質問
からのネイティブWin32APIのC++を用いた道はあるのかどうか判断するために窓を伴うHWNDの有効期限が切れていないことで?
解決
きのWin32API IsWindow.
おそれがあります。 ご利用いた2つの理由
- Windowsの取扱で再配布することができます。一ウィンドウが破壊されない場合はハンドルを完全に異なるウィンドウでいます。
- の状態が変更直後のこの呼び出しまうのでは有効ですが、だんなさくするように心がけています。
らにMSDN(リンクとして上)
スレッドを利用するべきではありませんIsWindow用 ウィンドウを作らなかったので 窓が破棄され この機能が行われようとしていました。さらに、 すので取り扱うリサイクル のもポイント 示されます。
何ができるのか?
その問題をできるarchitectedなっていないことの必要性をチェックを有します。かの例を構築できるパイプのクライアントからサーバーです。
でも、windowsのフックを検出するための特定のメッセージが発生し、これを失わせないアイテムほとんどです。
他のヒント
この質問は古いですが、私は、この機能を自分で必要と注意事項について読んだ後失望少しでした。しかし、より多くのビットをやって掘った後、すべてが順調であると思われます。あなたは16ビットプログラムを扱っている場合を除き、IsWindowは移動するための方法であるように思われます。ハンドルの再利用の問題は、これに応じて十分に対処されているように見えます:
http://blogs.msdn.com/b/oldnewthing/archive /2007/07/17/3903614.aspxする
そうで、理由は上位16ビットの再利用カウンタの、それはあなたがウィンドウの再利用の問題に実行されます可能性はほとんどありません。
利用できる IsWindow() もし送信のウィンドウWM_NULLメッセージ SendMessage(hWnd,WM_NULLます。
また、この画面が破壊する時間ない場合、下します。と述べての可能性のある所属別ウィンドウとして取り扱いの再利用されます。実際にはわからないのがれることです。
唯一の方法は、私にとって、知り合いのシステムを広 フック そのためのメッセージを示すウィンドウが破壊(WM_CLOSE,WM_DESTROY).そのような比較のメッセージ画面でを扱うものではありませんが、windowsお気にも影響することになります。 詳細はこちらをご確認くださいシステムの広い。
は、その後、私は、そのウィンドウの応答非ゼロ結果にカスタムメッセージを登録することをお勧め。他のウィンドウ(または無効HWND)にそのメッセージを送信すると0になります。
もちろん、あなただけに伝えていることHWNDは、あなたがコントロールすることのいずれかのウィンドウを参照している場合 - 。でも有利であるかもしれないその上でおそらく与えられた他の回答
使用RegisterWindowMessageが十分に一意の名前を使用して、メッセージを登録します。
たぶんIsWindow
、FindWindow
とGetWindowThreadProcessId
の組み合わせは、より正確になります。
HWND windowHandle = FindWindow(NULL, TEXT("window_title"));
LPDWORD oldpid = 0;
GetWindowThreadProcessId(windowHandle, &oldpid);
//after some time
if (IsWindow(windowHandle))
{
LPDWORD newpid = 0;
GetWindowThreadProcessId(windowHandle, &newpid);
if (newpid == oldpid)
{
//the window is still running
}else
{
//the window exists but has changed
}
}
if(IsWindow(FindWindow(NULL , TEXT("Example Window Name")))){
// do stuff
}
ウィンドウには、適切な名前を存在しているかどうかをチェックします。