如何能用API锁定键盘? (100分)

心语

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在程序中锁定机器的键盘?
 
调用屏幕保护程序即可, 注意在屏幕保护程序中要设置密码<br>Winexec('c:/windows/system/三维文字.scr',SW_SHOW);<br><br>
 
当然最好c:/windows/system目录中的所有scr文件列表出来,由用户选择<br>这可要写点代码了
 
首先2000是没办法的<br><br>我这里有几种方法<br>1汇编(2000不行)<br>2利用blackinput(要在timer中使用,因为他不能拦截CTRL+ALT+DEL,<br>但是我保证她什么也干不成了,因为结束任务试没希望的)<br>
 
写个键盘钩子,把消息队列里的所有按键都吃掉
 
我一般是用Hook来处理比较特别的KeyBoardMessage,不过对于Sleep、Wake Up、Power<br>还有该死的Ctrl+Alt+Del这些没办法了~~~~~~~~~如果大家有办法一定要告诉我啊
 
自己写 VXD 吧!
 
你查查以前的贴子,有许多(Id:443460讲得很实用)<br>以下是摘抄xujiancai和Fyx的回答:<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>Var<br>&nbsp; rtButton2: TRect;<br>Temp:integer;<br>begin<br>&nbsp; rtButton2 := Button2.BoundsRect;<br>&nbsp; MapWindowPoints(handle, 0, rtButton2, 2); // 座标换算<br>&nbsp; ClipCursor(@rtButton2); // 限制滑鼠移动区域<br>SystemParametersInfo(spi_screensaverrunning,1,@temp,0);<br><br>end;<br><br>锁鼠标上面说了,锁键盘:<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; Asm &nbsp; &nbsp;//封锁20端口<br>&nbsp; &nbsp; IN AL,21H<br>&nbsp; &nbsp; OR AL,02H<br>&nbsp; &nbsp; OUT 21H,AL<br>&nbsp; end;<br>end;<br><br>解锁键盘:<br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>&nbsp; Asm &nbsp; &nbsp; //解锁20端口<br>&nbsp; &nbsp; IN AL,21H<br>&nbsp; &nbsp; AND AL,0FDH<br>&nbsp; &nbsp; OUT 21H,AL<br>&nbsp; end;<br>end;<br><br>
 
方法我试过了谁能用API的方法实现我立马给分
 
不要说100分,win2000下要是谁能用任何方法真正锁住键盘的,我立刻给500分!<br>[:D]<br>
 
为什么用汇编屏蔽不了那三个键?
 
Ctrl+Alt+Del<br>在windows2000下可能弄不掉
 
什么意思?
 
在98年的电脑报(也可能是99年的电脑报)我看到过用API函数屏蔽所有键盘使用的例子,请<br>提问者留意一下电脑报即可。很简单,就几行代码而已,不过我现在忘记了,去翻一下电脑报<br>就行了。
 
//下面是锁定Ctrl+Alt+Del Alt+F4 Alt+ESC等系统组合键<br>//锁定其他非组和键最好用键盘钩子实现<br>锁定<br>procedure hidekey;<br>Var<br>temp:integer;<br>begin<br>SystemParametersInfo(Spi_screensaverrunning,1,@temp,0);<br>end;<br>解锁<br>procedure hidekey;<br>Var<br>temp:integer;<br>begin<br>SystemParametersInfo(Spi_screensaverrunning,0,@temp,0);<br>end;<br><br>
 
试试这个HOOK!<br><br>Library KillKB;<br>Uses Wintypes, WinProcs<br>{$IFNDEF VER80},<br>{$ENDIF};<br>Var<br>oldHook: Hhook;<br><br>Function KbHook( code: Integer; wparam: Word; lparam: LongInt ): LongInt;<br>export;<br>Begin<br>If code &lt; 0 Then<br>KbHook := CallNextHookEx( oldHook, code, wparam, lparam )<br>Else<br>KbHook := 1;<br>End; { KbHook }<br><br>Function DisableKeyboard: Boolean; export;<br>Begin<br>oldHook := SetWindowsHookEx( WH_KEYBOARD, KbHook, Hinstance, 0 );<br>DisableKeyboard := oldHook &lt;&gt; 0;<br>End;<br><br>Procedure EnableKeyboard; export;<br>Begin<br>If oldHook &lt;&gt; 0 Then Begin<br>UnhookWindowshookEx( oldHook );<br>oldHook := 0;<br>End; { If }<br>End;<br><br>exports<br>DisableKeyboard index 1,<br>EnableKeyboard index 2;<br><br>Begin<br>oldHook := 0;<br>End. &nbsp;
 
在WIN2K下可以吗?
 
win2k下有个什么函数可以锁定<br>有谁知道?
 
顶部