Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перехвать нажатия клавиш 
:(
    Опции темы
ffldove
Дата 27.12.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.5.2006

Репутация: нет
Всего: нет



Очень прошу помочь
Есть прога из какой то книги 
Код

.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


Так вот нужно чтобы он не мыш перехватывал а реагировал на ввод гласных латинских букв, и сигналом был не то что щас, а щелчок.

Это сообщение отредактировал(а) ffldove - 27.12.2008, 15:07
PM MAIL   Вверх
Mikl_
Дата 29.12.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 8
Всего: 14



Цитата(ffldove)
и сигналом был не то что щас, а щелчок
ffldove грамматей! -- Щас вирнус (Пятачок)
Ставишь задачу, а сам-то представляешь как ее решить? И сигналом был не то что щас - Щас это по-твоему левый клик мыши, правый клик закрывает окно. А щелчок -- щелчек чего обо что? Сессия, блин, прижало вас  smile 

Это сообщение отредактировал(а) Mikl_ - 29.12.2008, 10:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1105 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.