1,486
社区成员
发帖
与我相关
我的任务
分享
id = 7 '7是退出,1是新建,2是打开,3是保存...
PostMessage hwnd, WM_COMMAND, id, 0&
Option Explicit
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Const WM_COMMAND = &H111
Private Sub Command1_Click()
Dim hFormHwnd As Long, hMainMenu As Long, hSubMenu As Long, id As Long, i%
hFormHwnd = &H5204CE '这里是记事本窗体的句柄,不是编辑框的句柄
hMainMenu = GetMenu(hFormHwnd)
hSubMenu = GetSubMenu(hMainMenu, 1)
id = GetMenuItemID(hSubMenu, 12) '这里实现了第2个弹出菜单中,第13个子项全选的功能
PostMessage hFormHwnd, WM_COMMAND, id, 0&
End Sub
Option Explicit
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_SYSKEYUP = &H105
Private Const WM_SYSKEYDOWN = &H104
Private Sub test()
Dim lngHwnd As Long
lngHwnd = FindWindow(vbNullString, "1.txt - 记事本")
PostMessage lngHwnd, WM_SYSKEYDOWN, &H46, &H3E0001 Or &H20000000 ' 模拟按下 Alt+F
Sleep 100
PostMessage lngHwnd, WM_SYSKEYUP, &H46, &HC03E0001 Or &H20000000 ' 模拟抬起 Alt+F
End Sub
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
Call test
End Sub
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_MENU = &H12 'alt key
Private Const KEYEVENTF_KEYUP = &H2
Private Sub test()
Dim hwnd As Long
hwnd = Text1.hwnd
Text1.SetFocus
keybd_event VK_MENU, 0, 0, 0
keybd_event &H46, 0, 0, 0
Sleep 500
keybd_event &H46, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End Sub
Private Sub Command1_Click()
Call test
End Sub
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long,ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_KEYUP = &H101
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_SYSKEYUP = &H105
Private Const VK_MENU = &H12 'alt key
Private Sub test()
Dim hwnd As Long
hwnd = text1.text 'XXXXX表示记事本编辑框的句柄
PostMessage hwnd, WM_SYSKEYDOWN, VK_MENU,&H0
PostMessage hwnd, WM_SYSKEYDOWN, &H46,&H0
Sleep 50
PostMessage hwnd, WM_SYSKEYUP, &H46, &H0
PostMessage hwnd, WM_SYSKEYUP, VK_MENU,&H0
' lParam解释:大家一般习惯写成16进制的,那么就应该是类似&H00 00 00 00 ,第0-15位一般为&H0001,
' 如果是按下键,那么24-31位为&H00,释放键则为&HC0;设定 29位为1按alt
end sub