如何自动在其他程序窗口完成一系列操作
在我的form里安排一个命令按钮,点击之后,希望它能在另外一个已经打开的程序(比如Word,或者资源管理或者BitComet之类)的窗口里点击一个菜单,并在随后出现的对话框里点击一系列按钮。请问如何用程序自动做这一切? --------------------编程问答-------------------- 1、模拟按键;
2、用api获取程序菜单句柄,对话框中按钮句柄,然后发送消息。 --------------------编程问答--------------------
看起来很麻烦。
Word里可以录制宏。其他程序窗口有什么简单些的办法么? --------------------编程问答-------------------- 如果是自己做的程序,自然好说。不是的话,貌似没有其它好方法。 --------------------编程问答-------------------- 不是自己做的程序:~( --------------------编程问答-------------------- 可以使用SendMessage来发送命令,不过你事先的考虑一下怎么取得要点击的控件的句柄。 --------------------编程问答--------------------
句柄很难取,记得以前用spy++找句柄,累S个仍。 --------------------编程问答-------------------- 而且我要点击一系列的菜单和按钮,得挨个找句柄,想想都累啊 --------------------编程问答-------------------- UP --------------------编程问答-------------------- 调用AutoHotKey软件的脚本.ahk --------------------编程问答-------------------- UP --------------------编程问答-------------------- 高手快来帮帮西西妹妹吧! --------------------编程问答-------------------- 以前用过一款软件可以像我们录制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,类名,标题,属性,==。。 都是主要特征
--------------------编程问答-------------------- http://d.download.csdn.net/down/2231195/oyaji21
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://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对应的列表项分别是什么意思啊? --------------------编程问答--------------------
谢谢,这个看起来挺强大的。是不是装了Rational就自动有这个产品了? --------------------编程问答--------------------
在CSDN上找到破解了 呵呵 --------------------编程问答--------------------
xixi sorry 我本地也没有日文环境了,所以安装后和你一样都是乱码;之前的翻译是从提供给你的url中看图片所得,其他选项就没有办法看到了。而且主站FacsyS已经关闭,online help也没得查了。
按字符长度猜测 1 有可能是表示窗口,你可以试一下。
其实也帮不了什么忙,不用谢的,呵呵。 --------------------编程问答-------------------- mark................ --------------------编程问答-------------------- 帮顶,我也想实现后台点击别人的菜单。比如:VSFilter的托盘右键菜单,这个是用RunDLL32来运行的DLL。
--------------------编程问答--------------------
谢谢:-) --------------------编程问答-------------------- shell调用AutoHotKey软件的脚本.ahk可以实现 --------------------编程问答-------------------- 太强大了 先帮顶了 --------------------编程问答--------------------
谢谢。这个软件看起来也不错:-) --------------------编程问答--------------------
这个东东有用,谢谢了。收藏!
--------------------编程问答--------------------
pctGl玩这些很上瘾 --------------------编程问答--------------------
只要有用我就上瘾,用完之后马上丢瘾! --------------------编程问答-------------------- 我也谢谢pctgl分享,对我有点高深了,就是。 --------------------编程问答-------------------- 用按键精灵
自己编程,控制其他软件. --------------------编程问答--------------------
补充:VB , 基础类