Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Хуки мыши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ GUI-программирование. Какая библиотека лучше? http://www.cyberforum.ru/cpp/thread104637.html
Здравствуйте! Я знаю "консольный" C++, теперь хочется освоить какую-нибудь библиотеку или технологию визуального программирования. Подскажите, кто знает, что лучше выбрать и что сейчас востребовано?...
C++ Нужен совет с Canvas Доброго времени суток, Нужен совет, через чего сделать следующее Дано: картинка с нарисованными объектами разной формы Необходимо: при нажатии на какой либо объект его выделить на самой картинке..... http://www.cyberforum.ru/cpp/thread104580.html
Mac OS Timers C++
Доброго времени суток. Есть ли какие-то средства(чистый С) для работы с таймерами под Мак(аналоги timer_create или SetTimer, возможно, мультимедийные таймеры)? Или все же придется писать...
Ring0 C++
Кто-нибудь задавался вопросом работы с уровнем доступа ядра. Я так понял в windows есть 3 режима обработки приложений! и Ring0 имеет самые высокие привилегии. Если кто-то имеет опыт в этой области,...
C++ Создание крутящегося каркасного куба http://www.cyberforum.ru/cpp/thread102841.html
Что требуется: Выполнить кручение куба в виде каркаса по оси Z. Язык выполнения - любой, единственное ограничение - не использовать OpenGL
C++ Видео с монитора на удаленный монитор Сломался монитор у домашнего компа и хочу написать маленькую прогу для трансфера видео с этого бедняги на ноут под MacOS Сначала хотел определять RGB каждого пикселя и слать его по TCP, однако... подробнее

Показать сообщение отдельно
softrix
0 / 0 / 0
Регистрация: 05.04.2008
Сообщений: 48

Хуки мыши - C++

15.03.2010, 15:59. Просмотров 918. Ответов 0
Метки (Все метки)

Такая проблема, пытаюсь написать хук для мыши, вроде событие отлавливается, библиотека отлично подключается, но функция которая должна возвращать указатель на структуру MOUSEHOOKSTRUCT, возвращает структуру вверх ногами, координаты мыши почему-то лежат в параметрах wHitTestCode и dwExtraInfo, а в x,y лежит int значение, похожее на указатель, код dll выглядит так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//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
И так и сяк эксперементировал, все равно значение не верное, не понятно в чем дело... ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru