Quel est le meilleur moyen de détecter le déplacement/déplacement de fenêtre d'autres processus? Sous Windows7 64 bits
Je suis actuellement en train d'étudier les Hooks Globaux à partir d'une DLL en utilisant C++ & C#. C'est pénible car ça ne fonctionne pas correctement. J'ai eu un certain succès avec les hooks clavier et souris, mais pour les messages de fenêtre, je n'ai aucune idée de ce qui ne va pas.
Voici le code dans mon fichier .dll
#include
#include
#include
HINSTANCE hinst;
#pragma data_seg(".shared")
HHOOK hhk;
WNDPROC realProc;
#pragma data_seg()
//#pragma comment(linker, "/SECTION:.shared,RWS") erreur de compilation dans VC++ 2008 express
LRESULT CALLBACK wireKeyboardProc(int code, WPARAM wParam,LPARAM lParam) {
//ouvre le flux de sortie standard pour l'écriture
freopen("CONOUT$","w+t", stdout);
printf("code:%d wparam:%d lparam:%d\n", code, wParam, lParam);
/*
if (code < 0) {
return CallNextHookEx(0, code, wParam, lParam);
}
*/
//Beep(1000, 20);
return CallNextHookEx(hhk, code, wParam, lParam);
}
LRESULT CALLBACK hookProc(HWND h, UINT msg, WPARAM wp, LPARAM lp)
{
//ouvre le flux de sortie standard pour l'écriture
freopen("CONOUT$","w+t", stdout);
printf("h:%d msg:%d wp:%d lp:%d\n", h, msg, wp, lp);
return CallWindowProc(realProc, h, msg, wp, lp);
}
extern "C" __declspec(dllexport) void install(unsigned long threadId, HWND hwnd) {
//ouvre le flux de sortie standard pour l'écriture
freopen("CONOUT$","w+t", stdout);
//fonctionne pour WH_KEYBOARD WH_MOUSE mais ne fonctionne pas pour WH_CALLWNDPROC
hhk = SetWindowsHookEx(WH_CALLWNDPROC, wireKeyboardProc, hinst, threadId);
printf("threadId: %d xxx: %d\n", threadId, hhk);
/*
//ne sais pas ce qui ne va pas, la valeur de retour de realProc est 0
realProc = (WNDPROC)SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG_PTR)hookProc);
printf("hwnd: %d xxx: %d\n", hwnd, realProc);
*/
}
extern "C" __declspec(dllexport) void uninstall() {
UnhookWindowsHookEx(hhk);
}
BOOL WINAPI DllMain(__in HINSTANCE hinstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved) {
hinst = hinstDLL;
return TRUE;
}
J'envisageais de créer mon propre Aero Snap. C'est juste pour le plaisir.
Meri pour toute aide.