本帖最后由 qdtity 于 2010-08-17 19:10:41 编辑

解决方案 »

  1.   

    最近我的笔记本F2 F3键坏了,我写了个键盘钩子,改成了F5 F6, 你可以参考一下代码:library HookKeyboard;uses
      SysUtils, Windows, Messages;{$R *.res}type
      PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
      KBDLLHOOKSTRUCT = record
        vkCode: DWORD;
        ScanCode: DWORD;
        Flags: DWORD;
        Time: DWORD;
        dwExtraInfo: DWORD;
      end;const WH_KEYBOARD_LL = 13;var
      hHook: Integer;function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
    //调用键盘钩子,把F2改成F5 F3改成F6
    var
      p: PKBDLLHOOKSTRUCT;
    begin
      if nCode < 0 then
          Result:= CallNextHookEx(hHook,nCode,WParam,LParam)
      else
      begin
        p := PKBDLLHOOKSTRUCT(Lparam);
        case WParam of
          WM_KEYDOWN,WM_SYSKEYDOWN: //按键后判断所按键
          begin
            if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, 0, 0);
            if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, 0, 0);
          end;
          WM_KEYUP,WM_SYSKEYUP: //松开按键后判断所按键
          begin
            if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
            if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0);
          end;
        end;
        Result:= CallNextHookEx(hHook,nCode,WParam,LParam); //其他键放下一个钩子
      end
    end;
    procedure LoadDestroyWndHook;    //设置系统挂钩
    begin
      hHook:=SetWindowsHookEx(WH_KEYBOARD_LL, keyHookProc, Hinstance,0);
    end;procedure UnLoadDestroyWndHook; //注销系统挂钩
    begin
      UnHookWindowsHookEx(hHook);
      hHook := 0;
    end;exports
      LoadDestroyWndHook,
      UnLoadDestroyWndHook;
    end.
      

  2.   

    WH_KEYBOARD_LL
    这个在哪里定义的
      

  3.   

    你没看我代码? const WH_KEYBOARD_LL = 13;
    delphi里没有,翻MSDN翻出来的
      

  4.   

    看到了,不过不知道怎么回事,使用了WH_KEYBOARD_LL 这个之后连本窗口都没有反应了。
    使用od调试都没有反映。
    使用WH_KEYBOARD至少在本窗口好用。
      

  5.   

    WH_KEYBOARD_LL 不好用,还是WH_KEYBOARD好用
    问题找到了,是sendmessage的事情,主窗口最小化以后没有接收到消息