回 帖 发 新 帖 刷新版面

主题:--- keyboard 命令如何使用 ? ---

KEYBOARD cKeyboardValue   [PLAIN] [CLEAR]
参数
cKeyboardValue 
指定要放入键盘缓冲区的字符表达式。字符表达式可以是字符串、一个键标记、一组键标记,也可以是一个可返回字符表达式的用户自定义函数。 
若 cKeyboardValue 是一个键标记,则必须把它用大括号和引号括起来。例如: 

KEYBOARD '{CTRL+LEFTARROW}'
有关键标记的列表,请参阅 ON Key Label。 

键盘缓冲区中最多可容纳 128 个字符。当键盘缓冲区完全充满以后,多余的字符将被忽略。 

PLAIN 
如果您定义了键盘宏或激活了 ON KEY LABEL 命令,包含 PLAIN 参数可忽略这些键盘指定。包含 PLAIN 参数的 keyboard 命令向键盘缓冲区中放置的是原义字符,而非键盘指定值。 
例如,若您已用 ON KEY LABEL 命令给“A”键指定了一条命令而且 cKeyboardValue 中又包含有“A”,使用 PLAIN 参数可把字母“A”放到键盘缓冲区中,而没有执行指定给“A”的 ON KEY LABEL 命令。 

CLEAR 
在把 cKeyboardValue 放置到键盘缓冲区以前,先清除该缓冲区里的所有内容。 
备注
使用 keyboard 命令可把字符放置到键盘缓冲区中。在 Visual FoxPro 查找键盘输入之前,这些字符将一直保存在键盘缓冲区中。在查找键盘输入时,这些字符将被读出并执行,如同我们直接从键盘输入一样。

利用 keyboard 命令可创建自动运行的演示系统,来演示您的应用程序。

回复列表 (共9个回复)

沙发

比如,我要在实现每隔一秒,分别输入A、B、C

板凳

DECLARE integer FindWindow IN user32 string,string
DECLARE integer SetForegroundWindow IN user32 long

myHwnd = FindWindow(0,"新建 文本文档")  &&取文本文件句
SetForegroundWindow(myHwnd)  &&把主窗口置前,让其得到焦点
FOR n = 65 TO 67 
    WAIT "" TIMEOUT 1000 
    KEYBOARD CHR(n)
ENDFOR

3 楼

楼上,我要指正你犯的错误!timeout 单位是秒啊,呵呵,开个玩笑,谢谢

我自己试了一下,只能在VFP程序本身使用:

thisform.text1.setfocus
WAIT 'wait' WINDOW AT -1,-1 TIMEOUT 3
KEYBOARD '{A}'

我的目的是再任何其它程序上使用,比如说QQ、EXCEL,等等

楼上的方法我还没使用,但估计还是有问题,因为 QQ,EXCEL,WORD,等程序是我在VFP程序启动后再打开的,那个是句柄吗?如何取得后面打开程序的句柄?

4 楼

我试了2楼方法,不行啊,

窗口是可以放前面了,但是并没有输入字符

5 楼

呵呵,QQ,excel.....我以前老用的是sendkeys  
DECLARE integer FindWindow IN user32 string,string
DECLARE integer SetForegroundWindow IN user32 long
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds 
Declare Integer WinExec in kernel32 string, integer 
PUBLIC om,cDat,QQpath
cdat = REPLICATE(CHR(0),16)
om = createobject("wscript.shell") 

winexec(QQpath,0)&&运行你的QQ
sleep(1000)&&系统等1秒,给QQ启动时间
myHwnd = FindWindow(0,"QQ2009")  &&取主窗口句柄
IF myHwnd=0
    MESSAGEBOX("QQ2009没有启动!!",'杨志鸿')
    RETURN
ENDIF 
SetForegroundWindow(myHwnd)  &&把主窗口置前,让其得到焦点
sleep(200)
om.sendkeys('+{TAB}') &&模拟键盘按下shift+tab,使QQ号text得到焦点
sleep(100)
om.sendkeys(ALLTRIM(qq.number))
sleep(100)
om.sendkeys("{Tab}")
sleep(100)
om.sendkeys("{home}")  &&让\QQ密码的text得到焦点,如果有记的密码把光标移到最前面
sleep(100)
om.sendkeys("{Del 30}")&&按30次del确保把qq密码清除掉,
sleep(100)
om.sendkeys(ALLTRIM(QQ.password))&&输入QQ密码
sleep(100)
om.sendkeys("{Tab}")
as = '"{Down '+ALLTRIM(STR(qq.system+1))+'}"'
sleep(100)
om.sendkeys(as) 
sleep(100)
om.sendkeys("{Enter}")
sleep(100)
om.sendkeys("{Tab}")
sleep(100)
om.sendkeys("{Enter}")

6 楼

非常感谢!我试一下

7 楼

建个表,记录定义的键值
然后添加TIMEr控件,时间频率定义为一秒
在timer的timer事件里添加如下代码
select 记录定义的键值的表
if eof()
go top
endif
skip 1

aa = “KEYBOARD  ‘ ” +  &记录定义的键值的表的字段名 + “’”
&&aa




8 楼

本人用这个命令用的比较多的是KEYB CHR(13),也就是相当于打一个回车。其它没用过,实话实说。哈哈!

9 楼

homayzh:

om.sendkeys("abcdefg") 之类的可以有作用

om.sendkeys("{Tab}") 、om.sendkeys("{CTRL}+{C}")之类的不起作用,ctrl+c还出错了,不知道怎么回事?

我来回复

您尚未登录,请登录后再回复。点此登录或注册