tea2011 发表于 2011-1-8 01:04:14

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

参照论坛某位大侠的代码示例后,想写一个后台向某程序发送按钮消息的程序,下面是我写的代码发现取不到按钮的句柄,不知代码错在哪了。
希望给位大写帮忙纠正一下,因为我找了很久也没有 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("","","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 得到的数据:

bbwanwt123 发表于 2011-1-8 19:13:39

我是新手·········多多指教

_ddqs. 发表于 2011-1-8 20:27:00


$CtrlHandle=ControlGetHandle("","","")

_ddqs. 发表于 2011-1-8 20:39:04

操作按钮
用发送鼠标点击比较好
发送回车效果会不一样
当该窗口(在某界面)有注册回车键的缺省操作时
在截获后会按其预设定去操作
最后结果可能非所要的
!

piaorou 发表于 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
页: [1]
查看完整版本: _SendKeys() 向指定程序后台发送按钮消息应该如何写?