Findwindow и SendMessage - PullRequest
       45

Findwindow и SendMessage

1 голос
/ 25 октября 2010

Привет всем, что я пытаюсь выяснить, почему это не отправляет 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 , но не для любого из значений возврата (0).

Что мне не хватает ???

David

Ответы [ 3 ]

2 голосов
/ 16 ноября 2010

Вы можете попытаться отправить / опубликовать эти сообщения, сколько захотите. К сожалению, они не влияют на возвращаемое значение GetAsyncKeyState - то, что система использует при обработке сообщения VK_F - чтобы проверить, не выключен ли alt.

В результате вы не можете имитировать нажатия клавиш с модификаторами для других приложений, используя этот механизм.

Чтобы обойти это, вам нужно использовать SendInput - но для этого необходимо, чтобы приложение, получающее нажатия клавиш, было окном переднего плана / фокуса.

1 голос
/ 29 октября 2010

Я думаю, что это проблема: вы отправляете свое сообщение в рамку вокруг окна блокнота, и вам нужно отправить его в окно меню. Используйте свой дескриптор с FindWindowEx и именем класса 32768 (это меню), чтобы получить окно меню, которое является дочерним по отношению к тому, к которому у вас есть дескриптор. Вот две страницы: http://msdn.microsoft.com/en-us/library/ms633500(v=VS.85).aspx и http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx#class_name, которые должны помочь.

1 голос
/ 25 октября 2010

Использовать почтовое сообщение вместо 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.
...