4

アプリケーションが別のアプリケーションを呼び出してアクティブ化すると、呼び出されたアプリケーションがフォアグラウンドに移動しないという問題が発生する可能性があります。

回避策の1 つは、HKCU\Control Panel\Desktop\ForegroundLockTimeoutレジストリ値を0デフォルトの200000ミリ秒ではなく に設定することです。

アプリケーションはこのレジストリ値をどのように制御する必要がありますか? 回避策を実現するために一時的に変更してから元に戻すことは可能でしょうか?

4

1 に答える 1

7

その場でレジストリをハッキングすることは、受け入れられる回避策ではありません。アプリケーションがフォアグラウンド ウィンドウを所有している場合、別のアプリケーションのウィンドウをアクティブにするのに問題はありません。これは、 AllowSetForegroundWindow() winapi 関数を使用して明示的に行うことができます。リンクされた MSDN ページにも正確なルールがリストされています。SystemParameterInfo 関数の SPI_SETFOREGROUNDLOCKTIMEOUT 引数を見つけるのにも役立ちます。

ルールを破る、文書化されていない汚いハックがあります。これについては、.NET フレームワークで実際に使用されていることを除いて、詳しくは説明しません。あなたの質問のほとんどは .NET の質問なので、Microsoft.VisualBasic.Interaction.AppActivate() メソッドを使用できます。ところで、それほど使いやすいわけではありません。

ユーザーはこの種のハッキングを絶対に嫌うことに注意してください。アンインストーラーが正常であることを確認してください。

于 2013-11-05T13:18:03.517 に答える