これが私が持っているものです: C++ で書かれた Web ブラウザ プラグインと、C# で書かれた Windows アプリケーションです。名前付きパイプを介して通信します。プラグインは、C# アプリケーションにファイルを開くように指示します (ファイルが .txt で、メモ帳で開くとします)。
C# アプリケーションにコマンドが与えられると、ファイルが開かれますが、メモ帳がフォアグラウンドで表示されないため、フォアグラウンドでメモ帳を開く必要があります。
SetForegroundWindow
関数を呼び出すように C# アプリケーションを変更しました。今回はフォアグラウンドでメモ帳が開きませんでしたが、タスクバーが点滅します。
および多くの記事のドキュメントを読んだ後SetForegroundWindow
、問題が何であるかを理解したと思います.C#アプリケーションはフォアグラウンドプロセスではなく、ブラウザーが(?)だったため、メモ帳をフォアグラウンドに移動できません。
これを読んだ後:
「フォアグラウンド ウィンドウを設定できるプロセスは、AllowSetForegroundWindow 関数を呼び出すことによって、別のプロセスがフォアグラウンド ウィンドウを設定できるようにすることができます。」
プラグインを変更することにしました。
今回は、プラグインがパラメーターとしてAllowSetForegroundWindow
渡される関数を呼び出します (リスクがあることはわかっていますが、確実に実行できるようにしたかったのです)。ASFW_ANY
ASFW_ANY
AllowSetForegroundWindow
プラグインに変更を加えた後、テストしたところ、うまくいきました! (オペラ 12.02)。その後、Internet Explorer でテストしたところ、動作しました。しかし、Firefox と Chrome でテストしたときに問題が発生しました。C# アプリケーションには、メモ帳を前面に表示する機能がありませんでした。AllowSetForegroundWindow
これらのブラウザーでは、関数が false を返していることに気付きました。
そこで調査を開始し、Firefox が使用するプラグイン コンテナーが原因である可能性があるという結論に達しました。アイデアが思い浮かびました.Opera 12.02では機能しましたが、Opera 12.00では機能していましたが、プラグインコンテナはありません. そこで、Opera 12.00 をダウンロードし、テストを実行しましたが失敗しました。これにより、プラグイン コンテナーが原因であると結論付けました。
問題は、C# アプリケーションにフォアグラウンドを設定する機能を与えるにはどうすればよいかということです。
どうやって続けたらいいのかわからず、すべての正当な方法を試したと思います。AllowSetForegroundWindow
&はここSetForegroundWindow
では適用されないようです。