祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 6763|回复: 1

[转帖]如何在PB中模拟按键

[复制链接]

[转帖]如何在PB中模拟按键

[复制链接]
阿辉

主题

0

回帖

195

积分

超级版主

积分
195
贡献
在线时间
小时
2005-11-12 15:14:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
摘自《远程续缘》第35期(http://jfzcc.yeah.net
很多人都知道怎样在datawindow按下enter键模拟tab键的效果:
在datawindow中扩展出pbm_dwnprocessenter事件: 加入代码
Send( Handle( This),256,9,Long(0,0))
Return 1
这种方法曾经出现在晓通那一套天价的书上,网上各网站你抄我的,我抄你的,好象只有这一种方法,一种思路,不知误导了多少人。 今天我就来消清晓通的流毒。
这种方法其实效果也还可以,只不过是很久以前的Windows 3.1的技术了,在Windows95以上的版本,我们有更好,更规范,功能更强的方法来实现。
在windows95以上,特意增加了一个API调用,keybd_event,这个API调用的功能就是模拟键盘击键。 定义如下:
subroutine keybd_event(uint bVk,uint bScan,long dwFlags,long dwExtraIn
fo ) library 'user32.dll'
// 以下这段抄自MSDN, 是关于各参数的说明
Parameters
bVk
Specifies a virtual-key code. The code must be a value in the range 1
to 254.
bScan
Specifies a hardware scan code for the key.
dwFlags
A set of flag bits that specify various aspects of function operation.
An application can use any combination of the following predefined co
nstant values to set the flags. Value Meaning
KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a pr
efix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP If specified, the key is being released. If not specif
ied, the key is being depressed.

dwExtraInfo
Specifies an additional 32-bit value associated with the key stroke.

谁有耐心慢慢看去,以下只说明我们要用的两个参数
bVk,指需要模拟的击键
dwflags, =0 ,按下 = 2 ,释放

下面我们看看如何实现以下功能:
按下enter键以及下箭头,相当于按下tab键
按下上箭头,相当于按下Shift-tab键
如果是在datawindow下,扩展出pbm_dwnkey,增加如下代码:
If key = KeyEnter! Or Key = KeyDownArrow! Then
keybd_event ( 9, 0, 0 , 0 ) // 按下tab
keybd_event ( 9, 0, 2, 0 ) // 释放tab
Return 1
End If

If Key = KeyUpArrow! Then
keybd_event ( 16, 0, 0, 0 ) // 按下shift
keybd_event ( 9, 0, 0 , 0 ) // 按下tab
keybd_event ( 9, 0, 2, 0 ) // 释放tab
keybd_event ( 16, 0, 2, 0 ) // 释放shift
Return 1
End If

我们也可以在window级实现以上功能,很简单,将上面代码加在window的key事件
中即可.
keybd_event还有一些很神奇的作用,比如以下代码打开windows的“开始菜单”
keybd_event ( 91, 0, 0 , 0 ) // 按下win(不知道应该叫什么)键
keybd_event ( 91, 0, 2, 0 ) // 放开
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
阿辉 楼主

主题

0

回帖

195

积分

超级版主

积分
195
贡献
在线时间
小时
2005-11-12 15:20:40 | 显示全部楼层

补充:原文中没有这个API在pb中的声明语法,现补充如下:

SUBROUTINE keybd_event ( Integer bVk, Integer bScan, Long dwFlags, Long dwExtraInfo) LIBRARY "user32"

共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-4-29 13:09 , Processed in 0.046521 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表