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;
}
}
}
相关文章
- 07-22摒弃显示器,通过 ssh 控制树莓派
- 07-22MAC OSX通过Terminal命令行控制蓝牙状态开关
- 07-22汇编语言实现通过8255A和4个开关控制实现8个LED灯和8个7位数码管显示指定数字全亮、全灭、从左至右、从右至左跑马灯式点亮
- 07-22Git使用总结 Asp.net生命周期与Http协议 托管代码与非托管代码的区别 通过IEnumerable接口遍历数据 依赖注入与控制反转 C#多线程——优先级 AutoFac容器初步 C#特性详解 C#特性详解 WPF 可触摸移动的ScrollViewer控件 .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
- 07-22C#获取显示器屏幕数量 控制winform显示到哪一个屏幕
- 07-22C# 通过热键控制显示器开关
- 07-22通过编写一个简单的日志类库来加深了解C#的文件访问控制
- 07-22WinCE C#程序,控制启动时只能启动一个程序,使用互斥量来实现,该实现方法测试通过
- 07-22C#通过反射实现简单的控制反转和依赖注入(一)
- 07-22C#与Arduino通过串口通信来控制LED灯的状态