Проблема с хуками.

программирование C++ VisualC++

Не могу разобраться,как поставить хук ,который бы перехватывал сообщения мыши для всего экрана.
Делаю так:создаю dll с хуком.Создаю приложение,которое устанавливает хук.Всё работает,но только когда курсор мыши в пределах окна приложения.
Обработка сообщений описана в dll.Хук устанавливается для всех потоков.
Где я туплю?

Примечание:
Пророк Мохамед,так поставить хук для экрана?

http://alamor.kvintone.ru/joker/flash/dead_comp.gif

Примечание:
Quark.Fusion
Я не спрашивал,где почитать MSDN.Я перечитал уже кучу статей.Но все они заканчиваются как правило описанием клавиатурного шпиона или чем-то подобным.А вот как установить хук,отлавливающий сообщения мыши со всего экрана не найду.Может плохо искал.Вот и задал вопрос.

Примечание:
spineless

Вот код Dll

HINSTANCE hInst;
HHOOK hook;
HWND hwnd;
HDC hdc;
RECT rect;
MOUSEHOOKSTRUCT *pms;
wchar_t str[20];


BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{

hInst = (HINSTANCE)hModule;
return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

extern "C" __declspec(dllexport) LRESULT CALLBACK MouseProc( int code, WPARAM wParam,LPARAM lParam){
pms=(MOUSEHOOKSTRUCT *)lParam;
swprintf(str,L"x=%d y=%d",pms->pt.x,pms->pt.y);
DrawText(hdc,str,20,&rect,0);
return CallNextHookEx(hook,code,wParam,lParam);
}

extern "C" __declspec(dllexport) void SetHook(){

hwnd=GetDesktopWindow();
hdc=GetDC(hwnd);
GetClientRect(hwnd,&rect);
hook = SetWindowsHookEx(WH_MOUSE,MouseProc,hInst,0);
}

extern "C" __declspec(dllexport) void UnHook(){
UnhookWindowsHookEx(hook);
}

Далее создаю приложение ,которое устанавливает хук

h=LoadLibrary(L"hookDll");
GetProcAddress(h,"SetHook")();
Работает только когда курсор мыши находится в пределах окна этого приложения.

Примечание:
mikityak

Всё остальное-стандартно созданое окно в MS VS2005(Win32Project).моих только 2 строки
h=LoadLibrary(L"hookDll");
GetProcAddress(h,"SetHook")();
которые устанавливают хук.Исполнимая часть находится в dll,код которой в Дополнении #3.
Может в моём случае нужно использовать не WH_MOUSE?

Примечание:
spineless

Вот я и не понимаю,как длл-ьку связать со всеми окнами или процессами.
Ответы:
Читайте документацию и определите разницу между thread и system
а как делаешь то?
погодите-ка уважаемый... вы писали в 1-м посте:
"Обработка сообщений описана в dll.Хук устанавливается для всех потоков.
Где я туплю?"


16 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.