/*static HINSTANCE hLib; static HHOOK hHook;*/HOOKPROC hProc = NULL; hLib = LoadLibrary("keyhook"); _ASSERTE(hLib); hProc = (HOOKPROC)GetProcAddress(hLib, "HookProcMouse"); _ASSERTE(hProc); hHook = SetWindowsHookEx(WH_MOUSE, hProc, hLib, NULL); _ASSERTE(hHook);
#include "stdafx.h"#include <atltypes.h>#include <fstream>#define __GLOBAL_HOOKextern "C" __declspec(dllexport) LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam) {// если сообщение не удалено из очереди(не особо заморачивайтесь по этому поводу) if (nCode != HC_ACTION ) return CallNextHookEx(NULL, nCode, wParam, lParam); // Если событие передвижения мыши if (wParam == WM_MOUSEMOVE) {// то получаем указатель на структуру MOUSEHOOKSTRUCT *tmp = (MOUSEHOOKSTRUCT*)lParam;// открываем файл для записи, записываем и закрываем(координаты x и y) std::ofstream out("c:/123", std::ios::app); out << xs << tmp->pt.x << tmp->pt.y << std::endl; out.close(); } else {// иначе если сообщение другого типа, создаём 321, пишем, закрываем std::ofstream out("c:/321", std::ios::app); char xs = wParam; out << xs << std::endl; out.close(); }// передаём следующему хуку по цепочке(не вашим хукам, а уже чужим) return CallNextHookEx(NULL, nCode, wParam, lParam); }
LIBRARY "dl"DESCRIPTION 'keyhook Windows Dynamic Link Library'EXPORTS ; Explicit exports can go hereHookProcMouse
hLib = LoadLibrary(L"libMouseAPI");
#include <QtCore/QCoreApplication>#include <windows.h>#include <assert.h>#include <cassert>#include <QLibrary>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QLibrary myLib("./libMouseAPI"); myLib.load(); myLib.loadHints(); if (!myLib.isLoaded()) exit(0); typedef LRESULT CALLBACK (*MyPrototype)(int, WPARAM, LPARAM); MyPrototype myFunction = (MyPrototype) myLib.resolve("HookProcMouse"); if (!myFunction) exit(0); static HHOOK hHook; hHook = SetWindowsHookEx(WH_MOUSE, myFunction, GetModuleHandle(NULL), NULL); assert(hHook); return a.exec();}
assert(hHook);
SetWindowsHookEx(WH_MOUSE, myFunction, GetModuleHandle(NULL), NULL);
#include <QtCore/QCoreApplication>#include <windows.h>#include <assert.h>#include <cassert>#include <QLibrary>#include <fstream>#include <QDebug>LRESULT CALLBACK HookProcMouse(int nCode, WPARAM wParam, LPARAM lParam){// если сообщение не удалено из очереди(не особо заморачивайтесь по этому поводу) if (nCode != HC_ACTION ) return CallNextHookEx(NULL, nCode, wParam, lParam);// Если событие передвижения мыши if (wParam == WM_MOUSEMOVE) {// то получаем указатель на структуру MOUSEHOOKSTRUCT *tmp = (MOUSEHOOKSTRUCT*)lParam;// открываем файл для записи, записываем и закрываем(координаты x и y) char xs = wParam; std::ofstream out("c:/123", std::ios::app); out << xs << tmp->pt.x << tmp->pt.y << std::endl; out.close(); int x = tmp->pt.x; // извлекаем младший байт, это и есть координата х мыши int y = tmp->pt.y; // извлекаем старший байт, это и есть координата у мыши qDebug()<<x << y; } else {// иначе если сообщение другого типа, создаём 321, пишем, закрываем std::ofstream out("c:/321", std::ios::app); char xs = wParam; out << xs << std::endl; out.close(); }// передаём следующему хуку по цепочке(не вашим хукам, а уже чужим) return CallNextHookEx(NULL, nCode, wParam, lParam);}int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); /* QLibrary myLib("./libMouseAPI"); myLib.load(); myLib.loadHints(); if (!myLib.isLoaded()) exit(0); typedef LRESULT CALLBACK (*MyPrototype)(int, WPARAM, LPARAM); MyPrototype myFunction = (MyPrototype) myLib.resolve("HookProcMouse"); if (!myFunction) exit(0);*/ static HHOOK hHook; hHook = SetWindowsHookEx(WH_MOUSE_LL, HookProcMouse, GetModuleHandle(NULL), NULL); assert(hHook); return a.exec();}