Запустите заставку, когда проводник не является оболочкой - PullRequest
1 голос
/ 09 сентября 2010

Я использую свое собственное приложение для киоска в качестве оболочки (заменяя HKLM / Software / Microsoft / Windows NT / winlogon / shell)

Приложение должно иметь возможность выключить монитор, и я использовал Process.Start ("scrnsave.scr") для этого. Он работает на моей машине разработчика, но не при замене оболочки.

Это очевидно, потому что UseShellExecute установлен в true, но когда я установил его в false, я не могу запустить заставку. Использование explorer.exe в качестве команды и scrnsave.scr в качестве аргумента приводит к открытию окна проводника.

Есть ли переключатель, который я могу передать проводнику, чтобы он запускал заставку, или есть другой способ добиться того же?

Спасибо.

1 Ответ

3 голосов
/ 09 сентября 2010

Вы можете запустить экранную заставку, отправив сообщение 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);
...