我做了一个 系统键盘钩子: 
// 注册系统钩子 --- 用于 修改 按键 
Hook_setting = (HHOOK)SetWindowsHookEx(WH_GETMESSAGE, 
(HOOKPROC)LauncherHook_setting, 
theApp.m_hInstance, 
0); 问题是: 
我用 左Shift、右Shift、左Ctrl、右Ctrl 来代替其它键位时, 
会出问题, 比如 修改了 Shift为 小键盘Num1时,不输出, 
而 修改了 Shift为 普通数字1时,输出为 !(应该是被识别为Shift+1了)。 如果我要让 修改Shift为 小键盘Num1时,正常输出Num1; 
修改Shift为 普通数字1时,正常输出 1; 应该怎么做? 
哪位高手,可以稍微指点一下? 

解决方案 »

  1.   

    三个消息,WM_KEYDOWN,WM_CHAR,WM_KEYUP都改了吗,你怎么做的?
      

  2.   

    系统中是要记录Shift、Ctrl等键的状态的,单修改消息达不到目的,可以改成WH_KEYBOARD_LL钩子,用keybd_event来模拟键盘输入。
      

  3.   

    WH_KEYBOARD_LL 键盘钩子,可以做到?
    你确定?有人说是,必须做 驱动过滤 ,因为Shift、Ctrl、Alt、Win键 跟普通的键不一样
      

  4.   

    说几个键和其他键不一样,我觉得不大可能,因为虚拟扫描码也就那个数,实在不明白究竟有什么不同,进程有特权,难道键盘也有?至少我没听说过……
    2L的思路应该可行,因为以前有人写过HotKey屏蔽Win键,也没见到用什么过滤驱动之类的东西
      

  5.   

    To 9楼:          Shift、Ctrl、Alt 功能,          如果在 KeyDown 和KeyUp 之间 将  键盘Shift消息改成字母, 字母大写变小写,小写则变大写。          如果是改成 数字,就不输出了, 变成组合键了。          可见,Shift 还有一部分组合 ,没有被拔掉。To 10楼:         有什么可好奇的,分本来就是用来分给别人的。
             至于这个ID,我是用了好几年了。
      

  6.   

    VOID keybd_event(          BYTE bVk,
        BYTE bScan,
        DWORD dwFlags,
        PTR dwExtraInfo
    );
      

  7.   

    VOID keybd_event(          BYTE bVk, 
        BYTE bScan, 
        DWORD dwFlags, 
        PTR dwExtraInfo 
    );