簡體   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