|
|
|
| Такая проблема, пытаюсь написать хук для мыши, вроде событие отлавливается, библиотека отлично подключается, но функция которая должна возвращать указатель на структуру 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
|
И так и сяк эксперементировал, все равно значение не верное, не понятно в чем дело... ? | |
|
|