Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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]

Сообщение:

Прикрепить: