Форум: Форум C++Разное
Новые темы: 00
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хуки мыши
 
 автор: 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



И так и сяк эксперементировал, все равно значение не верное, не понятно в чем дело... ?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования