当前位置:编程学习 > VB >>

如何自动在其他程序窗口完成一系列操作

在我的form里安排一个命令按钮,点击之后,希望它能在另外一个已经打开的程序(比如Word,或者资源管理或者BitComet之类)的窗口里点击一个菜单,并在随后出现的对话框里点击一系列按钮。

请问如何用程序自动做这一切? --------------------编程问答-------------------- 1、模拟按键;
2、用api获取程序菜单句柄,对话框中按钮句柄,然后发送消息。 --------------------编程问答--------------------
引用 1 楼 xuggzu 的回复:
1、模拟按键;
2、用api获取程序菜单句柄,对话框中按钮句柄,然后发送消息。


看起来很麻烦。

Word里可以录制宏。其他程序窗口有什么简单些的办法么? --------------------编程问答-------------------- 如果是自己做的程序,自然好说。不是的话,貌似没有其它好方法。 --------------------编程问答-------------------- 不是自己做的程序:~( --------------------编程问答-------------------- 可以使用SendMessage来发送命令,不过你事先的考虑一下怎么取得要点击的控件的句柄。 --------------------编程问答--------------------
引用 5 楼 veron_04 的回复:
可以使用SendMessage来发送命令,不过你事先的考虑一下怎么取得要点击的控件的句柄。


句柄很难取,记得以前用spy++找句柄,累S个仍。 --------------------编程问答-------------------- 而且我要点击一系列的菜单和按钮,得挨个找句柄,想想都累啊 --------------------编程问答-------------------- UP --------------------编程问答-------------------- 调用AutoHotKey软件的脚本.ahk --------------------编程问答-------------------- UP --------------------编程问答-------------------- 高手快来帮帮西西妹妹吧! --------------------编程问答-------------------- 以前用过一款软件可以像我们录制macro一样,通过录制一系列的画面操作(以坐标位置记录下来)然后可以自动重复动作。但好像不能后台处理,是在当前活动窗口上工作的,不知道是不是xixi设想中的功能。 --------------------编程问答--------------------
引用 12 楼 oyaji21 的回复:
以前用过一款软件可以像我们录制macro一样,通过录制一系列的画面操作(以坐标位置记录下来)然后可以自动重复动作。但好像不能后台处理,是在当前活动窗口上工作的,不知道是不是xixi设想中的功能。


谢谢,差不多是这样的。这个软件叫什么名字啊? --------------------编程问答-------------------- 可以实现,只要被操作的软件没有对于这种操作的保护,通过大量的代码,结合很多的准备工作就能实现了
大量代码是指为了保证稳定运行而需要写的,对于简单的可能几行sendmessage就完了
对于菜单操作,通常情况下采用 SendMessage WM_COMMAND 消息实现点击
对于树形列表,高级列表,如果内容固定还比较好说,简单的点击消息或者向其父窗口发相应的消息完成即可。
需要获取内容加以识别的,还要涉及到进程间的数据访问。

前两天写的比较垃圾的代码,觉得浩方广告太多,想办法给他去掉了
这个代码是个意思,也别求看懂,我都嫌他烂不想看,lz可以无视

这是一个自动点击的过程

    Dim lvSelected As Long
    Dim inSideRoom As Long
    Dim lTimeOut As Long
    
    If PG.hWnd_ServerList Then
    
nxtlop:
    
        lvSelected = SendMessage(PG.hWnd_ServerList, &H1000& + 66&, 0, ByVal 0&)            '获取列表的选定项
        
        If lvSelected > 0 Then
        
         
            SendMessage PG.hWnd_ServerList, LVM_ENSUREVISIBLE, lvSelected, ByVal 1&         '将选定项滚动到可见区域
            SendMessage PG.hWnd_ServerList, WM_KEYDOWN, &HD&, ByVal &H1C0001                '按回车,相当于双击这项
            
            Sleep 1000                                                                      '我这么快的机子上都要卡会才能出登录窗口,所以...
            lTimeOut = 0
            Do
                inSideRoom = FindWindow("#32770", "进入房间")                               '找登录窗口
                
                If inSideRoom Then
                    Sleep 399                                                               '如果找到了则继续等待400ms左右
                    
                    'If (PG.HideLogonServer And IsWindowVisible(inSideRoom)) Then SetWindowPos inSideRoom, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOSIZE Or SWP_HIDEWINDOW: Debug.Print "xxxx"
                    
                    lTimeOut = lTimeOut + 1
                    If lTimeOut > 30 Then SendMessage inSideRoom, WM_COMMAND, ByVal 2&, ByVal 0&        '超过30还登录不上去,关闭从新登录
                Else
                    If IsWindowVisible(PG.hWnd_ExitRoom) Then Exit Do Else GoTo nxtlop      '如果找不到, 则查看 退出 按钮状态,如果是可见状态说明登录成功了
                    
                End If
                inSideRoom = 0
                
            Loop
            SetProcessWorkingSetSize -1, -1, -1
            
        Else
            MsgBox "请先选定想进入的房间!单击房间列表选定其中一项,再按热键.", vbInformation
        
        End If
    
    Else: MsgBox "请先进入浩方游戏大厅,选择竞技服务区,选定游戏房间。", vbInformation
    End If

 


这是一个获取对象程序相关信息的过程,对其他程序的操作,必要条件之一就是获取控件句柄
句柄不可能固定,需要从这些控件的特征上查找,这就是前期准备,用spy多看看,分析下某个
控件有什么特点, ID,类名,标题,属性,==。。 都是主要特征

Function EnumHFAds(ByVal cHwnd As Long, ByVal userValue As Long) As Long
' result false to stop enum
    Dim clsName As String * 256
    Dim cls1 As String
'    Debug.Print Hex(cHwnd)
    clsName = vbNullString
    GetClassName cHwnd, clsName, 256
    cls1 = Left(clsName, InStr(clsName, vbNullChar) - 1)
    Select Case LCase(cls1)
        Case "#32770", "afxframeorview42": EnumChildWindows cHwnd, PG.Proc_EnumAds, ByVal 0&
        Case "button": If GetDlgCtrlID(cHwnd) = 20 Then PG.hWnd_ExitRoom = cHwnd
        Case "shell embedding": SendMessage cHwnd, WM_CLOSE, ByVal 0&, ByVal 0&
        Case "syslistview32": If GetDlgCtrlID(cHwnd) = 257 Then PG.hWnd_ServerList = cHwnd
    End Select
    
    EnumHFAds = 1
End Function
--------------------编程问答-------------------- http://d.download.csdn.net/down/2231195/oyaji21
这个工具不错

可惜界面是日文的,不大看得懂。。 --------------------编程问答-------------------- 这个工具不错
http://download.csdn.net/source/2231195 

谢谢oyaji --------------------编程问答-------------------- 可惜界面是日文的,看不懂:

--------------------编程问答-------------------- 可编程的、带有动作回放功能的测试工具,比如 IBM Rational Functional Tester
http://www.ibm.com/developerworks/cn/rational/r-rft/index2.html --------------------编程问答-------------------- 1:最上面是选择曾录制的需要再次被执行的macro文件 
2:checkbox是设定该macro执行后free macro是否终了 

4个radiobox从上到下 
3: 只读入
4: 自动执行 
5: 自动循环执行 
6: 自动无限循环执行 

7: 中间右边的下拉列表是选择 执行速度 比如画面中的100%(8)
9:选择在执行时free macro的窗体表示与否 
13:当前内容:窗体不表示
10:快捷键设定

11:创建
12:取消



--------------------编程问答--------------------

oyaji辛苦了,谢谢。请问上图下拉列表处的 1、2对应的列表项分别是什么意思啊? --------------------编程问答--------------------
引用 18 楼 tiger_zhao 的回复:
可编程的、带有动作回放功能的测试工具,比如 IBM Rational Functional Tester
http://www.ibm.com/developerworks/cn/rational/r-rft/index2.html


谢谢,这个看起来挺强大的。是不是装了Rational就自动有这个产品了? --------------------编程问答--------------------
引用 21 楼 slowgrace 的回复:
引用 18 楼 tiger_zhao 的回复:
可编程的、带有动作回放功能的测试工具,比如 IBM Rational Functional Tester
http://www.ibm.com/developerworks/cn/rational/r-rft/index2.html


谢谢,这个看起来挺强大的。是不是装了Rational就自动有这个产品了?


在CSDN上找到破解了 呵呵 --------------------编程问答--------------------
引用 20 楼 slowgrace 的回复:
oyaji辛苦了,谢谢。请问上图下拉列表处的 1、2对应的列表项分别是什么意思啊?

xixi sorry 我本地也没有日文环境了,所以安装后和你一样都是乱码;之前的翻译是从提供给你的url中看图片所得,其他选项就没有办法看到了。而且主站FacsyS已经关闭,online help也没得查了。
按字符长度猜测 1 有可能是表示窗口,你可以试一下。
其实也帮不了什么忙,不用谢的,呵呵。 --------------------编程问答-------------------- mark................ --------------------编程问答-------------------- 帮顶,我也想实现后台点击别人的菜单。比如:VSFilter的托盘右键菜单,这个是用RunDLL32来运行的DLL。
--------------------编程问答--------------------
引用 23 楼 oyaji21 的回复:
引用 20 楼 slowgrace 的回复:
oyaji辛苦了,谢谢。请问上图下拉列表处的 1、2对应的列表项分别是什么意思啊?

xixi sorry 我本地也没有日文环境了,所以安装后和你一样都是乱码;之前的翻译是从提供给你的url中看图片所得,其他选项就没有办法看到了。而且主站FacsyS已经关闭,online help也没得查了。
按字符长度猜测 1 有可能是表示窗口,你可以试一下……


谢谢:-) --------------------编程问答-------------------- shell调用AutoHotKey软件的脚本.ahk可以实现 --------------------编程问答-------------------- 太强大了  先帮顶了 --------------------编程问答--------------------
引用 27 楼 zhao4zhong1 的回复:
shell调用AutoHotKey软件的脚本.ahk可以实现


