找回密码
 加入
搜索
查看: 5971|回复: 4

[AU3基础] _SendKeys() 向指定程序后台发送按钮消息应该如何写?

[复制链接]
发表于 2011-1-8 01:04:14 | 显示全部楼层 |阅读模式
参照论坛某位大侠的代码示例后,想写一个后台向某程序发送按钮消息的程序,下面是我写的代码发现取不到按钮的句柄,不知代码错在哪了。
希望给位大写帮忙纠正一下,因为我找了很久也没有 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 得到的数据:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2011-1-8 19:13:39 | 显示全部楼层
我是新手·········多多指教
发表于 2011-1-8 20:27:00 | 显示全部楼层
$CtrlHandle=ControlGetHandle("[class:窗口类名]","","[class:控件类名;接口]")
发表于 2011-1-8 20:39:04 | 显示全部楼层
操作按钮
用发送鼠标点击比较好
发送回车效果会不一样
当该窗口(在某界面)有注册回车键的缺省操作时
在截获后会按其预设定去操作
最后结果可能非所要的
!
发表于 2011-1-9 19:34:49 | 显示全部楼层
Func SendSro($handle, $key)
        Switch $key
                Case "F1" 
                        $k = 0x70
                Case "F2" 
                        $k = 0x71
                Case "F3" 
                        $k = 0x72
                Case "F4" 
                        $k = 0x73
                Case Else
                        $k = 0x30 + $key
        EndSwitch
        For $i = 1 To 5
                DllCall("User32.dll", "int", "PostMessageA", "hwnd", $handle, "int", 0x100, "int", $k, "int", 0)
                DllCall("User32.dll", "int", "PostMessageA", "hwnd", $handle, "int", 0x101, "int", $k, "int", 0)
        Next
EndFunc   ;==>SendSro
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 14:40 , Processed in 0.078225 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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