键盘上的power键一按就要关机了,请问有没有办法可以在按的时候拦截它给机器发送的消息而进行其他操作。

解决方案 »

  1.   

    strp 1:使用梅花起子打开键盘
    step 2: 找到power键位接头,转接到某功能键如F12
    step 3:在程序中拦截F12按下的消息
      

  2.   

    我一直在试图拦住Sleep,可是我目前仍在等待...
      

  3.   

    以下是一个按键地勾子:
    Intercepting The TAB and ENTER Keys{the prototype for the new keyboard hook function}
      function KeyboardHook(nCode: Integer; wParam: WPARAM;
                            lParam: LPARAM): LResult; stdcall;var
      Form1: TForm1;
      WinHook: HHOOK;    // a handle to the keyboard hook functionimplementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin  {install the keyboard hook function into the keyboard hook chain}
      WinHook:=SetWindowsHookEx(WH_KEYBOARD, @KeyboardHook, 0, GetCurrentThreadID);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      {remove the keyboard hook function from the keyboard hook chain}
      UnhookWindowsHookEx(WinHook);
    end;function KeyboardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;begin
      {if we can process the hook information...}
      if (nCode>-1) then
        {...was the TAB key pressed?}
        if (wParam=VK_TAB) then
        begin
          {if so, output a beep sound}
          MessageBeep(0);      {indicate that the message was processed}
          Result := 1;
        end
        else
        {...was the RETURN key pressed?}    if (wParam=VK_RETURN) then
        begin
          {if so, and if the key is on the up stroke, cause
          the focus to move to the next control}
          if ((lParam shr 31)=1) then
            Form1.Perform(WM_NEXTDLGCTL, 0, 0);      {indicate that the message was processed}
          Result := 1;
        end
        else
          {otherwise, indicate that the message was not processed.}      Result := 0
      else
        {we must pass the hook information to the next hook in the chain}
        Result := CallNextHookEx(WinHook, nCode, wParam, lParam);
    end;你可以试一下,不过肯定不行。Power是没有Virual Key code的。
    如果你会写vxd的话就可以搞定你的问题了。
      

  4.   

    呵呵 !实验室要冒一定危险的了!!!!
    power~
      

  5.   

    public
       procedure WMPowerBroadcast(var message: TMessage); message WM_POWERBROADCAST;procedure TForm1.WMPowerBroadcast(var message: TMessage);
    begin
      message.Result := BROADCAST_QUERY_DENY;   {阻止系统关闭热键}
    end;这是截取power键的代码
      

  6.   

    你可以根据以上代码做一个程序驻留在系统托盘,这样每次不小心按道power键也不会导致关机了。