ウィンドウをアクティブ化する

Windows98あたりから、他のウィンドウでキーボード入力中に
入力状態を持たないスレッドがウィンドウをアクティブ化することができなくなっている。

その対策として、入力状態を持たないスレッドがウィンドウをアクティブ化する為に

  • SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,0,0,0)として一時的にOSの設定を変更する
  • AttachThreadInputを使用して、入力状態を持つスレッドと接続する

等の方法があるが、どちらの方法も不安定で、無効になる事が多い。

もし、目的がホットキーの実装なら、RegisterHotKeyを使用するのが確実。ホットキーの処理中はスレッドにウィンドウのアクティブか許可が与えられている。