Не могу разобраться,как поставить хук ,который бы перехватывал сообщения мыши для всего экрана.
Делаю так:создаю 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
Вот я и не понимаю,как длл-ьку связать со всеми окнами или процессами.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.