[求助] 如何用VBA模拟点击另外一个程序的按钮?

colinFu88 2014-05-08 09:58:50
大家好 ! 最近需要实现在Excel VBA中用代码模拟点击另外一个程序的按钮(Run)。

其中按钮的句柄已经得到了,但是使用SendMessage方法并没有实现点击按钮的效果(没有生成对应的文件)
以下是相关代码片段:

'声明API接口。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal WMSG As Long, ByVal wParam As Long, ByVal lParam As Any) As Long

'函数中对应代码。
Dim FWnd As Long, BWnd As Long

FWnd = FindWindow(vbNullString, amosWinName)
BWnd = FindWindowEx(FWnd, 0, vbNullString, amosBtnName)
Call SendMessage(BWnd, &H202B, &H8061C, &H12E900)
Call SendMessage(BWnd, &H202B, &H8061C, &H12DBF4)
Call SendMessage(BWnd, &H202B, &H8061C, &H12D7FC)

整个函数运行没有报错,就是没有实现点击按钮生成文件的效果。

另附上通过Spy++检测手动点击按钮的相关过程:



麻烦高人看看问题出在什么地方?谢谢!
...全文
1367 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsd999 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 colinFu88 的回复:
咨询了高手,解决了我的问题。 好像用 Call SendMessage(BWnd, &H202B, &H8061C, &H12E900) Call SendMessage(BWnd, &H202B, &H8061C, &H12DBF4) Call SendMessage(BWnd, &H202B, &H8061C, &H12D7FC) 这个,从Spy++代码来看,设计到鼠标的移动,导致点击失败。 可以直接使用: Call SendMessage(BWnd, WM_CLICK, 0&, 0&) 希望对有同样问题的朋友有帮助。:)
谢谢分享。
colinFu88 2014-05-19
  • 打赏
  • 举报
回复
引用 2 楼 dsd999 的回复:
兄弟,高分才能吸引高手,你这点分高手都不会进来。
谢谢版主关心,我也是才来,技术菜鸟,分也不多。还是希望大家能“无私”的帮帮忙啦。
colinFu88 2014-05-19
  • 打赏
  • 举报
回复
咨询了高手,解决了我的问题。 好像用 Call SendMessage(BWnd, &H202B, &H8061C, &H12E900) Call SendMessage(BWnd, &H202B, &H8061C, &H12DBF4) Call SendMessage(BWnd, &H202B, &H8061C, &H12D7FC) 这个,从Spy++代码来看,设计到鼠标的移动,导致点击失败。 可以直接使用: Call SendMessage(BWnd, WM_CLICK, 0&, 0&) 希望对有同样问题的朋友有帮助。:)
dsd999 2014-05-08
  • 打赏
  • 举报
回复
兄弟,高分才能吸引高手,你这点分高手都不会进来。
colinFu88 2014-05-08
  • 打赏
  • 举报
