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