|
大家好 ! 最近需要实现在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++检测手动点击按钮的相关过程:
<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 hwndLoseFocusnull)
<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 hwndGetFocusnull)
<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
麻烦高人看看问题出在什么地方?谢谢!
用WM_CLICK吧,这个更简单,后面2个参数直接传0.
|
|