快来回答!

解决方案 »

  1.   

    //鼠标钩子函数
    LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if(nCode == HC_ACTION)
    {
    for(UINT i = 0; i < 17; i++)
    {
    switch(uHookMouseType & (UINT)pow(2, i))
    {
    case MOUSE_L:
    switch(wParam)
    {
    case WM_LBUTTONDOWN:
    case WM_LBUTTONUP:
    return 1;
    break;
    }
    break;
    case MOUSE_R:
    switch(wParam)
    {
    case WM_RBUTTONDOWN:
    case WM_RBUTTONUP:
    return 1;
    break;
    }
    break;
    case MOUSE_ALL:
    return 1;
    break;
    }
    }
    } return ::CallNextHookEx(hhMouse, nCode, wParam, lParam);
    }
      

  2.   

    //键盘钩子函数
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if(nCode == HC_ACTION)
    {
    switch(wParam)
    {
    case WM_KEYDOWN:
    case WM_KEYUP:
    case WM_SYSKEYDOWN:
    case WM_SYSKEYUP:
    PKBDLLHOOKSTRUCT pHook = (PKBDLLHOOKSTRUCT)lParam;
    for(UINT i = 0; i < 17; i++)
    {
    switch(uHookKeyType & (DWORD)pow(2, i))
    {
    case KEY_ESC:
    if((pHook->vkCode == VK_ESCAPE) && 
    (!(::GetKeyState(VK_CONTROL) & 0x8000)))
    {
    if(pMainWnd && !bFlagEsc)
    {
    if(CWnd::GetActiveWindow() == pMainWnd)
    {
    return 1;
    }
    }
    else
    {
    return 1;
    }
    }
    break;
    case KEY_ALTESC:
    if((pHook->vkCode == VK_ESCAPE) && (pHook->flags & LLKHF_ALTDOWN))
    {
    return 1;
    }
    break;
    case KEY_ALTTAB:
    if((pHook->vkCode == VK_TAB) && (pHook->flags & LLKHF_ALTDOWN))
    {

    return 1;
    }
    break;
    case KEY_CTRLESC:
    if((pHook->vkCode == VK_ESCAPE) && 
    (::GetKeyState(VK_CONTROL) & 0x8000))
    {
    return 1;
    }
    break;
    case KEY_LWIN:
    if(pHook->vkCode == VK_LWIN)
    {
    return 1;
    }
    break;
    case KEY_RWIN:
    if(pHook->vkCode == VK_RWIN)
    {
    return 1;
    }
    break;
    case KEY_TAB:
    if(pHook->vkCode == VK_TAB)
    {
    return 1;
    }
    break;
    case KEY_APPS:
    if(pHook->vkCode == VK_APPS)
    {
    if(pMainWnd && !bFlagApps)
    {
    if(CWnd::GetActiveWindow() == pMainWnd)
    {
    if(wParam == WM_KEYUP)
    {
    if((iMenuPos > -1) || (pShortMenu))
    {
    //消除菜单渐出现象
    ::Sleep(250);
    //隐性地调用Bonus.dll的CWndOP::ShortMenu
    //显示快捷菜单
    CWndOP *pWndOP = (CWndOP*)pMainWnd;
    pWndOP->ShortMenu(iMenuPos, pShortMenu);
    }
    else
    {
    return 1;
    }
    }
    else
    {
    return 1;
    }
    }
    }
    else
    {
    return 1;
    }
    }
    break;
    case KEY_PRINT:
    if(pHook->vkCode == VK_PRINT)
    {
    return 1;
    }
    break;
    case KEY_SNAPSHOT:
    if(pHook->vkCode == VK_SNAPSHOT)
    {
    return 1;
    }
    break;
    case KEY_PAUSE:
    if(pHook->vkCode == VK_PAUSE)
    {
    return 1;
    }
    break;
    case KEY_ALL:
    return 1;
    break;
    case KEY_ALTF4:
    if((pHook->vkCode == VK_F4) && (pHook->flags == LLKHF_ALTDOWN))
    {
    return 1;
    }
    break;
    }
    }
    break;
    }
    } return ::CallNextHookEx(hhKey, nCode, wParam, lParam);
    }
      

  3.   

    demetry: 返回1就封锁了吗?(请教)
      

  4.   

    可以去这里看一看,有完整的解决方案,绝对实用:
    http://www.aslike.net
      

  5.   

    回掉里只需写一行return 1就可以了
    写全局钩子
    锁定键盘和鼠标的钩子
    DLL端
    // HOOK.cpp : Defines the entry point for the DLL application.
    //#include "stdafx.h"
    #include "HOOK.h"
    #include "mmsystem.h"
    #define _WIN32_WINNT 0x0500 #include <windows.h>
    #include <winuser.h>
    HINSTANCE hInstance;
    HHOOK hhkKeyboard;
    HHOOK  hhMouseHook;BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
       hInstance=(HINSTANCE)hModule;
       return TRUE;
    }
    // This is an example of an exported variable
    HOOK_API int nHOOK=0;// This is an example of an exported function.
    HOOK_API int fnHOOK(void)
    {
    return 42;
    }// This is the constructor of a class that has been exported.
    // see HOOK.h for the class definition
    CHOOK::CHOOK()

    return; 
    }LRESULT LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    //可以加入一些释放键盘的代码return 1
    }LRESULT LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    //可以加入一些释放鼠标的代码
    return 1
    }HOOK_API BOOL EnableKeyboardCapture()//设定钩子用来锁定键盘鼠标
    {
    if (!(hhkKeyboard=SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, hInstance, 0)))
    return FALSE;
    if (!(hhMouseHook=SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)LowLevelMouseProc, hInstance, 0)))
    return FALSE;; 
    return TRUE;
    }HOOK_API BOOL DisableKeyboardCapture()//释放键盘和鼠标
    {
    UnhookWindowsHookEx(hhMouseHook);
    return UnhookWindowsHookEx(hhkKeyboard);
    }-------------------------------------------------
    DLL端编译器(VC6)C/C++属性页加入环境变量HOOK_EXPORTS
    //头文件定义
    HOOK.h
    ------------------------------------------------------------
    #ifdef HOOK_EXPORTS
    #define HOOK_API __declspec(dllexport)
    #else
    #define HOOK_API __declspec(dllimport)
    #endif HOOK_API BOOL EnableKeyboardCapture();
    HOOK_API BOOL DisableKeyboardCapture();
    // This class is exported from the HOOK.dll
    class HOOK_API CHOOK {
    public:
    CHOOK(void);
    // TODO: add your methods here.
    };extern HOOK_API int nHOOK;HOOK_API int fnHOOK(void);应用程序端只要加入HOOK.H和HOOK.lib就行了,然后按自己要求调用 EnableKeyboardCapture();
     DisableKeyboardCapture();最后提醒一句,在没有加入释放键盘鼠标的代码前,不要编译运行,否则后果自负