Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: trix (15.03.2010 в 03:18) Такая проблема, пытаюсь написать хук для мыши, вроде событие отлавливается, библиотека отлично подключается, но функция которая должна возвращать указатель на структуру MOUSEHOOKSTRUCT, возвращает структуру вверх ногами, координаты мыши почему-то лежат в параметрах wHitTestCode и dwExtraInfo, а в x,y лежит int значение, похожее на указатель, код dll выглядит так
//mhook.h #include <windows.h> #include <iostream> #pragma data_seg("SHARDATA") DWORD g_dwThreadIdDIPS = 0; static WPARAM g_wParam = NULL; static LPARAM g_lParam = NULL; static MOUSEHOOKSTRUCT *mmh; #pragma data_seg() extern "C" _declspec(dllexport) LRESULT CALLBACK LowLevelMouseProc(int , WPARAM , LPARAM ); extern "C" _declspec(dllexport) LPARAM KC(LPARAM lp); //mhook.cpp #include "mydll2.h" #pragma comment(linker, "/section:SHARDATA,rws") #ifdef _MANAGED #pragma managed(push, off) #endif HINSTANCE g_hinstDll = NULL; HHOOK g_hhook = NULL; static void Init() { g_hhook = SetWindowsHookEx( WH_MOUSE_LL, (HOOKPROC)LowLevelMouseProc, (HINSTANCE)g_hinstDll, 0 ); } static void Cleanup() { if( g_hhook != NULL ) UnhookWindowsHookEx( g_hhook ); g_hhook = NULL; } BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad) { switch (fdwReason) { case DLL_PROCESS_ATTACH: // DLL is attaching to the address space of the current process. g_hinstDll = hinstDll; Init(); break; case DLL_PROCESS_DETACH: Cleanup(); return TRUE; } return(TRUE); } extern "C" _declspec(dllexport) LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode < 0) // do not process message return CallNextHookEx(g_hhook, nCode, wParam, lParam); mmh = reinterpret_cast<MOUSEHOOKSTRUCT *>(lParam); //int n = mh->pt.x; g_wParam = wParam; g_lParam = lParam; if(wParam = WM_MOUSEMOVE) { int yy=0; } return CallNextHookEx(g_hhook, nCode, wParam, lParam); } extern "C" _declspec(dllexport) LPARAM KC(LPARAM lp) { if(g_wParam != NULL && g_lParam != NULL) { lp = g_lParam ; MOUSEHOOKSTRUCT *tmh = mmh; MOUSEHOOKSTRUCT *mh = (MOUSEHOOKSTRUCT *) g_lParam; int n = mh->pt.x; g_wParam = NULL; g_lParam = NULL; return lp; } return 0; } #ifdef _MANAGED #pragma managed(pop) #endif
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: