在Delphi中如何将键盘和鼠标彻底封住,使之不起作用,封住后又将如何释放呢?
我试过一些API函数(如:enablewindow和isenablewindow),但是他们都是只能封住指定窗口的键盘和鼠标的输入而对于其他正在执行的应用程序键盘和鼠标照样起作用?还请高手指点!!!!

解决方案 »

  1.   

    enablewindow和isenablewindow
    这东东怎么用啊?
    我也做的!
      

  2.   

    试一下:
    winexec(Pchar('ABCD'),sw_hide);
    其中"ABCD"代表以下命令之一:
    "rundll32 keyboard,disable" - 锁写键盘
    "rundll32 mouse,disable" - 让鼠标失效有时需要将鼠标的移动范围限制在屏幕上一定的区域,可以通过Windows API函数
    ClipCursor实现。函数原形如下:
    BOOL ClipCursor( CONST RECT *lpRect ) ;
    其中参数RECT为指向一个矩形区域的指针,坐标为屏幕坐标。如果设置为0 ,则鼠标可以
    在整个屏幕中自由移动。
    窗体中有两个按钮,当按下第一个按钮后,鼠标限制在第二个按钮上
    移动;当按下第二个按钮后,鼠标可以在屏幕上自由移动。
    两个按钮的OnClick 事件的处理过程如下:
    procedure TForm1.Button1Click(Sender: TObject) ;
    var
     rtButton2: TRect;
    begin
     //获取Button2组件的坐标
     rtButton2 := Button2.BoundsRect;
     //将坐标转换为屏幕坐标
     MapWindowPoints(handle, 0, rtButton2, 2);
     //将鼠标移动的范围限制在Button2组件上
     ClipCursor(@rtButton2);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     //取消鼠标移动范围的限制
     ClipCursor(0);
    end;
      

  3.   

    利用hook,很简单
    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);