请问如何拦截Ctrl、Shift、Alt、Win键?
目的是不让它执行1、如果利用keyDown或keyUP事件判断Ctrl、Shift、Alt:
如:判断Shift值为3(即按了Ctrl+Shift),若按了Ctrl+Shift虽然判断了,但它已经执行了(即已经切换了输入法)。现想既要禁用它,也不让它执行2、至于Win键(即Ctrl与Alt中间那个)我就无从下手不知道SendMessage这个函数能不能实现???????
请大家帮帮忙

解决方案 »

  1.   

    到这里看看http://stevenstudio.vip.myrice.com/
    我朋友的主页,上面有一个屏蔽win键的程序,可以看看怎么做的。
    另外欢迎访问我的主页:http://hesicong2004.533.net
      

  2.   

    win98和win2k都不同的,win98较简单,win2k超麻烦,去精华贴里找找
      

  3.   

    用VB修改注册表
      可以锁住  win2000 和winxp
      

  4.   

    先谢谢各位大哥帮忙goodname008(卢培培,充电中......) :
    你好,你能给这样的VC的源程序(实例)我吗[email protected]谢谢
      

  5.   

    拦截ctrl,alt,shift都可以,但对于win键,我只能拦截win + x 键,而单独的win键却不能拦截?我也郁闷中。
      

  6.   

    楼主,要屏蔽win键,需要使用低级键盘钩子来实现,欢迎来VC版块讨论。
    我有VC实现的源代码。
    VC中用低级键盘钩子实现屏蔽WIN键,以及ALT+TAB键。
      

  7.   

    cso(sjxsoft):
    用hook我试了不能实践,请帮忙解决
    kugou123(酷狗 闭关学习VC++):
    请贴VC的代码,让我学习一下
    谢谢
      

  8.   

    去搜索WM_KEYBOARD_LL
    但是热键,例如CtrlAltDel,CtrlAtlEsc等等要用远程注入热键处理程序的窗口过程的办法来捕获和处理
      

  9.   

    将它改一下就行了,但不能拦截ctrl+alt+delete。
    http://blog.csdn.net/biku/archive/2004/06/26/27156.aspx
      

  10.   

    这个是HOOK!~!~能拦截WIN键吗???????
    请帮忙
      

  11.   

    http://blog.csdn.net/jiangsheng/archive/2004/07/05/34814.aspx
      

  12.   

    http://community.csdn.net/Expert/topic/3064/3064162.xml?temp=.9554102
      

  13.   

    注册表中二进制值:“00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00”表示什么?
      

  14.   

    // 这个是普通的键盘钩子,全局的,编成.dll后在VB中可以直接调用#include "windows.h"HHOOK hHook = NULL;
    HINSTANCE hInstance = NULL;void WINAPI StartHook();
    void WINAPI StopHook();
    LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
    {
    hInstance = (HINSTANCE)hModule;
        return TRUE;
    }LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
    {
    return true;
    }void WINAPI StartHook()
    {
    hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hInstance, 0);
    }void WINAPI StopHook()
    {
    UnhookWindowsHookEx(hHook);
    }
      

  15.   

    http://www.onlinedown.net/soft/16780.htm我编过一个软件叫注册表大师,上面是下载地址,很多看似不太好解决的问题其实都可以通过修改注册表解决的。软件中集成了很多注册表技巧,我觉得是一批比较好的资料。这只是其中的两个:一、禁用Windows键:    在Windows增强键盘中,CTRL和ALT之间新增了一个很有用的Windows键,由它构成的组合键提供了许多多元化的命令操作模式。不过,如果你真的不喜欢它,也可以使用以下方法使Windows键失效。
        1、打开注册表编辑器。
        2、打开下面所示位置。在右侧新建一个“二进制值”,键名为"Scancode Map",将其值设为"00 00 00 00 00 00 00 00 03 00 00 00 00 00 5B E0 00 00 5C E0 00 00 00 00"。
        3、重新启动计算机。位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout支持的操作系统: NT  2000  二、禁止使用任务管理器(屏蔽alt+ctrl+del组合):    在Windows NT/2000/XP系统下,任何用户都可以通过任务管理器查看当前系统的状况,包括CPU、内存使用情况和当前系统中的进程。可以通过注册表禁止非管理员用户使用任务管理器。操作步骤如下:
        1、打开注册表编辑器。
        2、打开下面所示位置。在右侧窗口中新建DWORD值,命名为"DisableTaskMgr",将数值设为"1"。
        3、无需重新启动即可生效。再使用CTRL+ALT+DEL调用任务管理器时,会出现禁用消息框。位置:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System支持的操作系统: NT  2000  XP  
      

  16.   

    我只有vb的,不知道合意不?用EnableWindow()可达目的,第二个叁数传0进入则不能输入,传1则相反Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)Private Sub Command1_Click()
    Call EnableWindow(Me.hwnd, 0)
    Me.Caption = "现在拒绝KeyPress, MouseClick"
    Dim i As Long
    For i = 1 To 100
    Call Sleep(100)
    DoEvents '虽有DoEvents,会发现,按Form的任何地方都没有反应
    Next i
    Me.Caption = "现在解除了"
    Call EnableWindow(Me.hwnd, 1)
    End Sub
      

  17.   

    用VB很难拦住这几个键,用VC++就很容易。如果可能的话,就用VC++写吧!
      

  18.   

    容易,用API函数屏蔽掉这四个键就可以了
      

  19.   

    在2000下可以用vb解决这个问题,可是比较麻烦,不过win2000提供了一个api,可以封锁键盘输入(同时鼠标也被锁定),看你想干什么了,如果想恶做剧的话,倒是可以一试
      

  20.   

    我也觉得好象有个API函数可以实现这个问题,不过忘了,叫什么名字了。大家谁知道告诉我一下。
      

  21.   

    专门按楼主的要求写了个.dll,是一个全局的底层键盘钩子,实现屏蔽一对win键,一对ctrl键,一对shift键,一对alt键。下面是.dll的源代码,是用VC做的。//.cpp#include "windows.h"#define WH_KEYBOARD_LL     13typedef struct tagKBDLLHOOKSTRUCT {
        DWORD   vkCode;
        DWORD   scanCode;
        DWORD   flags;
        DWORD   time;
        DWORD   dwExtraInfo;
    } KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;HHOOK hHook = NULL;
    HINSTANCE hInstance = NULL;void WINAPI StartHook();
    void WINAPI StopHook();
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
    {
    hInstance = (HINSTANCE)hModule;
        return TRUE;
    }LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if (nCode >= 0)
    {
    KBDLLHOOKSTRUCT* kb = (KBDLLHOOKSTRUCT*)lParam;
    bool exp = kb->vkCode == 91 || kb->vkCode == 92 || kb->vkCode >= 160 && kb->vkCode <= 165;
    if (exp) return TRUE;
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
    }void WINAPI StartHook()
    {
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);

    }void WINAPI StopHook()
    {
    UnhookWindowsHookEx(hHook);
    }//.defEXPORTS
    StartHook @1
    StopHook @2
    编译后与VB的工程文件放在同一目录中。
    下面是VB的调用部分,非常简单,像用普通的API一样。' 加两个CommandButton。
    Option Explicit
    Private Declare Sub StartHook Lib "MaskKey.dll" ()
    Private Declare Sub StopHook Lib "MaskKey.dll" ()Private Sub Command1_Click()
        StartHook
    End SubPrivate Sub Command2_Click()
        StopHook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        StopHook
    End Sub
      

  22.   

    网时有限,时间又比较紧,上面的代码只注重功能上的实现,没写注释,有的地方可能也不太规范,只是大致意思,在 VC6 + VB6 + WinXP 下调试通过。上面的所有源代码已经打包发给楼主了,请查收。
      

  23.   

    LowLevelKeyboardProc只能在WINNT,WIN2000,WINXP中使用!所以上面的程序不能在WIN9X中使用!!!!
      

  24.   

    楼上的高手能否发一个给我?谢谢
    [email protected]
      

  25.   

    我也要
    [email protected]
    我现在正碰到这问题啊
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
      

  26.   

    我马上就能完成一篇文章,能实现屏蔽任意按键,只要给出keycode就行。
    马上,今明两天的事,写完后给大家链接。  :D
      

  27.   

    http://blog.csdn.net/goodname008/archive/2004/08/21/80827.aspx完成了,文章最后有DLL源代码及调用例程的下载链接。  :D
      

  28.   

    上面只能在WIN2K或以上的操作系统完成。但现在还有20%的用户使用WIN9X,请问在WIN9X下又如何用VB实现上述的功能呢?望大家给点意见!
      

  29.   

    屏蔽Win、Alt+Tab:
    在Win9X下用SystemParametersInfo
    在NT平台用底层键盘钩子
      

  30.   

    //2、至于Win键(即Ctrl与Alt中间那个)我就无从下手
    修改注册表可以实现屏蔽win键.可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard下创建一个二进制的值ScancodeMap,使它的值为:
    00,00,00,00,00,00,00,00,03,00,00,00,00,00,5b,e0,00,00,5c,e0,00,00,00,00  
    在VB中,可以用操作注册表的API函数来实现.
      

  31.   

    我有win9x下屏蔽Ctrl+Alt+Delete/Win/Alt+Tab键的代码,给我发一封邮件,我可以给各位源码[email protected]
      

  32.   

    http://community.csdn.net/Expert/TopicView.asp?id=3310057