使用本代码,你可以实现在点下Windows关机键后,屏幕关闭,鼠标键盘暂时不能唤醒屏幕,让人以为已经关闭了电脑!
时间所限,仅列出关键代码,你可以在此基础上添加上显示假的关机屏幕,以实现以假乱真效果!
导入Win32 API三个函数
[DllImport("kernel32.dll")] static extern bool SetProcessShutdownParameters(uint dwLevel, uint dwFlags); // 设置进程相对于其它进程的关闭优先级 [DllImport("user32.dll")] static extern bool BlockInput(bool fBlockIt); // 禁用键盘鼠标 [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); //用于发送关闭显示器消息 const UInt32 WM_SYSCOMMAND = 0x0112; const UInt32 SC_MONITORPOWER = 0xF170; |
下面是主要代码
public FormMain() { InitializeComponent(); Microsoft.Win32.SystemEvents.SessionEnding += SessionEndingEvent; SetProcessShutdownParameters(0x480, 0); } ~FormMain() { Microsoft.Win32.SystemEvents.SessionEnding -= SessionEndingEvent; } private void SessionEndingEvent(object sender, SessionEndingEventArgs e) { SessionEndReasons endReasons = e.Reason; BlockInput(true); SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)2); e.Cancel = true; } |
注意:Microsoft.Win32.SystemEvents.SessionEnding事件需要在Form窗体下才有效,不然这么简单的程序我还是习惯写成控制台的。程序在接收到系统关机信息后,先用BlockInput切断键盘鼠标输入,然后关闭显示器。SetProcessShutdownParameters的目的是保证次程序最先收到关机消息。
如何恢复输入?MSDN说 Presse CTRL+ALT+DEL!
Win7 下是阻止不了关机的!Win7下可以参考这个 《用hook实现win7下假关机》
转载注明:http://www.shenyaocn.com/c-实现假关机/