C# を使用してタスクバーのボタンにマウスクリックを送信する
質問
私が現在作業しているアプリケーションでは、外部アプリケーションのウィンドウを最前面に表示することが要件になっています。BringWindowToTop や SetForeground ウィンドウなどの Win32 API 呼び出しが常に機能するとは限りません。これは、Windows XP 内のいくつかの制限によるものです。代わりに私がやりたいのは、タスクバー上のウィンドウのボタンをクリックするシミュレートを送信することです。これにより、ウィンドウが前面に表示されることを期待しています。これがどのようにして可能なのか知っている人はいますか?
解決
次の「2K/XP でフォーカスを盗む方法」セクションを確認してください。 http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, 、これがまさに必要なものだからです。タスクバーは非表示になっているか、単に存在しない可能性があるため、私はタスクバーのルートには進みません。
他のヒント
それが可能だ。しかし、それは非常に大ざっぱです。文書化されていないため、アプリケーションは Windows の次のバージョンでも機能しなくなる可能性があります。あなたがしなければならないことは、タスクバーのウィンドウハンドルを見つけて、次にボタンを表す子ウィンドウのウィンドウハンドルを見つけて、それにWM_MOUSEDOWN(おそらく)メッセージを送信することです。
タスクバーのウィンドウハンドルを見つける方法については、次のとおりです。
FWIW では、BringWindowToTop/SetForeground に制限があるのは、ウィンドウがフォーカスを盗むときにイライラするためです。企業環境で作業している場合は、それは問題ではないかもしれません。覚えておいてください。:)
私はこれを、クリックとマウスの動きをシミュレートする必要があるプログラムで使用しました。
正直に言うと、XP/Vista/2003/2000 でウィンドウを最前面に表示するときに問題が発生したことはありません。
次のことを必ず行う必要があります。
- IsIconic (最小化) かどうかを確認します
- もし#1の結果がtrueなら SW_RESTOREを渡すショーウィンドウ
- 次に SetForegroundWindow を呼び出します
これらの手順で実行できると考えられる問題が発生したことはありません。