这是一个向记事本菜单发送命令的例子: 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
Private Sub Command1_Click() Dim h1 As Long, h2 As Long, id As Long h1 = FindWindow(vbNullString, "无标题 - 记事本") '计事本的句柄 Debug.Print h1 h2 = GetMenu(h1) h2 = GetSubMenu(h2, 0) '文件"菜单的句柄 改变后面的0,就可以 '得到不同菜单的句柄 id = GetMenuItemID(h2, 1) '子菜單"打开"的ID SendMessage h1, WM_COMMAND, id, ByVal 0&
End Sub
Private Sub Form_Load() Shell "notepad.exe", vbNormalNoFocus End Sub
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
Private Sub Command1_Click()
Dim h1 As Long, h2 As Long, id As Long
h1 = FindWindow(vbNullString, "无标题 - 记事本") '计事本的句柄
Debug.Print h1
h2 = GetMenu(h1)
h2 = GetSubMenu(h2, 0) '文件"菜单的句柄 改变后面的0,就可以
'得到不同菜单的句柄
id = GetMenuItemID(h2, 1) '子菜單"打开"的ID
SendMessage h1, WM_COMMAND, id, ByVal 0&
End Sub
Private Sub Form_Load()
Shell "notepad.exe", vbNormalNoFocus
End Sub
我做了一个软键盘,楼主可以看看,里面有相关的代码:
问题一:他的自菜单里面有粘贴项,我想直接发给那个菜单,不知可行。
问题二:如果上述方法不行就直接PostMessage Ctrl+V发送,那么PostMessages能发送Ctrl+V,还有就是发送到那个程序的窗口
问题三:我想直接像补丁一样,把我的程序界面加在那个软件的界面上是否能行。
加上这句调试