永发信息网

delphi 7 屏蔽键盘的问题。

答案:3  悬赏:0  手机版
解决时间 2021-02-27 02:54
  • 提问者网友:动次大次蹦擦擦
  • 2021-02-26 12:16
如果我屏蔽了整个键盘之后想让Esc键和回车键不在屏蔽范围之内要怎么实现?比方说我按回车键屏蔽整个键盘,当按下Esc键就取消屏蔽,XP delphi 7
符上代码谢谢!

能不能给个例子?谢谢!
最佳答案
  • 五星知识达人网友:神的生死簿
  • 2021-02-26 13:08
你用钩子进行屏蔽了,那判断一下按键:回车就InstallHook,ESC就UnstallHook;
很好实现,给个思路,楼下解决.
全部回答
  • 1楼网友:神也偏爱
  • 2021-02-26 15:47
在vb中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。 1.局部级模拟 从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈, 这实在是很简单,windows提供了几个这样的api函数可以实现直接向目标程序发送消息的功能,常用的有sendmessage和 postmessage,它们的区别是postmessage函数直接把消息仍给目标程序就不管了,而sendmessage把消息发出去后,还要等待目 标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用postmessage函数才好,用sendmessage是不正确的(因为模拟键盘消 息是不需要返回值的,不然目标程序会没反应),切记切记!postmessage函数的vb声明如下:declare function postmessage lib "user32" alias "postmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数wmsg 是消息的类型,表示你要发送什么样的消息,最后wparam 和lparam 这两个参数是随消息附加的数据,具体内容要由消息决定。再来看看wmsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:wm_keydown 表示一个普通键被按下wm_keyup 表示一个普通键被释放wm_syskeydown 表示一个系统键被按下,比如alt键wm_syskeyup 表示一个系统键被释放,比如alt键如 果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wparam 和lparam 这两个参数。在一个键盘消息中,wparam 参数的 含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下a键,那么wparam 参数的值就设为vk_a ,至于lparam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。那么我们就详细 了解一下lparam 吧。lparam 是一个long类型的参数,它在内存中占4个字节,写成二进制就是 00000000 00000000 00000000 00000000 一共是32位,我们从右向左数,假设最右边那位为第0位(注意是从0而不是 从1开始计数),最左边的就是第31位,那么该参数的的0-15位表示键的发送次数等扩展信息,16-23位为按键的扫描码,24-31位表示是按下键还 是释放键。大家一般习惯写成16进制的,那么就应该是&h00 00 00 00 ,第0-15位一般为&h0001,如果是按下键,那 么24-31位为&h00,释放键则为&hc0,那么16-23位的扫描码怎么会得呢?这需要用到一个api函数 mapvirtualkey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ascii码。它的vb声明如 下:declare function mapvirtualkey lib "user32" alias "mapvirtualkeya" (byval wcode as long, byval wmaptype as long) as long参 数wcode 表示待转换的码,参数wmaptype 表示从什么转换为什么,如果是虚拟码转扫描码,则wmaptype 设置为0,如果是虚拟扫描码转 虚拟码,则wmaptype 设置为1,如果是虚拟码转ascii码,则wmaptype 设置为2.相信有了这些,我们就可以构造键盘事件的 lparam参数了。下面给出一个构造lparam参数的函数:declare function mapvirtualkey lib "user32" ali
  • 2楼网友:玩家
  • 2021-02-26 14:45
我算是服了.就知道键盘钩子,你自己动手实现过没有? 键盘钩子 是 锁不了 CtrlAltDelete的.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