同じ値のハンドルがあるかどうか考えていますか?
私の質問を明確にするために、メモ帳を開いてテキストを入力し、保存してからメモ帳を閉じたとします。これを 1,000 回 (またはそれ以上) 繰り返した場合、最初に使用したメモ帳のメイン ウィンドウに同じウィンドウ ハンドル (HWND) 値が使用されているのを見る機会はありますか? もしそうなら、なぜですか?
同じ値のハンドルがあるかどうか考えていますか?
私の質問を明確にするために、メモ帳を開いてテキストを入力し、保存してからメモ帳を閉じたとします。これを 1,000 回 (またはそれ以上) 繰り返した場合、最初に使用したメモ帳のメイン ウィンドウに同じウィンドウ ハンドル (HWND) 値が使用されているのを見る機会はありますか? もしそうなら、なぜですか?
はい。ハンドルを表すことができる値の数には限りがあるため、Windows はそれらを最終的に再利用する必要があります。
ハンドルが閉じられると、ハンドルはなくなり、何もできなくなり、存在しなくなり、見ることさえできなくなります。
その後、別のハンドルを開くと、Windows がハンドル値を再利用する可能性があります。
鳩の巣のプリンシパルによると、はい、一意にすることはできません。
32 ビット プロセス (WoW64) との互換性のため、ハンドルは 64 ビット OS でも 64 ビット全体を使用できません。64 ビット プロセスがハンドルを 32 ビットの子プロセスに渡す、またはハンドルを取得することを考えてください。 32 ビット プロセスによって開かれたウィンドウに。これにより、実際のスペースがかなり小さくなるため、再利用の可能性が非常に高くなります。
はい、ウィンドウ ハンドルは再利用されます。
IsWindow
関数のドキュメントには次のように記載されています。
この関数が呼び出された後にウィンドウが破棄される可能性があるため、スレッドは
IsWindow
作成していないウィンドウに使用しないでください。さらに、ウィンドウ ハンドルは再利用されるため、ハンドルが別の window を指すことさえあります。
ハンドル値については絶対に仮定しないことをお勧めします。
すべての実用的な目的のために、具体的なハンドル値について考える必要はありません。ハンドルは、他の何かの不透明なプレースホルダーと見なす必要があります。実際のものへの参照がなくても、何か (ウィンドウなど) を参照するためにハンドルを渡すことができますが、ハンドル自体を見る必要はありません。それが数値であるという事実は、実装の詳細と見なされるべきです。重要ではありません (何らかの低レベルのシステム プログラミングを行っている場合を除きます)。
そうは言っても、私は@jalfの答えを支持します:ハンドル値は再利用される可能性があります。それについて何らかの仮定をしなければならない場合、ハンドル値はいつでも再利用できると仮定します。