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

Форум C++

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Хуки мыши

Сообщения:  [1-1] 

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



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

  Ответить  

Сообщения:  [1-1] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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