回复
<00001> 0008061C S WM_NCHITTEST xPos:1155 yPos:664 <00002> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00003> 0008061C S WM_NCHITTEST xPos:1157 yPos:665 <00004> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00005> 0008061C S WM_NCHITTEST xPos:1157 yPos:665 <00006> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00007> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00008> 0008061C R WM_SETCURSOR fHaltProcessing:False <00009> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:12 yPos:2 <00010> 0008061C S message:0xC245 [已注册:"WinFormsMouseEnter"] wParam:00000000 lParam:00000000 <00011> 0008061C R message:0xC245 [已注册:"WinFormsMouseEnter"] lResult:00000000 <00012> 0008061C P WM_PAINT hdc:00000000 <00013> 0008061C S WM_NCHITTEST xPos:1159 yPos:667 <00014> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00015> 0008061C S WM_NCHITTEST xPos:1162 yPos:668 <00016> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00017> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00018> 0008061C R WM_SETCURSOR fHaltProcessing:False <00019> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:17 yPos:5 <00020> 0008061C S WM_NCHITTEST xPos:1164 yPos:670 <00021> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00022> 0008061C S WM_NCHITTEST xPos:1166 yPos:670 <00023> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00024> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00025> 0008061C R WM_SETCURSOR fHaltProcessing:False <00026> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:21 yPos:7 <00027> 0008061C S WM_NCHITTEST xPos:1171 yPos:673 <00028> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00029> 0008061C S WM_NCHITTEST xPos:1171 yPos:673 <00030> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00031> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00032> 0008061C R WM_SETCURSOR fHaltProcessing:False <00033> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:26 yPos:10 <00034> 0008061C S WM_NCHITTEST xPos:1172 yPos:674 <00035> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00036> 0008061C S WM_NCHITTEST xPos:1173 yPos:675 <00037> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00038> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00039> 0008061C R WM_SETCURSOR fHaltProcessing:False <00040> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:28 yPos:12 <00041> 0008061C S WM_NCHITTEST xPos:1173 yPos:675 <00042> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00043> 0008061C S WM_NCHITTEST xPos:1177 yPos:677 <00044> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00045> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00046> 0008061C R WM_SETCURSOR fHaltProcessing:False <00047> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:32 yPos:14 <00048> 0008061C S WM_NCHITTEST xPos:1178 yPos:677 <00049> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00050> 0008061C S WM_NCHITTEST xPos:1179 yPos:678 <00051> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00052> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00053> 0008061C R WM_SETCURSOR fHaltProcessing:False <00054> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:34 yPos:15 <00055> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00056> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00057> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00058> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00059> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00060> 0008061C R WM_SETCURSOR fHaltProcessing:False <00061> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:35 yPos:16 <00062> 0008061C P message:0x0118 [未知] wParam:0000FFFA lParam:BF80A5FB <00063> 0008061C P WM_MOUSEHOVER <00064> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00065> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00066> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00067> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00068> 0008061C S WM_MOUSEACTIVATE hwndTopLevel:0005066E nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN <00069> 0008061C R WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE <00070> 0008061C S WM_IME_SETCONTEXT fSet:1 iShow:C000000F <00071> 0008061C S WM_IME_NOTIFY dwCommand:IMN_OPENSTATUSWINDOW dwCommand:00000002 dwData:00000000 <00072> 0008061C R WM_IME_NOTIFY <00073> 0008061C R WM_IME_SETCONTEXT <00074> 0008061C S WM_SETFOCUS hwndLoseFocus:(null) <00075> 0008061C S message:0x202B [用户定义:WM_USER+7211] wParam:0008061C lParam:0012E900 <00076> 0008061C R message:0x202B [用户定义:WM_USER+7211] lResult:00000000 <00077> 0008061C R WM_SETFOCUS <00078> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_LBUTTONDOWN <00079> 0008061C R WM_SETCURSOR fHaltProcessing:False <00080> 0008061C P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:35 yPos:16 <00081> 0008061C P WM_MOUSEMOVE fwKeys:MK_LBUTTON xPos:35 yPos:16 <00082> 0008061C P WM_PAINT hdc:00000000 <00083> 0008061C P WM_LBUTTONUP fwKeys:0000 xPos:35 yPos:16 <00084> 0008061C S WM_PAINT hdc:00000000 <00085> 0008061C R WM_PAINT <00086> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00087> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00088> 0008061C S WM_KILLFOCUS hwndGetFocus:00460542 <00089> 0008061C S message:0x202B [用户定义:WM_USER+7211] wParam:0008061C lParam:0012DBF4 <00090> 0008061C R message:0x202B [用户定义:WM_USER+7211] lResult:00000000 <00091> 0008061C S WM_CAPTURECHANGED hwndNewCapture:00000000 <00092> 0008061C R WM_CAPTURECHANGED <00093> 0008061C R WM_KILLFOCUS <00094> 0008061C S WM_IME_SETCONTEXT fSet:0 iShow:C000000F <00095> 0008061C R WM_IME_SETCONTEXT <00096> 0008061C S WM_IME_NOTIFY dwCommand:IMN_CLOSESTATUSWINDOW dwCommand:00000001 dwData:00000000 <00097> 0008061C R WM_IME_NOTIFY <00098> 0008061C P WM_PAINT hdc:00000000 <00099> 0008061C P WM_MOUSELEAVE <00100> 0008061C P WM_PAINT hdc:00000000 <00101> 0008061C S WM_NCPAINT hrgn:00000001 <00102> 0008061C R WM_NCPAINT <00103> 0008061C S WM_ERASEBKGND hdc:43011D0F <00104> 0008061C R WM_ERASEBKGND fErased:True <00105> 0008061C S WM_IME_SETCONTEXT fSet:1 iShow:C000000F <00106> 0008061C S WM_IME_NOTIFY dwCommand:IMN_OPENSTATUSWINDOW dwCommand:00000002 dwData:00000000 <00107> 0008061C R WM_IME_NOTIFY <00108> 0008061C R WM_IME_SETCONTEXT <00109> 0008061C S WM_SETFOCUS hwndLoseFocus:00460542 <00110> 0008061C S message:0x202B [用户定义:WM_USER+7211] wParam:0008061C lParam:0012D7FC <00111> 0008061C R message:0x202B [用户定义:WM_USER+7211] lResult:00000000 <00112> 0008061C R WM_SETFOCUS <00113> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00114> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00115> 0008061C S WM_NCHITTEST xPos:1180 yPos:679 <00116> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00117> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00118> 0008061C R WM_SETCURSOR fHaltProcessing:False <00119> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:35 yPos:16 <00120> 0008061C S message:0xC245 [已注册:"WinFormsMouseEnter"] wParam:00000000 lParam:00000000 <00121> 0008061C R message:0xC245 [已注册:"WinFormsMouseEnter"] lResult:00000000 <00122> 0008061C P WM_PAINT hdc:00000000 <00123> 0008061C P message:0x0118 [未知] wParam:0000FFFA lParam:BF80A5FB <00124> 0008061C P WM_MOUSEHOVER <00125> 0008061C S WM_NCHITTEST xPos:1179 yPos:679 <00126> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00127> 0008061C S WM_NCHITTEST xPos:1179 yPos:679 <00128> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00129> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00130> 0008061C R WM_SETCURSOR fHaltProcessing:False <00131> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:34 yPos:16 <00132> 0008061C S WM_NCHITTEST xPos:1178 yPos:680 <00133> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00134> 0008061C S WM_NCHITTEST xPos:1175 yPos:681 <00135> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00136> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00137> 0008061C R WM_SETCURSOR fHaltProcessing:False <00138> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:30 yPos:18 <00139> 0008061C S WM_NCHITTEST xPos:1171 yPos:682 <00140> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00141> 0008061C S WM_NCHITTEST xPos:1165 yPos:684 <00142> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00143> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00144> 0008061C R WM_SETCURSOR fHaltProcessing:False <00145> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:20 yPos:21 <00146> 0008061C S WM_NCHITTEST xPos:1153 yPos:689 <00147> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00148> 0008061C S WM_NCHITTEST xPos:1153 yPos:689 <00149> 0008061C R WM_NCHITTEST nHittest:HTCLIENT <00150> 0008061C S WM_SETCURSOR hwnd:0008061C nHittest:HTCLIENT wMouseMsg:WM_MOUSEMOVE <00151> 0008061C R WM_SETCURSOR fHaltProcessing:False <00152> 0008061C P WM_MOUSEMOVE fwKeys:0000 xPos:8 yPos:26 <00153> 0008061C P WM_MOUSELEAVE <00154> 0008061C P WM_PAINT hdc:00000000 <00155> 0008061C S WM_KILLFOCUS hwndGetFocus:(null) <00156> 0008061C S WM_IME_NOTIFY dwCommand:IMN_SETOPENSTATUS dwCommand:00000008 dwData:00000000 <00157> 0008061C R WM_IME_NOTIFY <00158> 0008061C S WM_IME_NOTIFY dwCommand:IMN_SETOPENSTATUS dwCommand:00000008 dwData:00000000 <00159> 0008061C R WM_IME_NOTIFY <00160> 0008061C S message:0x202B [用户定义:WM_USER+7211] wParam:0008061C lParam:0012EB9C <00161> 0008061C R message:0x202B [用户定义:WM_USER+7211] lResult:00000000 <00162> 0008061C R WM_KILLFOCUS <00163> 0008061C S WM_IME_SETCONTEXT fSet:0 iShow:C000000F <00164> 0008061C S WM_IME_NOTIFY dwCommand:IMN_CLOSESTATUSWINDOW dwCommand:00000001 dwData:00000000 <00165> 0008061C R WM_IME_NOTIFY <00166> 0008061C R WM_IME_SETCONTEXT <00167> 0008061C P WM_PAINT hdc:00000000

5,172

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