运维开发网

C#通过热键控制显示器开关的方法

运维开发网 https://www.qedev.com 2020-03-10 11:53 出处:网络 作者: shichen2014
本文实例讲述了C#通过热键控制显示器开关的方法。分享给大家供大家参考。

本文实例讲述了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#程序设计有所帮助。

0

精彩评论

暂无评论...
验证码 换一张
取 消