2017-01-25 19 views
1

私が書いているアプリケーションは、仮想キーボードを使用しています。仮想キーボードを表示、非表示、サイズ変更、または移動するには、まずFindWindow関数を呼び出してハンドルを取得し、PostMessageによっていくつかのメッセージを送信する必要があります。FindWindowで受け取ったハンドルを解放する必要がありますか?

私はwinapiに関する経験がないので、私の質問は何らかの方法でこのハンドルを解放する必要があるのか​​、それとも私が完了したらそれをちょうど忘れることができますか?

仮想キーボードは、自分のアプリケーションよりも寿命が長い独自のプロセスです。

答えて

4

このハンドルを完成させる必要はありません。それは、ウィンドウを作成したプロセスが所有しています。ウィンドウは、ウィンドウを破壊することも担当しています。

カーネルハンドル(ファイルハンドル、イベントハンドル、ミューテックスハンドルなど)とは異なり、ウィンドウハンドルは参照カウントされません。 FindWindowに電話してから、ウィンドウハンドルで何をする必要があるのか​​、それを実行します。

ただし、システムがウィンドウハンドルへの参照を追跡しないため、ウィンドウが破棄された場合、その破棄されたウィンドウへのハンドルを保持することができます。そして、システムがそのハンドルを再利用するならば、今度は別のウィンドウへのハンドルがあります。

このように複数のプロセス間でユーザーインターフェイスを調整している場合は、ウィンドウの破棄イベントも伝えて、1つのプロセスが古いハンドルを保持しないようにする必要があります。

関連する問題