• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Помогите с Sendmessage

  • Автор темы Автор темы zzzaaazzz
  • Дата начала Дата начала
Z

zzzaaazzz

Добрый день.
Необходимо имитировать нажатие клавиш в другом приложении(не активном). Что только не пробывал. В обычное текстовое поле блокнота успешно получается. Ниже код

Код:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As String, ByVal lParam As String) As Integer

Private Const WM_CHAR As Integer = &H102
Private Const WM_DEADCHAR As Integer = &H103
Private Const WM_KEYUP As Integer = &H101
Private Const WM_KEYDOWN As Integer = &H100
Private Const WM_COMMAND As Integer = &H111

hwnd = FindWindow(vbNullString, TextBox1.Text)

SendMessage(hwnd, WM_CHAR, "1", 0)

Что только не пробывал, всеравно не хочет, мб упускаю какую нибудь мелочь, подскажите плиииззз :)
 
Аналогично. Чуть не месяц просидела за компом в поисках ответа: ну почему, ну почему? Уж каких только советов не применяла, каких функций из разных библиотек не пробовала - не растет кокос.
И вот, уже совсем отчаявшись, наткнулась на фразочку одного удачливого собрата по несчастью. Он написал всего несколько строчек, в которых ОНО у него заработало. Секрет оказался в том, что нужно, во-первых, использовать не просто константу, например, для клавиши "F5" как VK_F5, но рядышком в той же строке для вызова функции надо поставить через запятую, эту же константу, но в обработке функции MapVirtualKey(), ну и соблюсти до математической точности положение всех скобочек, запятых и ноликов.
Пример счастливчик привел не для SendMessage, а для PostMessage, но это не принципиально. Я вместо SendMessage тоже воспользовалась PostMessage.
Пример для отправки в другое приложение с неактивным окном клавиши F5 будет выглядеть так:

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Const VK_F5 = &H74
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101

Private Sub Шлю_тебе_клавишу_F5(ByVal HWND As Long)
PostMessage HWND, WM_KEYDOWN, VK_F5, MapVirtualKey(VK_F5, 0)
PostMessage HWND, WM_KEYUP, VK_F5, MapVirtualKey(VK_F5, 0)
End Sub
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab