qq 截图

本文介绍如何使用.NET Framework实现热键注册与取消,并利用Settings类简化配置管理。通过实例展示了如何定义热键行为及响应逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

热键设置:

 [DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(
            IntPtr hWnd,                //要定义热键的窗口的句柄
            int id,                     //定义热键ID(不能与其它ID重复)          
            uint 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
        }

 

使用系统的Settings

优势,可以免去每次都去写Xmldocment对象去读数据

我们在配置文件里面这样写:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type =" System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="ScreenCutter.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <ScreenCutter.Properties.Settings>
            <setting name="HotKey" serializeAs="String">
                <value>A</value>
            </setting>
            <setting name="isCtrlHotKey" serializeAs="String">
                <value>True</value>
            </setting>
            <setting name="isAltHotKey" serializeAs="String">
                <value>True</value>
            </setting>
            <setting name="DefaultHotKey" serializeAs="String">
                <value>A</value>
            </setting>
        </ScreenCutter.Properties.Settings>
    </userSettings>
</configuration>

 

然后我们再程序里这样读写存取:

Settings.Default.HotKey = Keys.A;
            Settings.Default.Save();

 

组合键:

uint ctrHotKey = (uint)KeyModifiers.Control;
            if (Settings.Default.isAltHotKey)
            {
                ctrHotKey =(uint)(KeyModifiers.Alt | KeyModifiers.Control);
            }
            HotKey.RegisterHotKey(Handle, 100, ctrHotKey, Settings.Default.HotKey);//注意这里的100

 

 

来看看这里的逻辑:

当热键的消息来的时候,也就wndproc捕捉到const int WM_HOTKEY = 0x0312 消息的时候,

case WM_HOTKEY:

       PostHotKey(Message m);

break;

在这个消息处理中,判断是不是本窗口的事件

     private void ProcessHotkey(Message m) //按下设定的键时调用该函数
        {
            IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型
            string sid = id.ToString();
            switch (sid)
            {
                case "100":
                    CutScreen();
                    break;
                default:
                    break;
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值