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 回答