1

これが私が持っているものです: C++ で書かれた Web ブラウザ プラグインと、C# で書かれた Windows アプリケーションです。名前付きパイプを介して通信します。プラグインは、C# アプリケーションにファイルを開くように指示します (ファイルが .txt で、メモ帳で開くとします)。

C# アプリケーションにコマンドが与えられると、ファイルが開かれますが、メモ帳がフォアグラウンドで表示されないため、フォアグラウンドでメモ帳を開く必要があります。

SetForegroundWindow関数を呼び出すように C# アプリケーションを変更しました。今回はフォアグラウンドでメモ帳が開きませんでしたが、タスクバーが点滅します。

および多くの記事のドキュメントを読んだ後SetForegroundWindow、問題が何であるかを理解したと思います.C#アプリケーションはフォアグラウンドプロセスではなく、ブラウザーが(?)だったため、メモ帳をフォアグラウンドに移動できません。

これを読んだ後:

「フォアグラウンド ウィンドウを設定できるプロセスは、AllowSetForegroundWindow 関数を呼び出すことによって、別のプロセスがフォアグラウンド ウィンドウを設定できるようにすることができます。」

プラグインを変更することにしました。

今回は、プラグインがパラメーターとしてAllowSetForegroundWindow渡される関数を呼び出します (リスクがあることはわかっていますが、確実に実行できるようにしたかったのです)。ASFW_ANYASFW_ANYAllowSetForegroundWindow

プラグインに変更を加えた後、テストしたところ、うまくいきました! (オペラ 12.02)。その後、Internet Explorer でテストしたところ、動作しました。しかし、Firefox と Chrome でテストしたときに問題が発生しました。C# アプリケーションには、メモ帳を前面に表示する機能がありませんでした。AllowSetForegroundWindowこれらのブラウザーでは、関数が false を返していることに気付きました。

そこで調査を開始し、Firefox が使用するプラグイン コンテナーが原因である可能性があるという結論に達しました。アイデアが思い浮かびました.Opera 12.02では機能しましたが、Opera 12.00では機能していましたが、プラグインコンテナはありません. そこで、Opera 12.00 をダウンロードし、テストを実行しましたが失敗しました。これにより、プラグイン コンテナーが原因であると結論付けました。

問題は、C# アプリケーションにフォアグラウンドを設定する機能を与えるにはどうすればよいかということです。

どうやって続けたらいいのかわからず、すべての正当な方法を試したと思います。AllowSetForegroundWindow&はここSetForegroundWindowでは適用されないようです。

4

1 に答える 1

0

プラグイン プロセスもフォアグラウンド プロセスではないため、C# アプリケーションにプラグインからその機能を与えることはできません。実際には、少なくともいくつかのブラウザでは、別のプロセスで実行されています。IE ではそうではありませんが、整合性の低いプロセスにいるため、自分でプロセスを起動するには、そのアプリケーションを起動してもよいことを指定するレジストリ エントリが必要になります。

私はあなたに同意しなければなりません - 私はあなたがすべての合法的な方法を試したと思いますが、それは不可能です. 最近のバージョンの Windows では、インストーラーでさえ重要なウィンドウをバックグラウンドで開いてしまうことがよくあります。

于 2012-09-08T03:33:23.290 に答える