谢谢。这个软件看起来也不错:-) --------------------编程问答--------------------
引用 14 楼 pctgl 的回复:
可以实现,只要被操作的软件没有对于这种操作的保护,通过大量的代码,结合很多的准备工作就能实现了
大量代码是指为了保证稳定运行而需要写的,对于简单的可能几行sendmessage就完了
对于菜单操作,通常情况下采用 SendMessage WM_COMMAND 消息实现点击
对于树形列表,高级列表,如果内容固定还比较好说,简单的点击消息或者向其父窗口发相应的消息完成即可。
需要获取内容加以识……

这个东东有用,谢谢了。收藏!
--------------------编程问答--------------------
引用 30 楼 chenjl1031 的回复:
引用 14 楼 pctgl 的回复:
可以实现,只要被操作的软件没有对于这种操作的保护,通过大量的代码,结合很多的准备工作就能实现了
大量代码是指为了保证稳定运行而需要写的,对于简单的可能几行sendmessage就完了
对于菜单操作,通常情况下采用 SendMessage WM_COMMAND 消息实现点击
对于树形列表,高级列表,如果内容固定还比较好说,简单的点击消息或者向其父窗口发相……

pctGl玩这些很上瘾 --------------------编程问答--------------------
引用 31 楼 slowgrace 的回复:
引用 30 楼 chenjl1031 的回复:
引用 14 楼 pctgl 的回复:
可以实现,只要被操作的软件没有对于这种操作的保护,通过大量的代码,结合很多的准备工作就能实现了
大量代码是指为了保证稳定运行而需要写的,对于简单的可能几行sendmessage就完了
对于菜单操作,通常情况下采用 SendMessage WM_COMMAND 消息实现点击
对于树形列表,高级列表,如果内……


只要有用我就上瘾,用完之后马上丢瘾! --------------------编程问答-------------------- 我也谢谢pctgl分享,对我有点高深了,就是。 --------------------编程问答-------------------- 用按键精灵

自己编程,控制其他软件. --------------------编程问答--------------------
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,