参照论坛某位大侠的代码示例后,想写一个后台向某程序发送按钮消息的程序,下面是我写的代码发现取不到按钮的句柄,不知代码错在哪了。
希望给位大写帮忙纠正一下,因为我找了很久也没有 PostMessage UDF 关于按键发送的示例.
这是代码:#include <PostMessage_UDF.au3>
#include <GUIConstants.au3>
#include <guiconstantsex.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
opt("guiOneventMode",1) ;事件模式
$outWindow=GUICreate("Background key test",300,300,50,50) ;创建一个演示窗口
GUISetOnEvent($gui_event_close,"Close_Click",$OutWindow) ;窗口关闭事件
$BtnNotepad=GUICtrlCreateButton("打开登录界面",50,50,150,25) ;
GUICtrlSetOnEvent($BtnNotepad,"CreateNotepad") ;创建一个记事本
$BtnInsert=GUICtrlCreateButton("后台键盘输入",50,100,180,25)
GUICtrlSetOnEvent($BtnInsert,"InsertKeyValue") ;在上面创建的记事本中输入字符
GUISetState(@sw_show)
Func CreateNotepad()
Run("d:\点卡充值管理平台\login.exe")
EndFunc
;向创建的记事本中插入字符的函数
Func InsertKeyValue()
;下面这个取得句柄的方法是关键,如果自己不知道Class的名字,可以借助 Autoit Window Info
;详细的信息在第二个选项卡control中
$CtrlHandle=ControlGetHandle("[ThunderRT6FormDC; INSTANCE:19]","","ThunderRT6CommandButton")
If $ctrlHandle < 1 Then
MsgBox(0,"Error","句柄错误")
GUIDelete()
Exit
EndIf
;后台开始发送按键信息,如果你想观察得更仔细点,可以把循环值设置大一些,SLEEP的值也设置大一些
;这样可以更清楚的体会后台发送的效果,当本程序在发送时,你可以在别的窗口处理别的事务,丝毫不影响
_SendKeys(String($CtrlHandle),"{enter}")
Sleep (500)
EndFunc
;关闭GUI的函数
Func Close_Click()
Exit
EndFunc
While 1
Sleep (1000)
WEnd
这是autoit info 得到的数据:
|