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

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

<< . 1 . 2 .

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


Дата: Авг 3, 2004 22:43:03

VK_A - нулевая
VK_B - первая


Дата: Авг 3, 2004 22:48:18

invoke SendMessage,hCB,CB_GETCURSEL,NULL,NULL
add eax, VK_A

Всё, в eax-нужный код. Кстати, через SendMessage не всегда работает, можешь ещё попробовать через функцию keyb_event.


Дата: Авг 3, 2004 22:50:08

Респект комрад! Ты гений!


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

Попробуем...


Дата: Авг 3, 2004 22:56:08

Там прикол такой еще. Сначала у меня в списке идут буквы, затем F-ы. Так проблема еще в том что нумерация у ф-ов после букв непоследовательная по докам.
VK_Z equ 5Ah
VK_F1 equ 70h


Дата: Авг 3, 2004 22:57:30

думаю с этим сам разберусь.


Дата: Авг 3, 2004 23:34:05

.data
buffer db 32 dup(0),0
.code

	             invoke SendMessage,hCB,CB_GETCURSEL,NULL,NULL
	             cmp eax,1Ah
	             jae eq0
	             add eax,VK_A
                 invoke wsprintf,offset buffer,offset IntX,eax
                 invoke MessageBox,hWnd,offset buffer,offset Caption,MB_OK
                 jmp exit
                 eq0:
                 sub eax,1Ah
                 add eax,VK_F1
                 invoke wsprintf,offset buffer,offset IntX,eax
                 invoke MessageBox,hWnd,offset buffer,offset Caption,MB_OK
                 exit:

Затем делаю как обычно
invoke SendMessage,hProcess,WM_KEYDOWN,offset buffer,NULL

С числами все в порядке, но опять не работает, хотя все выглядит правильно. А SendMessage работает если в него вписать прямым текстом, так что я нифига непонимаю.


Дата: Авг 3, 2004 23:36:01

IntX db "%x",0


Дата: Авг 4, 2004 01:05:25 · Поправил: __Ranger

WM_KEYDOWN
nVirtKey = (int) wParam; // virtual-key code
lKeyData = lParam; // key data

виртуальный код это не строка, а число. Убери везде wsprintf и MessageBox и сделай так

invoke SendMessage,hProcess,WM_KEYDOWN,eax,NULL


Дата: Авг 4, 2004 07:59:50 · Поправил: lazari

Думаю что можно немного упростить, как мне кажется, дела, если делать примерно так:
1. При заполнении ComboBox-a:
invoke SendMessage,hComboBox,CB_ADDSTRING,0,addr szVK_Name
invoke SendMessage,hComboBox,CB_SETITEMDATA,eax,VK_NAME
Где szVK_Name - соответсвующая строка (названию клавиши), а VK_NAME - соответствующий код этой клавы.
2. А при чтении делать так:
invoke SendMessage,hComboBox,CB_GETCURSEL,0,0
invoke SendMessage,hComboBox,CB_GETITEMDATA,eax,0
invoke SendMessage,hProcess,WM_KEYDOWN,eax,0
3. Тебе надо как-то связать szVK_Name and VK_NAME, я например это сделал так:
; string echivalents of virtual keys ######################################
VKArrayEndByte equ 0ffh ; array end mark
VKArrayStart equ $ ; pointer to beginning of array
; --------------
db 000h,"None",0
szVK_LBUTTON db 001h,"Left mouse button",0 ; (01) Left mouse button
szVK_RBUTTON db 002h,"Right mouse button",0 ; (02) Right mouse button
szVK_CANCEL db 003h,"Control-break",0 ; (03) Control-break processing
szVK_MBUTTON db 004h,"Middle mouse button",0 ; (04) Middle mouse button (three-button mouse)
szVK_XBUTTON1 db 005h,"X1 mouse button",0 ; (05) Windows 2000/XP: X1 mouse button
szVK_XBUTTON2 db 006h,"X2 mouse button",0 ; (06) Windows 2000/XP: X2 mouse button
Ну и так далее и использую следующую функцию для поиска в этом:
; FindVkName ==============================================================
FindVKName PROC uses esi Key:DWORD
mov edx,Key
mov esi,OFFSET VKArrayStart
mov al,byte ptr [esi]
.WHILE al!=dl && al!=VKArrayEndByte ; compare first byte (key index) & array end byte
.REPEAT
inc esi
.UNTIL byte ptr [esi]==0 ; until end of string
inc esi ; points to next index byte
mov al,byte ptr [esi]
.ENDW
.IF al==dl ; if found return pointer to string
mov eax,esi
inc eax ; skip index byte
.ELSE
mov eax,offset szVKUndefined
.ENDIF
ret
FindVKName ENDP ================================================
Все это я приложил в аттаче в полно виде...
Удачи!

1070690909__VKStrings.rar


Дата: Авг 4, 2004 22:51:41

Попытаюсь разобраться в этом.
Спасибо.


Дата: Авг 4, 2004 23:25:19

Все заработало!

<< . 1 . 2 .