好像不行,callback和winapi在windef.h中都是__stdcall,而且我试过了,结果没区别,在msdn中mouseproc的定义就是
LRESULT CALLBACK MouseProc(
  int nCode,      // hook code
  WPARAM wParam,  // message identifier
  LPARAM lParam   // mouse coordinates
);
请赐教!!!

解决方案 »

  1.   

    有点奇怪,为什么要wParam=WM_MOUSEMOVE 呢? 这样不会对程序有任何影响的,因为送到hook里的消息是一份拷贝,在hook中改动无效。除非有另一个hook排在你的hook链后面,那么你这样做还有点意义。
    还有全局hook必须在dll中的。
      

  2.   

    全局hook不用在dll中,我用了键盘全局钩子,可以实现,贴出源码,看看吧#define _WIN32_WINNT 0x0400
    #include <Windows.h>
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    LRESULT CALLBACK LowLevelKeyboardProc(int nCode, 
       WPARAM wParam, LPARAM lParam) {   BOOL fEatKeystroke = FALSE;
       PKBDLLHOOKSTRUCT p;
       if (nCode == HC_ACTION) {
          switch (wParam) {
          case WM_KEYDOWN:  case WM_SYSKEYDOWN:
          case WM_KEYUP:    case WM_SYSKEYUP: 
             p = (PKBDLLHOOKSTRUCT) lParam;
             fEatKeystroke = 
                ( (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
                ( (p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
                ( (p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0) )||
                ( (p->vkCode == 46) && ( (p->flags & LLKHF_ALTDOWN) != 0 ) && 
    ( (GetKeyState(VK_CONTROL) & 0x8000) != 0));   
        //its possible to add other keys....
        //the 46 means del
         break;
          }
       }
      // return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
       return;
    }
    ///////////////////////////////////////////////////////////////////////////////int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {   // Install the low-level keyboard & mouse hooks
       HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL, 
          LowLevelKeyboardProc, hInstance, 0);   // Keep this app running until we're told to stop
       MessageBox(NULL, 
          TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now not working.\n"),
          TEXT("Disable Low-Level Keys"), MB_OK);
       UnhookWindowsHookEx(hhkLowLevelKybd);   return(0);
    }
    此源码中断对一些系统键的响应,我将callnexthookex删掉,虽然报了一个warning,但可以实现屏蔽键盘,我想鼠标也应当可以。高档菜鸟,你说得我不同意,我安了hook之后,我的hook自动在hook栈的最上方,所以我最先收到消息,只要我不调用callnexthookex,高层应用就收不到消息了,你看看msdn吧!!!