Salut,
Je développe le logiciel WinSplit Revolution (voir signature). Il se trouve que dans la dernière version, j'ai mis en place un hook pour détecter quand une fenêtre commence à être déplacée. Sur 32 bit tout fonctionne correctement, mais sur un xp ou vista 64 ça marche pas très bien.
Je mets en place un hook sur le CBT
Et dans la callback de détection je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 bool InstallCBTHook() { if(m_hookCBT) return true; m_hookCBT = SetWindowsHookEx(WH_CBT, MovingCBTProc, m_hDllInstance, 0); return m_hookCBT != NULL; }
Lorsqu'une fenêtre (n'appartenant pas à mon programme) commence à être déplacée je poste un message à mon application pour que le traitement commence. Lorsque que la fenêtre en question appartient à un processus 32bit ça fonctionne, en revanche lorsqu'elle appartient à un processus 64bit le callback ne semble pas être exécuté. J'ai testé directement à la place du postmessage un MessageBox, et il s'affichait uniquement quand je déplaçais une fenetre appartenant à un processus 32 bit. J'ai testé ce matin en compilant avec mingw sur une plateforme 64bit, ça ne marchait toujours pas. Est ce qu'il faut utiliser un compilo 64 sur la 64bit, ou est ce que c'est un problème de compatibilité que cro$oft n'a pas encore corrigé ou je ne sais pas?...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 LRESULT CALLBACK MovingCBTProc(int nCode,WPARAM wParam,LPARAM lParam) { if (nCode == HCBT_SYSCOMMAND) { if(wParam == SC_MOVE) { //*** Ici j'avertis ma fenetre qui va processer ce qu'il faut quand on drag une fenetre PostMessage(hwndWinSplitFrame,WSM_STARTMOVING,wParam,(LPARAM)NULL); } } if (nCode == HCBT_MOVESIZE) { PostMessage(hwndWinSplitFrame,WSM_STOPMOVING,wParam,(LPARAM)NULL); } return CallNextHookEx(m_hookCBT,nCode,wParam,lParam); }
Merci d'avance
Partager