锁键盘一般都用封锁20端口的方法:
锁键盘
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; 但是,但是,这是一个特权指令,你要获得比ring3高的权限才行
锁键盘
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; 但是,但是,这是一个特权指令,你要获得比ring3高的权限才行
解决方案 »
- DelphiDistiller1.81 趣盘下载
- 老家伙没事回来露个脸~~~~~~~ 老家伙进来
- 怎样判定光驱的开与关状态?
- 复选框问题。谢谢大家
- delphi7中如何打印dbgrid?
- 急啊:在多线程中,如何知道某个线程使用的变量是不是他自己的,如果要明确线程使用它自己的变量?请看详情
- 如何在asecc中用sql语句作连接查询?
- 关于编辑控件格式显示的问题
- 如何判断一个Image中是否有图片?
- 如何得到字符串中倒数第三位的字符?
- >>>>>>>>>如何让listview的某一行的字体颜色变成红色?<<<<<<<<<<<<<<<<(
- 请问怎样用[ 简便 ]AdoQuery一次取得一条记录?我现在只能用QueryField.Fields[i].Text取得一条记录中一个字段的值
一般键用keyboard hook :
Library KillKB;
Uses Wintypes, WinProcs
{$IFNDEF VER80},
{$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.
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);//打开吧
或这样:
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;