首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中使用RegisterHotKey()?

如何在C#中使用RegisterHotKey()?
EN

Stack Overflow用户
提问于 2012-01-18 22:37:37
回答 1查看 23.5K关注 0票数 12

我正在尝试注册一个热键,我正在将this C++代码转换为C#:

代码语言:javascript
复制
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern
            bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, int vk);
        [DllImport("user32")]
        public static extern
            bool GetMessage(ref Message lpMsg, IntPtr handle, uint mMsgFilterInMain, uint mMsgFilterMax);

        public const int MOD_ALT = 0x0001;
        public const int MOD_CONTROL = 0x0002;
        public const int MOD_SHIFT = 0x004;
        public const int MOD_NOREPEAT = 0x400;
        public const int WM_HOTKEY = 0x312;
        public const int DSIX = 0x36;
        
        static void Main(string[] args)
        {
            if (!RegisterHotKey(IntPtr.Zero, 1, MOD_ALT | MOD_NOREPEAT, DSIX))
            {
                Console.WriteLine("failed key register!");
            }

            Message msg = new Message();

            while (!GetMessage(ref msg, IntPtr.Zero, 0, 0))
            {
                if (msg.message == WM_HOTKEY)
                {
                    Console.WriteLine("do work..");
                }
            }

            Console.ReadLine();
        }
    }

    public class Message
    {
        public int message { get; set; }
    }
}

但是RegisterHotKey()从不返回false。我不确定方法中传递的参数,IntPtr.Zero应该为空,消息类构造函数的第二个参数需要一个对象。任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-18 22:46:12

这可能会有所帮助:

Hotkey in console app

基本上,您必须创建一个“隐藏”表单才能使其工作

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8911930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档