· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› отправка "VirtualKey" через SendMessage

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Авг 2, 2004 21:45:01 · Поправил: NoName

Есть ComboBox с элементами названий "виртуальных" кнопок клавиатуры. Например VK_F1.
Чтение произвожу так:
.data?
VK1 dd ?
.code
invoke SendMessage,hCB,CB_GETCURSEL,NULL,NULL
invoke SendMessage,hCB,CB_GETLBTEXT,eax,addr VK1
;Потом в одной из функций делаю:
invoke SendMessage,hProcess,WM_KEYDOWN,offset VK1,NULL
;Но ничего не происходит, т.е. сообщение о нажатии данной кнопки не ставится в очередь либо ставится некорректно.


Дата: Авг 3, 2004 07:50:58

NoName
Ты хочешь эмулировать нажатие кнопок?


Дата: Авг 3, 2004 18:35:49

да


Дата: Авг 3, 2004 20:07:32

До меня вроде бы дошло!
Это же макро их **** средства.
Прекомпилятор подставляет значения VK_F1 к примеру на какое-то в основном 16-ое число, в результате мой способ подстановки путем захвата выделенной строки неподходит...
А как сделать тогда по-другому. Я тк понимаю придется делать список соответствия выбранной клавиши.
Т.е. пользователь выбирает из списка нужную ему кнопку, а далее программа путем считывание выбранной строки делает подстановку путем замены выбранной клавиши на цифровой эквивалент.
Народ нужна ваша помощь, я хочу узнать правильно ли я рассуждаю.
Спасибо.


Дата: Авг 3, 2004 21:04:53

Значение всех VK_* последовательны: VK_A=41h, VK_B=42h и т.д. Открой MSDN и посмотри. Берешь индекс из Combobox'a, добавляешь константу(если надо) и получаешь нужный код.


Дата: Авг 3, 2004 22:12:24

Получаю номер в 10-ой системе.
А как в переменную записать 16-ый код? (пробую wsprintf)
Потом к переменной добавляю константу.
Должно работать.


Дата: Авг 3, 2004 22:15:21

незнаю я все-таки как 16-ое значение зафигарить в переменную.


Дата: Авг 3, 2004 22:16:49

Ну чем я думаю:
x, X An unsigned hexadecimal integer in lowercase or uppercase.


Дата: Авг 3, 2004 22:17:27

Простите за неграмотность, мне просто стыдно за такой ламеризм.


Дата: Авг 3, 2004 22:32:27 · Поправил: NoName

Вот это неработающее чудо.
IntX db "%x",0
buffer db 0

.if ax==CBN_SELCHANGE	         
	             invoke SendMessage,hCB,CB_GETCURSEL,NULL,NULL
	             ;now in eax saved data index
	             push eax
	             invoke wsprintf,offset buffer,offset IntX,eax
                                                  pop eax
	             cmp eax,1Ah
	             je eq1
                 mov eax,offset buffer
                 add eax,41h
                 invoke wsprintf,offset buffer,offset IntX,eax
                 jmp exit
                 eq1:
                 mov eax,offset buffer
                 add eax,44h
                 invoke wsprintf,offset buffer,offset IntX,eax
                 exit:
	         .endif
далее в отдельной функции:
invoke SendMessage,hProcess,WM_KEYDOWN,offset buffer,NULL



Дата: Авг 3, 2004 22:34:42

Зачем тебе wsprintf? Берешь калькулятор и переводишь, если так надо, в десятичное.


Дата: Авг 3, 2004 22:34:52

VK_F1 equ 70h
В списке у меня оно под номером 26 (считая с 0-я).


Дата: Авг 3, 2004 22:37:13

__Ranger
Я плохо тебя понял


Дата: Авг 3, 2004 22:37:33

Первая строчка в combobox'e какая?


Дата: Авг 3, 2004 22:42:16

__Ranger
VK_A

. 1 . 2 . >>