繁体   English   中英

如何在C#中实现全局热键?

[英]How to implement Global Hotkeys in C#?

我需要编写一个全局拦截Alt + Shift + S的应用程序。

我所做的是创建了一个设置全局挂钩的DLL:

namespace Hotkeydll
{
    public class MyHotKey
    {
        public static void setHooks()
        {
            KeyboardHookProcedure = new HookProc(KeyboardHookProc);
            hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
        }

        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            //write something into file
        }


   }
}

然后,我创建了一个程序来加载此DLL并设置钩子:

using Hotkeydll;
namespace IWFHotkeyStarter
{
    class Program
    {
        static void Main(string[] args)
        {
            MyHotKey.setHooks();
        }
    }
}

现在的问题是热键不起作用。

似乎DLL没有永久加载到内存中。 我看到我可以从文件系统中删除dll文件。

因此,请告知我我做错了什么?

我应该使用其他方法吗?

谢谢。

您的Main()方法设置了钩子,然后立即退出并终止程序。 此外,您需要一个消息循环来使挂钩回调起作用。 这需要Windows Forms或WPF应用程序。 现在,也可以使用真实的热键代替挂钩。 请查看此线程的示例,C#在页面的下方。

键盘挂钩通常不是获取全局热键的正确方法。

尽可能使用RegisterHotkey

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM