本文实例讲述了C#通过热键控制显示器开关的方法。分享给大家供大家参考。
具体实现方法如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices;namespace OpenMonitor { public partial class Form1 : Form { public Form1() { InitializeComponent(); HotKey.RegisterHotKey(this.Handle, 100, 0, Keys.F4); HotKey.RegisterHotKey(this.Handle,101,0,Keys.F5); }
class HotKey { // 如果函数执行成功,返回值不为0。 // 如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。 [DllImport("user32.dll ", SetLastError = true)] public static extern bool RegisterHotKey( IntPtr hWnd, // 要定义热键的窗口的句柄 int id, // 定义热键ID(不能与其它ID重复) KeyModifiers fsModifiers, // 标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 Keys vk // 定义热键的内容 );
[DllImport("user32.dll ", SetLastError = true)] public static extern bool UnregisterHotKey( IntPtr hWnd, // 要取消热键的窗口的句柄 int id // 要取消热键的ID );
// 定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值) [Flags()] public enum KeyModifiers { None = 0, Alt = 1, Ctrl = 2, Shift = 4, WindowsKey = 8 } }
protected override void WndProc(ref Message m) { const int WM_HOTKEY = 0x0312; // 按快捷键 switch (m.Msg) { case WM_HOTKEY: switch (m.WParam.ToInt32()) { case 100: MonitorHelper.TurnOn(); break; case 101: MonitorHelper.TurnOff(); break; } break; } base.WndProc(ref m); }
class MonitorHelper { public static void TurnOn() { SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1); }
public static void TurnOff() { SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2); }
[DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff); private const uint WM_SYSCOMMAND = 0x0112; private const int SC_MONITORPOWER = 0xf170; } } }
希望本文所述对大家的C#程序设计有所帮助。