我正在运行自己的kiosk应用程序作为shell(替换HKLM / Software / Microsoft / Windows NT / winlogon / shell)。
应用程序需要能够关闭监视器,我正在使用Process.Start(“scrnsave.scr”)来执行此操作。它适用于我的开发机器,但不能在更换外壳时使用。
显然是因为UseShellExecute设置为true,但是当我将其设置为false时,我无法运行屏幕保护程序。使用explorer.exe作为命令并使用scrnsave.scr作为参数只会导致浏览器窗口打开。
是否有一个开关可以传递给资源管理器以使其运行屏幕保护程序,还是有其他方法可以实现相同的功能?
感谢。
答案 0 :(得分: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);