Здравствуйте! Есть код на MASM, пример из туториалов Iczelionа (УРОК 24). Решил перевести на FASM. Трудности вызывает вот это: Код (Text): mov edx,lParam assume edx:PTR MOUSEHOOKSTRUCT invoke WindowFromPoint,[edx].pt.x,[edx].pt.y invoke PostMessage,hWnd,WM_MOUSEHOOK,eax,0 assume edx:nothing мой перевод: Код (Text): macro assign reg, struct { virtual at reg .#reg struct end virtual } mov edx,[lParam] assign edx,MOUSEHOOKSTRUCT invoke WindowFromPoint,dword[.edx.pt.x],dword[.edx.pt.y] invoke PostMessage,[hWnd],WM_MOUSEHOOK,eax,0 Что тут не правильно?
Выкладываю весь код библиотеки, так как проблемма именно в ней: Код (Text): format pe gui 4.0 dll entry DllEntryPoint include 'win32ax.inc' macro assign reg, struct { virtual at reg .#reg struct end virtual } WM_MOUSEHOOK equ WM_USER+6 section '.bss' readable writable hInstance dd ? hHook dd ? hWnd dd ? section '.code' code readable executable proc DllEntryPoint hinstDLL,fdwReason,lpvReserved .if [fdwReason]=DLL_PROCESS_ATTACH push [hinstDLL] pop [hInstance] .endif mov eax,TRUE ret endp proc SoobshenieHook nCode:DWORD,wParam:DWORD,lParam:DWORD invoke CallNextHookEx,[hHook],[nCode],[wParam],[lParam] .if [nCode]=HC_ACTION mov edx,[lParam] assign edx,MOUSEHOOKSTRUCT invoke WindowFromPoint,[.edx.pt.x],[.edx.pt.y] invoke PostMessage,[hWnd],WM_MOUSEHOOK,eax,0 .endif xor eax,eax ret endp proc InstallHook hwnd:DWORD push [hwnd] pop [hWnd] invoke SetWindowsHookEx,WH_MOUSE,addr SoobshenieHook,[hInstance],NULL mov [hHook],eax ret endp proc UninstallHook invoke UnhookWindowsHookEx,[hHook] ret endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL' include 'F:\fasm\INCLUDE\api\kernel32.inc' include 'F:\fasm\INCLUDE\api\user32.inc' section '.edata' export data readable export 'hook.dll',\ InstallHook, 'InstallHook',\ UninstallHook, 'UninstallHook' section '.reloc' fixups data discardable Все дело в том, что хук как бы получается локальным, в чем причина?
А где определена структура MOUSEHOOKSTRUCT ? Код (Text): struct MOUSEHOOKSTRUCT pt POINT <> hwnd dd ? wHitTestCode dd ? dwExtraInfo dd ? ends у меня в инклудах фасма её нет. в вашем исходнике тоже, вот и ругается.
dinoweb У меня тоже не было, я ее объявил в USER32.INC там же где и объявлена структура POINT. Компилится все нормально!
pashe4ka13, есть готовый уже перевод, http://paste.org.ru/?77qfwo или http://fasm.su/Iczelion/24-Windows-Hooks где ошибка в вашем - я хз, не знаю Фасм, к сожалению.
Ezrah Спасибо Вам, а так же всем принимавшим участие. Я читал, что секция должна быть общая, что бы изменения в ней были видны из всех процессов, но примера ее объявления так и не нашел. Еще меня сбило с толку, что под Олей все работало, а так же то, что если в invoke WindowFromPoint,[.edx.pt.x],[.edx.pt.y] я менял местами x c y, то пример хоть и некорректно, но работал, поэтому я и подумал, что ошибка где то в этом коде. Еще раз всем спасибо!