1

独自のキオスク アプリケーションをシェルとして実行しています (HKLM/Software/Microsoft/Windows NT/winlogon/shell を置き換えます)。

アプリケーションはモニターをオフにできる必要があり、これを行うために Process.Start("scrnsave.scr") を使用していました。私の開発マシンでは動作しますが、シェルが置き換えられたときは動作しません。

UseShellExecute が true に設定されていることは明らかですが、false に設定するとスクリーンセーバーを実行できません。コマンドとして explorer.exe を使用し、引数として scrnsave.scr を使用すると、単にエクスプローラ ウィンドウが開きます。

スクリーンセーバーを実行するためにエクスプローラーに渡すことができるスイッチはありますか、それとも同じことを達成する別の方法はありますか?

ありがとう。

4

1 に答える 1

3

Windows メッセージをシステムに送信することで、スクリーン セーバーを開始できます。

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0)

次の定義が必要です

static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
static readonly IntPtr SC_SCREENSAVE = new IntPtr(0xf140);
const uint WM_SYSCOMMAND = 0x112;

[DllImport("User32",SetLastError=true)]
extern static int SendMessage(
  IntPtr hWnd,
  uint Msg,
  IntPtr wParam,
  IntPtr lParam);

その後、次のように使用できます

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, IntPtr.Zero);
于 2010-09-09T15:52:52.260 に答える