0

アプリケーションを起動し、ユーザーが「A」キーを押すと終了するスクリーンセーバーを C# で作成しています。

これは現在、.scr ファイルをダブルクリックするか、起動するまで待つと、Windows 7 で発生します。Windows XP では、.scr ファイルをダブルクリックした場合にのみ、外部アプリケーションが正常に起動します。OS によってスクリーンセーバーが起動された場合、「A」を押すとスクリーンセーバーは終了しますが、外部アプリケーションが一瞬起動して終了します。タスク マネージャーは、外部アプリケーションがスクリーンセーバーの 1 秒前に終了することを示しています。これにより、何らかの理由で外部アプリケーションも終了すると思います。これは、外部アプリケーションを設定した場合の動作です。

ユーザーがダブルクリックするのではなく、OS からスクリーンセーバーを起動したときに発生する内部的な問題はありますか?

私はSystem.Diagnostics.Process.Start()外部アプリケーションを実行するために使用していますが、使用ProcessProcessStartInfoても同じ効果があります。

.NET Framework 3.5 を使用しています

よろしく、フランク

4

1 に答える 1

1

はい、スクリーンセーバーは独自のデスクトップで実行されます。一般的なものは、ログインデスクトップ、現在表示しているデスクトップ、スクリーンセーバーデスクトップの3つです。プロセスは、CreateProcessに渡されたSTARTUPINFO.lpDesktopメンバーを介してデスクトップに関連付けられます。NULLの場合、現在のデスクトップで実行されます。

デスクトップ上で実行されているすべてのプロセスが閉じられるまで、デスクトップを閉じることはできません。これは、自動的に行われることを示しています。なぜこれを行おうとしているのかわかりませんが、このプロセスが強制終了されないようにCreateProcessをピンボーキングすることを検討しています。私は、Windowsがこれを許可していることを疑っています。スクリーンセーバーは、マルウェアの悪名高いベクトルでした。

于 2010-10-23T13:41:47.927 に答える