ここで行き止まりになりそうです。次のことを行うプロジェクトがあります。
- ただ実行して通知領域にとどまる
- ユーザーがマウスの中ボタンを押すと、フォームが表示されます
- ユーザーはフォームから何でも選択でき、満足できます。
これはうまく機能していますが、機能していないのは、フォームが表示されてもアクティブにならないことです。
app.manifest を に変更する前は、正常にrequireAdmin
動作していました。フォームが表示されるたびに、ブームがアクティブになりました。
しかし、フォームを管理者として実行しているので、フォームを使用して他のアプリケーションの 1 つを制御できるようにする必要があるため (管理者としても実行されます)、フォームは正常に表示されますが、アクティブになりません。 .
私は試しました: - TopMost = true
Form_Load メソッドの内部 - Form_LoadSetForegroundWindow
のフォームハンドルで呼び出す - Form_Load のShowDialog
両方を呼び出し、フォームが構築されたときにも試しました。Activate
- Form_Load およびフォームの作成時に呼び出す
これが私のレイアウトです:
- プログラムが実行され、マニフェストにより UAC 権限が必要になり、ユーザーが同意し、開始されます
- 通知アイコンのみが表示され、実行中であることを示す素敵な小さなバブルが表示されます
- Program.cs は、キーボード/マウス フックを監視します。
- マウスの中ボタン、またはキーボード フックのいずれかがトリガーされると、新しいフォーム オブジェクトが作成されます。
- フォームが表示される場所を設定します
- そして最後にフォームを表示します。
繰り返しますが、UAC がなくrequireAdmin
、app.manifest の内部では、これは正常に機能します。しかし、管理者として実行されると、いいえ、前に留まることはありません。
SetForegroundWindow
MS がウィンドウの新しいバージョン (Vista、7、8) で要件をより厳しくしたことは知っていますが、このフォームを一番上のアクティブなウィンドウ (コンテキスト メニューなど) として表示できるようにする必要があります。
どうすればそれを適切に行うことができますか?