如何将VB6应用程序中的点击或按键发送到Excel对话框?

时间:2009-06-10 23:02:31

标签: vba vb6 sendmessage sendkeys

我的雇主购买了第三方工具,来自Conveter Technology的OfficeConverter,可自动将Office 2003格式的文件转换/修复为Office 2007格式。此工具还可以高度自动化Office 2003和2007格式之间的宏/ VBA代码要求的转换/更改。

我的问题是,在此转换过程中,该工具正在打开目标Office产品,例如Excel,然后打开目标用户文件(即Report.xls),然后检查任何VBA /宏代码以了解更改要求。问题是,如果Excel文件代码依赖于某些外部工具(如.OCX文件),并且如果我正在执行此操作的PC上不存在该工具,Excel将弹出一条消息,表明该对象具有没有找到,停止整个转换过程(连续数千个文件),直到有人出现并手动点击相应的按钮关闭对话框。

我认为在VB6中创建一个小型的观看应用程序(嘿,我已经老了,我的技能也是如此)可以坐在同一台PC上观看这些对话框,并根据具体的消息,点击相应的按钮通过SendMessage API调用。

问题是我无法让SendMessage为我实际按下按钮,我已经尝试向它发送Return键值(vbKeyReturn)甚至Space键(vbKeySpace)但是动作永远不会结果在对话框关闭它应该。我可以将焦点放在对话框上任何一个按钮之间的选项卡上,但这就是它。

我曾尝试使用SendKeys,但在我目前收到的文档中,这种信息远没有那么可靠和强烈劝阻。

有什么建议吗? :)

3 个答案:

答案 0 :(得分:4)

如果您有按钮的hWnd,并且机器无人看管,您可以轻松使用MouseEvent将光标移到按钮上并单击它。这个示例包含一个直接就绪模块,只要窗口句柄就可以为你做脏工作:

http://vb.mvps.org/samples/MouseEvent

否则,最直接的方法可能是按顺序发送WM_LBUTTONDOWNWM_LBUTTONUP

编辑:如果你“只是想完成它”,请听取Jim的建议并尝试Gary Chanson的Window Demon工具。

答案 1 :(得分:2)

看看Gary Chanson的this utility“Window Demon”

卡尔:我们多快忘记了我们的好朋友!

答案 2 :(得分:1)

我建议您查看AutoIt

这是完美的任务,找一个带有特定文本的窗口,然后单击一个按钮。 作为独立应用程序在系统托盘中运行。