Vb6 Findwindow和SendMessage

Vb6 Findwindow和SendMessage,vb6,sendmessage,findwindow,Vb6,Sendmessage,Findwindow,我想弄明白为什么这不会向记事本发送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_

我想弄明白为什么这不会向记事本发送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
我为parenthwnd获取一个值,但不为任何retvalue值(0)获取该值


我遗漏了什么?

使用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.

使用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.

我认为这就是问题所在:您正在将消息发送到记事本窗口周围的框架,并且需要将其发送到菜单窗口。使用FindWindowEx的句柄和32768类名(这是一个菜单)来获取菜单窗口,它是您拥有该句柄的窗口的子窗口。这里有两页:这应该会有帮助。

我认为这就是问题所在:您正在将消息发送到记事本窗口周围的框架,需要将其发送到菜单窗口。使用FindWindowEx的句柄和32768类名(这是一个菜单)来获取菜单窗口,它是您拥有该句柄的窗口的子窗口。这里有两页:这应该会有帮助。

您可以尝试发送/发布这些消息。不幸的是,它们不会影响GetAsyncKeyState的返回值——这是系统在处理VK_F消息时使用的返回值——以查看alt是否已关闭

因此,您不能用修改器向使用此机制的其他应用程序伪造击键


要解决这个问题,您需要使用-但这要求接收击键的应用程序是前台/焦点窗口。

您可以尝试发送/发布这些消息。不幸的是,它们不会影响GetAsyncKeyState的返回值——这是系统在处理VK_F消息时使用的返回值——以查看alt是否已关闭

因此,您不能用修改器向使用此机制的其他应用程序伪造击键


要解决此问题,您需要使用-但这要求接收击键的应用程序是前台/焦点窗口。

还有人想尝试一下吗?还有人想尝试一下吗?或者尝试VB6 SendKeys状态,或者尝试VB6 SendKeys语句