我想在我的程序运行到指定的位置,能屏蔽掉键盘对windows程序的响应。
就是用户在任何程序中都不能输入键盘。下面是用禁止键盘中断的代码。但不知道怎么不行,大家有什么好办法可以屏蔽键盘的响应。
procedure TForm1.Button7Click(Sender: TObject);
begin
  Asm                //禁止键盘输入
     IN AL,21H    //键盘中断是一个可屏蔽中断 ,可通过向8259中断控制器送屏蔽控制字来屏蔽键盘中断 。控制键盘的是中断屏蔽寄存器的第1位 ,只要将该位置1,即可关闭键盘的中断 。
     mov al,02h
     out 21h,al   end;
end;procedure TForm1.Button8Click(Sender: TObject);
begin
  Asm  
     IN AL,21H   //恢复键盘
     mov al,0fdh  //只要将该位置1,即可关闭键盘的中断
     out 21h,al
  end;
end;

解决方案 »

  1.   

    Windows可能并不能这样简单地屏蔽吧,
    我也不知如何解决,查想可能的方法是:驱动程序之类;钩子程序。
    如果只对某几个控件进行控制,可以在适当的地方设计设置它们的OnKeyPress事件为以下的函数
    XXXX.OnKeyPress:=myKeyHandle;
    procedure myKeyHandle(....);    //参数如何你去看KeyPress吧,
    begin
      Key:=#0;
    end;而在你不想屏蔽的时候就改为其它的函数,如:
    Edit1.OnKeyPress:=nil;  
    或者
    Edit1.OnKeyPress:=Edit1KeyPress;  
      

  2.   

    那就要用hookdll了,不会!user32.dll有一个函数BlockInput(true),可以锁住键盘和鼠标的,除了按alt+del+ctrl没其他办法解所锁(程序里可以用BlockInput(false)解锁),不过这招太毒了点,你看有没有帮助。
    汇编不太懂,不过d中不能直接调用dos中断的,而且必须将bx压栈。
      

  3.   

    to bluekitty(可爱猪猪) :
    那就要用hookdll了,不会!user32.dll有一个函数BlockInput(true),可以锁住键盘和鼠标的,除了按alt+del+ctrl没其他办法解所锁(程序里可以用BlockInput(false)解锁),不过这招太毒了点,你看有没有帮助。BlockInput()会不会封锁住我发的键盘消息。
    如果也封锁掉的话,可能就不行了。
      

  4.   

    to bluekitty(可爱猪猪) :
    我写了一个HOOK DLL,
    但是不知道那里要改,我的那个dll是只能够扑捉到键盘的消息,不能对他进行屏蔽。
    他是在键盘按下去的字符显示出来后才回返回消息给我。
      

  5.   

    to  miszyf(miszyf):
    不行。我现在是想在我的程序里屏蔽键盘对其他程序的作用。
      

  6.   

    你要求的很底层了,
    可能不太好玩啊.
    修改Windows源代码可以做到:)祝你早成功(不是玩笑),我还想知道呢.