思路:
1.用FindWindow查目标应用程序的句柄
2.用GetMenu,GetSubMenu查菜单句柄
3.用GetMenuItemID查菜单ID
4.用SendMessage 加WM_COMMAND消息,模拟一次菜单操作
例子:模拟单击记事本程序 "文件"->"另存为"菜单
Private
Declare
Function
GetMenu Lib
"
user32.dll
"
(ByVal hWnd
As
Long
)
As
Long
Private
Declare
Function
SendMessage Lib
"
user32.dll
"
Alias
"
SendMessageA
"
(ByVal hWnd
As
Long
, ByVal wMsg
As
Long
, ByVal wParam
As
Long
, lParam
As
Any)
As
Long
Private
Declare
Function
FindWindow Lib
"
user32.dll
"
Alias
"
FindWindowA
"
(ByVal lpClassName
As
String
, ByVal lpWindowName
As
String
)
As
Long
Private
Declare
Function
GetMenuItemID Lib
"
user32.dll
"
(ByVal hMenu
As
Long
, ByVal nPos
As
Long
)
As
Long
Private
Declare
Function
GetSubMenu Lib
"
user32.dll
"
(ByVal hMenu
As
Long
, ByVal nPos
As
Long
)
As
Long
Private
Const
WM_COMMAND
As
Long
=
&
H111
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
Private
Sub
Command1_Click()
Dim
hWnd
As
Long
, hMenu
As
Long
, MenuID
As
Long
hWnd
=
FindWindow(vbNullString,
"
新建 文本文档 - 记事本
"
)
'
记事本的句柄,默认新建
hMenu
=
GetMenu(hWnd)
hMenu
=
GetSubMenu(hMenu,
0
)
'
"文件"菜单的句柄
MenuID
=
GetMenuItemID(hMenu,
3
)
'
子菜单"另存为"的ID
SendMessage hWnd, WM_COMMAND, MenuID, ByVal
0
End Sub