如题!

解决方案 »

  1.   

    用hook吧,具体我也不会,但是一定行
      

  2.   

    1、
    procedure TTestForm.BitBtn1Click(Sender: TObject);
    var
      Temp: Integer;
    begin
      SystemParametersInfo(SPI_ScreenSaverRunning,1,@Temp,0);//屏蔽
    end;procedure TTestForm.BitBtn2Click(Sender: TObject);
    var
      Temp: Integer;
    begin
      SystemParametersInfo(SPI_ScreenSaverRunning,0,@Temp,0);//恢复
    end;2、用键盘低层Hook:
    function LowLevelKeyboardProc(nCode:integer;WParam:WPARAM;LParam:LPARAM):LRESULT;stdcall;
    type
    KBDLLHOOKSTRUCT=record
        vkCode:DWORD;
        scanCode:DWORD;
        flags:DWORD;
        time:DWord;
        dwExtraInfo:dword;
    end;
    var
       fFlag:BOOL;
       p:^KBDLLHOOKSTRUCT;
    begin
       result:=0;
       fFlag := false;
       p:=Pointer(LPARAM);
       if (ncode=HC_ACTION) then
       begin
       case wparam of
        WM_KEYDOWN,
        WM_SYSKEYDOWN,
        WM_KEYUP,
        WM_SYSKEYUP:
        fFlag :=(p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps);
        end;
        end;
        if fFlag = true then
           Result:=1;
        if ncode <> 0 then
           Result := CallNextHookEX(0,ncode,wparam,lparam);
    end;procedure TForm1.Button1Click(Sender: TObject);
    const
        WH_KEYBOARD_LL=13;
    begin
     setwindowshookexw(WH_KEYBOARD_LL,LowlevelKeyboardproc,hinstance,0);
    end;