2010-10-25 3 views
0

Эй, все, что я пытаюсь понять, почему это не отправляет ALT + F в блокнот!Findwindow и SendMessage

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).

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

Дэвид

+0

Кто-нибудь еще хочет взять удар по этому поводу? – StealthRT

ответ

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. 
+0

Спасибо за ответ, Cidtek, но это, похоже, не сработало. – StealthRT

0

Я думаю, что это проблема: вы отправляете сообщение к рамке вокруг окна блокнота, и нужно отправить его в меню окно. Используйте свой дескриптор с 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

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

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

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

+0

Или попробуйте оператор VB6 SendKeys – MarkJ

Смежные вопросы