Findwindow和SendMessage

问题描述 投票:1回答:3

我试图弄清楚为什么它没有向记事本发送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)。

我想念什么?

vb6 sendmessage findwindow
3个回答
2
投票

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

因此,您不能使用此机制将带有修饰符的击键伪造到其他应用程序。

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


1
投票

我认为这是问题所在:您正在将消息发送到记事本窗口周围的框架,并且需要将其发送到菜单窗口。使用带有FindWindowEx的句柄和32768类名(即菜单)来获取菜单窗口,该菜单窗口是您拥有该句柄的子窗口。这是两页:应该有用的http://msdn.microsoft.com/en-us/library/ms633500(v=VS.85).aspxhttp://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx#class_name


1
投票

使用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.
© www.soinside.com 2019 - 2024. All rights reserved.