在c#中获取键盘钩子的键码的位置

Anu*_*uya 0 c# winapi

我使用以下代码禁用键盘组合挂钩.我上网的时候得到了这个代码.我想知道键盘键的键码列表.[lParam.vkCode == ???]请给我链接,谢谢..

namespace BlockShortcuts

{

public class DisableKeys

{

private delegate int LowLevelKeyboardProcDelegate(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

[DllImport("user32.dll", EntryPoint = "SetWindowsHookExA", CharSet = CharSet.Ansi)]

private static extern int SetWindowsHookEx(int idHook, LowLevelKeyboardProcDelegate lpfn, int hMod, int dwThreadId);

[DllImport("user32.dll")]
private static extern int UnhookWindowsHookEx(int hHook);

[DllImport("user32.dll", EntryPoint = "CallNextHookEx", CharSet = CharSet.Ansi)]

private static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);

const int WH_KEYBOARD_LL = 13;

private int intLLKey;

private struct KBDLLHOOKSTRUCT
{
    public int vkCode;
    int scanCode;
    public int flags;
    int time;
    int dwExtraInfo;
}
private int LowLevelKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
{
    bool blnEat = false; switch (wParam)
    {
        case 256:
        case 257:
        case 260:
        case 261:
            //Alt+Tab, Alt+Esc, Ctrl+Esc, Windows Key                           
            if (((lParam.vkCode == 9) && (lParam.flags == 32)) ||
                ((lParam.vkCode == 27) && (lParam.flags == 32)) ||
                ((lParam.vkCode == 27) && (lParam.flags == 0)) ||
                ((lParam.vkCode == 91) && (lParam.flags == 1)) ||
                ((lParam.vkCode == 92) && (lParam.flags == 1)) ||
                ((true) && (lParam.flags == 32)))
            {
                blnEat = true;
            }
            break;
    } if (blnEat) return 1; else return CallNextHookEx(0, nCode, wParam, ref lParam);
}
public void DisableKeyboardHook()
{
    intLLKey = SetWindowsHookEx(WH_KEYBOARD_LL, new LowLevelKeyboardProcDelegate(LowLevelKeyboardProc), System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(), 0);
}
private void ReleaseKeyboardHook()
{
    intLLKey = UnhookWindowsHookEx(intLLKey);
}
#endregion  
}

}
Run Code Online (Sandbox Code Playgroud)

Ham*_*ith 5

首先查看回调LowLevelKeyboardProc的定义.
然后检查作为你的lparam的结构的定义.
从那里你可以看到vkcode是一个虚拟密钥代码.MSDN上也有一个列表.

编辑:根据评论,更新链接指向MSDN的Windows键盘输入部分,而不是MSDN的Windows CE键盘输入部分.