阿辉 发表于 2005-11-12 15:14:29

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

    摘自《远程续缘》第35期(<a href="http://jfzcc.yeah.net/" target="_blank" >http://jfzcc.yeah.net</A>) <BR>    很多人都知道怎样在datawindow按下enter键模拟tab键的效果: <BR>    在datawindow中扩展出pbm_dwnprocessenter事件: 加入代码 <BR>    Send( Handle( This),256,9,Long(0,0)) <BR>    Return 1 <BR>    这种方法曾经出现在晓通那一套天价的书上,网上各网站你抄我的,我抄你的,好象只有这一种方法,一种思路,不知误导了多少人。 今天我就来消清晓通的流毒。 <BR>    这种方法其实效果也还可以,只不过是很久以前的Windows 3.1的技术了,在Windows95以上的版本,我们有更好,更规范,功能更强的方法来实现。 <BR>    在windows95以上,特意增加了一个API调用,keybd_event,这个API调用的功能就是模拟键盘击键。 定义如下: <BR>    subroutine keybd_event(uint bVk,uint bScan,long dwFlags,long dwExtraIn <BR>    fo ) library 'user32.dll' <BR>    // 以下这段抄自MSDN, 是关于各参数的说明 <BR>    Parameters <BR>    bVk <BR>    Specifies a virtual-key code. The code must be a value in the range 1 <BR>    to 254. <BR>    bScan <BR>    Specifies a hardware scan code for the key. <BR>    dwFlags <BR>    A set of flag bits that specify various aspects of function operation. <BR>    An application can use any combination of the following predefined co <BR>    nstant values to set the flags. Value Meaning <BR>    KEYEVENTF_EXTENDEDKEY If specified, the scan code was preceded by a pr <BR>    efix byte having the value 0xE0 (224). <BR>    KEYEVENTF_KEYUP If specified, the key is being released. If not specif <BR>    ied, the key is being depressed. <BR>   <BR>    dwExtraInfo <BR>    Specifies an additional 32-bit value associated with the key stroke. <BR>   <BR>    谁有耐心慢慢看去,以下只说明我们要用的两个参数 <BR>    bVk,指需要模拟的击键 <BR>    dwflags, =0 ,按下 = 2 ,释放 <BR>   <BR>    下面我们看看如何实现以下功能: <BR>    按下enter键以及下箭头,相当于按下tab键 <BR>    按下上箭头,相当于按下Shift-tab键 <BR>    如果是在datawindow下,扩展出pbm_dwnkey,增加如下代码: <BR>    If key = KeyEnter! Or Key = KeyDownArrow! Then <BR>    keybd_event ( 9, 0, 0 , 0 ) // 按下tab <BR>    keybd_event ( 9, 0, 2, 0 ) // 释放tab <BR>    Return 1 <BR>    End If <BR>   <BR>    If Key = KeyUpArrow! Then <BR>    keybd_event ( 16, 0, 0, 0 ) // 按下shift <BR>    keybd_event ( 9, 0, 0 , 0 ) // 按下tab <BR>    keybd_event ( 9, 0, 2, 0 ) // 释放tab <BR>    keybd_event ( 16, 0, 2, 0 ) // 释放shift <BR>    Return 1 <BR>    End If <BR>   <BR>    我们也可以在window级实现以上功能,很简单,将上面代码加在window的key事件 <BR>    中即可. <BR>    keybd_event还有一些很神奇的作用,比如以下代码打开windows的“开始菜单” <BR>    keybd_event ( 91, 0, 0 , 0 ) // 按下win(不知道应该叫什么)键 <BR>    keybd_event ( 91, 0, 2, 0 ) // 放开 <BR>

阿辉 发表于 2005-11-12 15:20:40

<P>补充:原文中没有这个API在pb中的声明语法,现补充如下:</P>
<P>SUBROUTINE keybd_event ( Integer bVk, Integer bScan, Long dwFlags, Long dwExtraInfo) LIBRARY "user32"<BR></P>
页: [1]
查看完整版本: [转帖]如何在PB中模拟按键

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

Mail To:Admin@SybaseBbs.com