锁键盘procedure TForm1.Button1Click(Sender: TObject);
begin
  Asm    //封锁20端口
  IN AL,21H
  OR AL,02H
  OUT 21H,AL
  end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
 Asm         //解锁20端口
 IN AL,21H
 AND AL,0FDH
 OUT 21H,AL
 end;
end;

解决方案 »

  1.   

    锁键盘procedure TForm1.Button1Click(Sender: TObject);
    begin
      Asm    //封锁20端口
      IN AL,21H
      OR AL,02H
      OUT 21H,AL
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     Asm         //解锁20端口
     IN AL,21H
     AND AL,0FDH
     OUT 21H,AL
     end;
    end;
      

  2.   

    var KHK: HHook;
        tmp: integer;
    function HookProc(ICode: integer;WP:WParam;LP:LParam):LResult;
    begin
      Result:=CallNextHookEx(KHK,0,0,0);
    end;使用下列语句开始锁定:
    KHK:=SetWindowsHookex(WH_JOURNALPLAYBACK,@HookProc,HInstance,0);
    使用下列语句结束锁定:
    UnHookWindowsHookEx(KHK);这时候不能屏蔽Windows的系统键Ctrl-Alt-Tab,Ctrl-Esc,Alt-Tab等
    你就可以使用:
    SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @tmp, 0);//锁起来
    SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, @tmp, 0);//打开吧
      

  3.   

    再给你一个例子.DLL:禁止和允许键盘按键
    Library KillKB;
    Uses Wintypes, WinProcs
    {$IFNDEF VER80}
      ,Win31
    {$ENDIF}
      ;
    Var
      oldHook: HHook;Function KbHook( code: Integer; wparam: Word; lparam: LongInt ): LongInt;
      export;
    Begin
      If code < 0 Then
        KbHook := CallNextHookEx( oldHook, code, wparam, lparam )
      Else
        KbHook := 1;
    End; { KbHook }Function DisableKeyboard: Boolean; export;
    Begin  oldHook := SetWindowsHookEx( WH_KEYBOARD, KbHook, HInstance, 0 );
      DisableKeyboard := oldHook <> 0;
    End;Procedure EnableKeyboard; export;
    Begin
      If oldHook <> 0 Then Begin
        UnhookWindowshookEx( oldHook );
        oldHook := 0;
      End; { If }
    End;exports
    DisableKeyboard index 1,
    EnableKeyboard index 2;Begin
      oldHook := 0;
    End.有一些组合键不能屏蔽掉,例如Ctrl+Alt+Del
      

  4.   

    我使用过了
    可是当我同时按下Ctrl+Alt+delete的时候还是可以使用键盘的呀
    我想的是在运行程序后键盘就锁住
      

  5.   

    呵呵,楼上各位说的在win2000下可不行
    看到你要截获键盘消息了。
      

  6.   

    用api函数
    SystemParametersInfo
    c++的原型是
    BOOL SystemParametersInfo(
      UINT uiAction,  // system parameter to retrieve or set
      UINT uiParam,   // depends on action to be taken
      PVOID pvParam,  // depends on action to be taken
      UINT fWinIni    // user profile update option
    );