Здравствуйте люди добрые ! Вообще-то я пишу на С++ , но тут что-то захотел попробовать на asm, решить вот такую задачку... Мне нужно отслеживать нажатия клавиш WIN или VK_LMENU И VK_RMENU как они определены у меня в Windows.inc. Решил поставить хук "по клаве" если так можно выразиться. Решил в качестве базы взять соответствующий урок Экзельциона, хук процедуру вынес в DLL, хук процедура которой и должна была отслеживать нажатия соответствующей клавиши. Когда пользователь нажимает клавишу WIN выбрасывается MessageBox с текстом "Клавиша WIN нажата" если нажата и наоборот если не нажата. вот собственно код : Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\user32.inc includelib \masm32\lib\user32.lib .data hInstance dd 0 Text db "Нажата клавиша WIN ...",0 HelloMsg db "Это KeyBrdHook.dll",0 Text1 db "Клавиша WIN отпущена ...",0 HelloMsg1 db "Это KeyBrdHook.dll",0 .data? hHook dd ? .code DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD push hInst pop hInstance mov eax,TRUE ret DllEntry Endp KeyProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD invoke CallNextHookEx,hHook,nCode,wParam,lParam mov edx,lParam invoke GetKeyState, wParam .if eax==1 invoke MessageBox, NULL, addr Text, addr HelloMsg, MB_OK .else invoke MessageBox, NULL, addr Text1, addr HelloMsg1, MB_OK .endif xor eax,eax ret MouseProc endp InstallHook proc invoke SetWindowsHookEx,WH_KEYBOARD,addr KeyProc,hInstance,NULL mov hHook,eax ret InstallHook endp UninstallHook proc invoke UnhookWindowsHookEx,hHook ret UninstallHook endp End DllEntry А беда в том что сообщения вызываются для всех кнопок а мне нужно чтобы только для WIN ну хотя бы для одной например. В чем и где я неправ ? Пожалуста если не трудно привидите код рабочий, буду весьма признателен =) И еще есть вот такой косяк : при объявлении функции Код (Text): wsprintfA PROTO C :DWORD,:VARARG wsprintf equ <wsprintfA> компилятор ругается =( Код (Text): error A2111: conflicting parameter definition fatal error A1016: Internal Assembler Error а эта функция мне нужна, что делать ? Подскажите кто знает.
wsprintfA PROTO C WORD,:VARARG wsprintf equ <wsprintfA> убери и перестанет ругаться компилятор + где проверки что за клавиша нажата?