|
|
| Посл.отвђт | Сообщен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 Все заработало! |