如何完全锁住键盘?
工作中需要在NT系统启动后完全锁住键盘只留鼠标(拔掉键盘CMOS自检就通不过).考虑用HOOK,但只能锁字母和数字。象ALT_F4,C_A_D, Ctrl_Esc应该是系统接管的,有人试过没有? 问题点数:30、回复次数:32Top
1 楼Cleverhare(笨笨兔)回复于 2001-02-05 17:11:00 得分 0
补充一点:我用的工控软件Rsview可以锁CAD但不锁Alt_F4和WIN,另一个叫FIX中是可以全锁的。Top
2 楼rh(花覆茅檐)回复于 2001-02-05 22:43:00 得分 0
写一个vxd(主要是为了对端口进行直接编程,不一定要vxd)
然后对21号端口(ibm pc)取值
将这个值与2进行或运算
将这个值写入21号端口
就可以了Top
3 楼smartarrow(风色幻想)回复于 2001-02-06 10:33:00 得分 0
wwwTop
4 楼smartarrow(风色幻想)回复于 2001-02-06 10:33:00 得分 0
wwwTop
5 楼guanri(冠日)回复于 2001-02-06 10:52:00 得分 0
rh(迎风飞扬)可以讲一讲
21号端口么,为什么这样做?
vxd,好像不能在nt,下用Top
6 楼Tice(孤笑)回复于 2001-02-06 15:39:00 得分 0
HooK,不传递键盘消息!Top
7 楼NowCan(城市浪人)回复于 2001-02-06 18:40:00 得分 0
21号端口是中断控制器,写这个端口是为了屏蔽键盘中断。Top
8 楼Cleverhare(笨笨兔)回复于 2001-02-07 10:54:00 得分 0
1. rh,在DOS下肯定可以这样做。直接不理键盘中断,系统也就不会得到键盘消息了。
2. 从旧贴上看guanri说的也对,NT下不能用vxd,用的叫ddk,我对ddk一无所知。。。。。
3. 大家能分析一下我说的Rsview 和FIX中的实现思路吗?那可是在软件上设置后启动就生效了。。。象自动登录我已经知道改注册表就能实现,但屏蔽键盘(还可以任意设置屏蔽哪些键!)。。。
Top
9 楼Phoenix2000(Phoenix2000)回复于 2001-02-08 20:36:00 得分 0
哪里需要写什么 VxD 呀,只需要使欺骗 Windows,使系统认为进入屏幕保护状态,就可以评比任何按键。注意,我这里说的“欺骗”,并不是运行屏保程序。进入屏保状态很简单:
SystemParamsInfo(SPI_SCREENSAVERRUNNING, TRUE, NULL, 0);
这时系统并没有运行屏保,但此时确实进入了屏保状态。任何按件包括 Ctrl + Alt + Del 都无效了。要退出这种状态也很简单:
SystemParamsInfo(SPI_SCREENSAVERRUNNING, FALSE, NULL, 0);
就可以了
Top
10 楼Raptor(猛禽)回复于 2001-02-08 20:45:00 得分 0
NT下用WDM嘛,好像跟VXD也差不多。Top
11 楼Sunny_Yirui(雪飘飘)回复于 2001-02-09 09:43:00 得分 0
Phoenix2000!!Top
12 楼Cleverhare(笨笨兔)回复于 2001-02-09 10:04:00 得分 0
1. rh, 在98的dos窗口下用debug敲入以下代码:
mov dx,21
in al,dx
or al,2
out dx,al
int 20
运行后本dos窗口中键盘失效,但并不影响到其他windows程序,存成.com后也是如此。难道windows对每个应用程序都提供一个虚拟环境(包括硬件端口)?
2. phoenix2000, 在屏保状态下不是随便敲个键就退出屏保了吗?又如何谈得上屏蔽了键盘呢?
Top
13 楼Phoenix2000(Phoenix2000)回复于 2001-02-09 15:05:00 得分 0
Cleverhare(笨笨兔:
你没听懂我的意思!我所说的进入屏保状态不是运行屏保程序,而是使系统认为处在屏保状态下,这时你所敲的任何键都会被系统截获送给你的应用程序,你的程序可以对按键进行过滤,也可以不予处理,着不久相当于屏蔽了键盘吗?
再说一次,使系统进入屏保状态 不等于 运行屏幕保护程序!!!Top
14 楼Cleverhare(笨笨兔)回复于 2001-02-14 10:30:00 得分 0
phoenix2000,你说的应该可行。在BCD 5.0 的关于SDK的帮助中查到 SystemParamsInfo 在winuser.h中,可是实际上并不在!应该include哪个.h呢?Top
15 楼Sunny_Yirui(雪飘飘)回复于 2001-02-14 10:37:00 得分 0
不用INCLUDE什么,直接用就行!Top
16 楼Cleverhare(笨笨兔)回复于 2001-02-14 17:06:00 得分 0
phoenix2000,应该是SystemParametersInfo,不过我简单地把它写在一个按纽的click中却没有什么效果,请明示!
另外我还是不明白在纯dos下用rh(迎风飞扬)的方法是可行的,在98和NT中难道能虚拟一个硬件环境?要不就是系统根本就不执行往20h的out?
mov dx,21
in al,dx
or al,2
out dx,al
int 20
直接屏蔽键盘中断应该是一个好办法,希望大虾能实现!
Top
17 楼Benni()回复于 2001-02-15 16:04:00 得分 0
我觉者在NT下不容易,否则你的程序响应后画一个登陆界面,那用户名、密码不就是你的了吗?
NT没那么傻!Top
18 楼wlmail(王立)回复于 2001-02-16 19:13:00 得分 0
把ps头拔掉不就行了?呵呵Top
19 楼Phoenix2000(Phoenix2000)回复于 2001-02-17 20:14:00 得分 10
用 SystemParametersInfo 函数是主要的,但还有其他一些细节地方,这里很难全部讲清。我有一个范例程序,运行后完全封锁键盘鼠标(计算机被锁住),必须输入密码后才能退出。我可以把源代码和编译后的程序给你,自己研究一下。Top
20 楼songhtao(三十年孤独)回复于 2001-02-17 20:53:00 得分 0
在程序中屏蔽掉键盘按健象我在“怎样捕捉方向键?“说的一样,不过把
Form-〉KeyPreview:=true应该可以吧。
Top
21 楼AutoAsm(风流总被雨打风吹去)回复于 2001-02-18 12:05:00 得分 0
用DriverStudio写个键盘驱动Top
22 楼wxz(行舟)回复于 2001-02-18 12:23:00 得分 20
我以前也做工控的,但是在cmos中可以锁住键盘,只要设置错误中断方式为No Error(可能使其它的单词)。是不是现在的工控机变了?
呵呵,与编程无关。
Top
23 楼Zibao(Zibao)回复于 2001-02-18 12:58:00 得分 0
wxz 说得不错,设为 All Error, But Keyboard 就可以照常启动。不过要事先做好NT的自动登录。Top
24 楼pgcat(将抗日进行到底!(哪怕没有了气!))回复于 2001-02-18 18:23:00 得分 0
rh(迎风飞扬,什么地方找的到关于vxd编程的资料Top
25 楼rh(花覆茅檐)回复于 2001-02-18 18:28:00 得分 0
2 pgcat(可信度好)
我不知道耶!
2Cleverhare(笨笨兔) :
一个dos环境其实就是一个虚拟机环境
你写成wdm格式试试
很遗憾我也很菜,不能帮你:)
Top
26 楼rh(花覆茅檐)回复于 2001-02-18 18:29:00 得分 0
或者Tice(孤笑) 是对的Top
27 楼Cleverhare(笨笨兔)回复于 2001-02-23 14:21:00 得分 0
1. Benni(), 在 NT 可以通过改注册表很容易实现自动登陆。
2. 感谢Phoenix2000 的“我可以把源代码和编译后的程序给你”,请mail到 pyz931@netease.com , 如果是bcb的代码则.exe就不必发了。
3. wxz(行舟) Zibao(Zibao) ,不巧现在手上没工控机,但看了几台兼容机的cmos,都没有“错误中断方式”这项。不知我这台有否,等会儿看。
4. rh(迎风飞扬),wdm是不是只有在vc下才有?(不好意思,我更菜 :-) )
。。。。看样子可以准备把分给出去了。。。
Top
28 楼qinzm(不归人)回复于 2001-02-23 17:44:00 得分 0
只有写wdm
Top
29 楼Cleverhare(笨笨兔)回复于 2001-02-24 18:57:00 得分 0
1 wxz(行舟) Zibao(Zibao) , 原来是在 cmos 的第一项中的 Holt On, 你们直接告诉我英文不就得了。害的我去找“Error Interrupt method"。
至此我的目的到是达到了:设置好自动登陆,把cmos按1项设好,拔掉键盘,机器照样能启。OK.
我觉得这是一个很好的办法。因为需要锁键盘的场合一般都只会再需要输入密码,而这可以通过写“软键盘”实现。在旧贴上有介绍。
但我仍然关注用软件的方法来锁。。。。
Phoenix2000 ,我还没收到你的代码。
Top
30 楼WinterSeo(DelphiWinter(超人Seo))回复于 2001-02-25 20:23:00 得分 0
把键盘拔掉,外后到CMOS SETUP中的第一菜单项“STANDARD COMS SETUP”中把最后一选项HALT ON选为“ALL ERRORS BUT KEYBOARD”即可,绝对好用!Top
31 楼Sunny_Yirui(雪飘飘)回复于 2001-02-26 09:12:00 得分 0
WinterSeo(DelphiWinter(超人Seo)) :佩服!!Top
32 楼yeqiufeng(叶秋枫)回复于 2001-05-01 10:27:00 得分 0
谁能在WIN98下只锁定键盘不屏蔽其他
我就佩服得五体投地了Top




