Отсылка сообщений WM_KEYDOWN WM_CHAR и WM_KEYUP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alex_maniac
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.08.2007 (Вт) 7:07

Отсылка сообщений WM_KEYDOWN WM_CHAR и WM_KEYUP

Сообщение Alex_maniac » 14.08.2007 (Вт) 7:13

Всем доброго дня!
Задам вопрос более глупо чем хотелось бы, но вместе с тем и более кратко:
Есть старая как мир задача сэмулировать ввод с клаватуры для НЕАКТИВНОГО окна. естестевенно, используется SendMessage. Вопрос в кодировке русских символов и значениях lParam и wParam. С установкой символов латыницы проблем нет. русские - крякозябры. Подскажите, как перекодировать , что использовать ??? [/syntax]

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.08.2007 (Вт) 8:31

Alex_maniac, пока что та формулировка вопроса, которую ты использовал, никак не тянет на сложный вопрос.
Возможно, нужно использовать LoadKeyboardLayout.


tag_warning
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 14.08.2007 (Вт) 17:11

Alex_maniac
SendMessageW вылечит кракозябры юникодом.
Изображение

Alex_maniac
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.08.2007 (Вт) 7:07

Сообщение Alex_maniac » 14.08.2007 (Вт) 19:30

Вот посылка кирилицей буквы "а" окну назначения (это лог с клавиатуры)

wParam lParam
WM_KEYDOWN 046 21 0001
WM_CHAR 0E0 21 0001
WM_KEYUP 046 21 0001

с wParam все ясно. а вот с lParam - ".. биты 16-23 - скан-код, зависящий от ОЕМ" - (MSDN). Получить его мне не удается никак. CharToOem - не то. OemKeyScan - вообще не то , иногда даже -1, возвращает.

чего куда преобразовывать ??? .. хм..[/syntax]
Последний раз редактировалось Alex_maniac 14.08.2007 (Вт) 19:34, всего редактировалось 1 раз.

Alex_maniac
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.08.2007 (Вт) 7:07

Сообщение Alex_maniac » 14.08.2007 (Вт) 19:32

да. и SendMessageW тоже не хочет
и SendMessage(WM_UNICHAR ....) - то же.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.08.2007 (Вт) 19:38

The VkKeyScan function translates a character to the corresponding virtual-key code and shift state for the current keyboard.
Изображение

Alex_maniac
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.08.2007 (Вт) 7:07

Сообщение Alex_maniac » 14.08.2007 (Вт) 20:00

Работает!!!!
Код: Выделить всё

Private Sub SendString(s1 As String)
  Dim f As Long
    Dim t1 As Long
    Dim t2 As Long
    Dim s As String
    Dim tmps As String
    Dim b() As Byte
    s = s1
   
    ReDim b(1)
   
    For f = 1 To Len(s)
      tmps = Mid(s, f, 1)
      CopyMemory VarPtr(b(0)), StrPtr(tmps), 2
      t1 = b(1) * 2 ^ 8 + b(0)
      t2 = 1
      SendMessageW CLng(txtHandle.Text), WM_UNICHAR, t1, t2
    Next f
   
    SendMessage CLng(txtHandle.Text), WM_KEYDOWN, 13, 1
    SendMessage CLng(txtHandle.Text), WM_KEYUP, 10, 1
End Sub

Alex_maniac
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 14.08.2007 (Вт) 7:07

Сообщение Alex_maniac » 14.08.2007 (Вт) 20:22

tyomitch писал(а):
The VkKeyScan function translates a character to the corresponding virtual-key code and shift state for the current keyboard.

Думаешь не пробовал ?? ;) галякЪ


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 99

    TopList