Очень прошу помочь Есть прога из какой то книги
| Код | .586P ;плоская модель памяти .MODEL FLAT, stdcall ;константы ;сообщение приходит при закрытии окна WM_CLOSE equ 10h ;сообщение приходит при закрытии окна WM_DESTROY equ 2 ;сообщение приходит при создании окна WM_CREATE equ 1 ;сообщение при щелчке левой кнопкой мыши в области окна WM_LBUTTONDOWN equ 201h ;сообщение при щелчке правой кнопкой мыши в области окна WM_RBUTTONDOWN equ 204h ;свойства окна CS_VREDRAW equ 1h CS_HREDRAW equ 2h CS_GLOBALCLASS equ 4000h WS_OVERLAPPEDWINDOW equ 000CF0000H style equ CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS ;идентификатор стандартной пиктограммы IDI_APPLICATION equ 32512 ;идентификатор курсора IDC_CROSS equ 32515 ;режим показа окна - нормальный SW_SHOWNORMAL equ 1 ;прототипы внешних процедур EXTERN MessageBoxA@16:NEAR EXTERN CreateWindowExA@48:NEAR EXTERN DefWindowProcA@16:NEAR EXTERN DispatchMessageA@4:NEAR EXTERN ExitProcess@4:NEAR EXTERN GetMessageA@16:NEAR EXTERN GetModuleHandleA@4:NEAR EXTERN LoadCursorA@8:NEAR EXTERN LoadIconA@8:NEAR EXTERN PostQuitMessage@4:NEAR EXTERN RegisterClassA@4:NEAR EXTERN ShowWindow@8:NEAR EXTERN TranslateMessage@4:NEAR EXTERN UpdateWindow@4:NEAR ;директивы компоновщику для подключения библиотек includelib c:\masm32\lib\user32.lib includelib c:\masm32\lib\kernel32.lib ;----------------------------------------------- ;структуры ;структура сообщения MSGSTRUCT STRUC MSHWND DD ?;идентификатор окна, ;получающего сообщение MSMESSAGE DD ?;идентификатор сообщения MSWPARAM DD ?;доп. информация о сообщении MSLPARAM DD ?;доп. информация о сообщении MSTIME DD ?;время посылки сообщения MSPT DD ?;положение курсора, во время посылки ;сообщения MSGSTRUCT ENDS ;--------- WNDCLASS STRUC CLSSTYLE DD ?;стиль окна CLWNDPROC DD ?;указатель на процедуру окна CLSCEXTRA DD ?;информация о доп. байтах для ;данной структуры CLWNDEXTRA DD ?;информация о доп. байтах для ;окна CLSHINSTANCE DD ?;дескриптор приложения CLSHICON DD ?;идентификат. пиктограммы окна CLSHCURSOR DD ?;идентификатор курсора окна CLBKGROUND DD ?;идентификатор кисти окна CLMENUNAME DD ?;имя-идентификатор меню CLNAME DD ?;специфицирует имя класса окон WNDCLASS ENDS ;сегмент данных _DATA SEGMENT NEWHWND DD 0 MSG MSGSTRUCT <?> WC WNDCLASS <?> HINST DD 0 ;здесь хранится дескриптор приложения TITLENAME DB 'драйвер клавиатуры',0 CLASSNAME DB 'CLASS32',0 CAP DB 'Сообщение',0 MES1 DB 'Вы ввели гласную латинскую букву',0 MES2 DB 'Вы ввели согласную латинскую букву',0 MES3 DB 'Закрытие окна',0 _DATA ENDS ;сегмент кода _TEXT SEGMENT START: ;получить дескриптор приложения PUSH 0 CALL GetModuleHandleA@4 MOV [HINST], EAX REG_CLASS: ;заполнить структуру окна ; стиль MOV [WC.CLSSTYLE],style ;процедура обработки сообщений MOV WC.CLWNDPROC, OFFSET WNDPROC MOV WC.CLSCEXTRA, 0 MOV WC.CLWNDEXTRA, 0 MOV EAX, [HINST] MOV WC.CLSHINSTANCE, EAX ;----------пиктограмма окна PUSH IDI_APPLICATION PUSH 0 CALL LoadIconA@8 MOV WC.CLSHICON, EAX ;----------курсор окна PUSH IDC_CROSS PUSH 0 CALL LoadCursorA@8 MOV WC.CLSHCURSOR, EAX ;---------- MOV WC.CLBKGROUND, 17 ;цвет окна MOV DWORD PTR WC.CLMENUNAME,0 MOV DWORD PTR WC.CLNAME, OFFSET CLASSNAME PUSH OFFSET WC CALL RegisterClassA@4 ;создать окно зарегистрированного класса PUSH 0 PUSH [HINST] PUSH 0 PUSH 0 PUSH 400 ; DY - высота окна PUSH 400 ; DX - ширина окна PUSH 100 ; Y - координата левого верхнего угла PUSH 100 ; X - координата левого верхнего угла PUSH WS_OVERLAPPEDWINDOW PUSH OFFSET TITLENAME ;имя окна PUSH OFFSET CLASSNAME ;имя класса PUSH 0 CALL CreateWindowExA@48 ;проверка на ошибку CMP EAX,0 JZ _ERR MOV NEWHWND, EAX ;дескриптор окна ;---------------------------------- PUSH SW_SHOWNORMAL PUSH NEWHWND CALL ShowWindow@8; показать созданное окно ;---------------------------------- PUSH NEWHWND CALL UpdateWindow@4; команда перерисовать видимую ; часть окна, сообщение WM_PAINT ;цикл обработки сообщений MSG_LOOP: PUSH 0 PUSH 0 PUSH 0 PUSH OFFSET MSG CALL GetMessageA@16 CMP EAX, 0 JE END_LOOP PUSH OFFSET MSG CALL TranslateMessage@4 PUSH OFFSET MSG CALL DispatchMessageA@4 JMP MSG_LOOP END_LOOP: ;выход из программы (закрыть процесс) PUSH MSG.MSWPARAM CALL ExitProcess@4 _ERR: JMP END_LOOP ;------------------------------------------------------------ ;процедура окна ;расположение параметров в стеке ; [EBP+014H] LPARAM ; [EBP+10H] WAPARAM ; [EBP+0CH] MES ; [EBP+8] HWND WNDPROC PROC PUSH EBP MOV EBP, ESP PUSH EBX PUSH ESI PUSH EDI CMP DWORD PTR [EBP+0CH], WM_DESTROY JE WMDESTROY CMP DWORD PTR [EBP+0CH],WM_CLOSE ;закрытие окна JE WMCLOSE CMP DWORD PTR [EBP+0CH], WM_CREATE JE WMCREATE CMP DWORD PTR [EBP+0CH],WM_LBUTTONDOWN ;левая кнопка JE LBUTTON CMP DWORD PTR [EBP+0CH],WM_RBUTTONDOWN ;правая ;кнопка JE RBUTTON JMP DEFWNDPROC ;нажатие правой кнопки приводит к закрытию окна RBUTTON: JMP WMDESTROY ;нажатие левой кнопки мыши LBUTTON: ;выводим сообщение PUSH 0 ;MB_OK PUSH OFFSET CAP PUSH OFFSET MES1 PUSH DWORD PTR [EBP+08H] CALL MessageBoxA@16 MOV EAX, 0 JMP FINISH WMCREATE: MOV EAX, 0 JMP FINISH WMCLOSE: PUSH 0 ;MB_OK PUSH OFFSET CAP PUSH OFFSET MES3 PUSH DWORD PTR [EBP+08H] ;дескриптор окна CALL MessageBoxA@16 DEFWNDPROC: PUSH DWORD PTR [EBP+14H] PUSH DWORD PTR [EBP+10H] PUSH DWORD PTR [EBP+0CH] PUSH DWORD PTR [EBP+08H] CALL DefWindowProcA@16 JMP FINISH WMDESTROY: PUSH 0 ;MB_OK PUSH OFFSET CAP PUSH OFFSET MES2 PUSH DWORD PTR [EBP+08H] ;дескриптор окна CALL MessageBoxA@16 PUSH 0 CALL PostQuitMessage@4 ;сообщение WM_QUIT MOV EAX, 0 FINISH: POP EDI POP ESI POP EBX POP EBP RET 16 WNDPROC ENDP _TEXT ENDS END START
|
Так вот нужно чтобы он не мыш перехватывал а реагировал на ввод гласных латинских букв, и сигналом был не то что щас, а щелчок. |