我想在我的程序运行到指定的位置,能屏蔽掉键盘对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;
就是用户在任何程序中都不能输入键盘。下面是用禁止键盘中断的代码。但不知道怎么不行,大家有什么好办法可以屏蔽键盘的响应。
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;
我也不知如何解决,查想可能的方法是:驱动程序之类;钩子程序。
如果只对某几个控件进行控制,可以在适当的地方设计设置它们的OnKeyPress事件为以下的函数
XXXX.OnKeyPress:=myKeyHandle;
procedure myKeyHandle(....); //参数如何你去看KeyPress吧,
begin
Key:=#0;
end;而在你不想屏蔽的时候就改为其它的函数,如:
Edit1.OnKeyPress:=nil;
或者
Edit1.OnKeyPress:=Edit1KeyPress;
汇编不太懂,不过d中不能直接调用dos中断的,而且必须将bx压栈。
那就要用hookdll了,不会!user32.dll有一个函数BlockInput(true),可以锁住键盘和鼠标的,除了按alt+del+ctrl没其他办法解所锁(程序里可以用BlockInput(false)解锁),不过这招太毒了点,你看有没有帮助。BlockInput()会不会封锁住我发的键盘消息。
如果也封锁掉的话,可能就不行了。
我写了一个HOOK DLL,
但是不知道那里要改,我的那个dll是只能够扑捉到键盘的消息,不能对他进行屏蔽。
他是在键盘按下去的字符显示出来后才回返回消息给我。
不行。我现在是想在我的程序里屏蔽键盘对其他程序的作用。
可能不太好玩啊.
修改Windows源代码可以做到:)祝你早成功(不是玩笑),我还想知道呢.