我在试着弄清楚为什么这不发送ALT+F到记事本,
Private Declare Function FindWindow1 Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_KEYUP = &H101
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Sub Command_Click()
Dim parenthwnd As Long
Dim hwnd As Long
parenthwnd = FindWindow1(vbNullString, "Untitled - Notepad")
retvalue = SendMessage(parenthwnd, WM_SYSKEYDOWN, VK_MENU, 1&)
retvalue = SendMessage(parenthwnd, WM_KEYDOWN, VK_F, 1&)
End Sub我得到圆括号的值,而不是任何retvalue值(0)的值。
我遗漏了什么?
发布于 2010-11-16 12:59:25
您可以尝试发送/发布所有您想要的消息。不幸的是,它们不会影响GetAsyncKeyState的返回值--这是系统在处理VK_F消息时所使用的--以查看alt是否下降。
因此,您不能使用此机制对其他应用程序使用修饰符伪造击键。
为了解决这个问题,您需要使用SendInput --但这要求接收击键的应用程序是前台/焦点窗口。
发布于 2010-10-25 14:26:25
使用Postmessage代替Sendmessage
Public Const WM_SYSKEYDOWN = &H104
PostMessage hwnd, WM_SYSKEYDOWN, vbKeyF, 2 ^ 29
'Simulates Alt + F (2^29 sets the 29 bit of lParam indicating Alt is being pressed.发布于 2010-10-28 21:57:46
我认为这就是问题所在:您正在将消息发送到“记事本”窗口周围的框架中,并且需要将其发送到菜单窗口。使用FindWindowEx和32768类名(即菜单)来获取菜单窗口,该窗口是句柄的子窗口。这里有两页:http://msdn.microsoft.com/en-us/library/ms633500(v=VS.85).aspx和名字,应该会有所帮助。
https://stackoverflow.com/questions/4011252
复制相似问题