1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Помогите с Sendmessage

Тема в разделе "Visual Basic", создана пользователем zzzaaazzz, 16 мар 2011.

  1. zzzaaazzz

    zzzaaazzz Гость

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

    Код:
    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)
    Что только не пробывал, всеравно не хочет, мб упускаю какую нибудь мелочь, подскажите плиииззз :)
     
  2. Nadja

    Nadja New Member

    Репутация:
    0
    Регистрация:
    14 фев 2017
    Сообщения:
    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
     
Загрузка...
Похожие Темы - Помогите Sendmessage
  1. ~localhost
    Ответов:
    2
    Просмотров:
    68
  2. citizenfour
    Ответов:
    1
    Просмотров:
    68
  3. Tayrus
    Ответов:
    1
    Просмотров:
    80
  4. Lcf11
    Ответов:
    2
    Просмотров:
    86
  5. Tayrus
    Ответов:
    3
    Просмотров:
    111

Поделиться этой страницей