Hook WH_MOUSE_LL

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
1
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
16 avril 2007
-
Bonjour,

J'utilise un hook bas niveau de type WH_MOUSE_LL, et j'ai un problème lorque je cherche a fermer ma fenêtre principale (la souris se bloque). Le petit programme qui suit met en évidence ce problème.
Une idée? Merci

#define _WIN32_WINNT 0x0501

#define _WIN32_IE 0x0501

#include<windows.h>

#include<tchar.h>

 

HINSTANCE hinst;

HWND hmain;

TCHAR szappname[] = _T("ACHANGER");

HHOOK hHook;

 

 

LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM
lParam)

{

  switch(mssg)
{

    case
WM_DESTROY:

      PostQuitMessage(0);

      return
0;

  }

  return
DefWindowProc(hwnd, mssg, wParam, lParam);

}

 

DWORD __stdcall InitInstance()

{

  WNDCLASSEX     wndcls;

  memset(&wndcls, 0, sizeof(WNDCLASSEX));

  wndcls.cbSize = sizeof(WNDCLASSEX);

  wndcls.lpfnWndProc   = AppWndProc;

  wndcls.style         = CS_HREDRAW | CS_VREDRAW;

  wndcls.hInstance     = hinst;

  wndcls.lpszClassName =
szappname;

  wndcls.hbrBackground = (HBRUSH)
GetStockObject(WHITE_BRUSH);

  wndcls.hCursor       = LoadCursor(0, IDC_ARROW);

  if(!RegisterClassEx(&wndcls))
return 0;

  hmain = CreateWindowEx(0,
szappname, szappname, WS_OVERLAPPED | WS_VISIBLE | WS_SYSMENU,

    CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,

    0, 0, hinst, 0);

  return
(hmain != 0);

}

 

LRESULT CALLBACK MouseProc(int nCode,
WPARAM wParam, LPARAM lParam)

{

  return
CallNextHookEx(hHook, nCode, wParam, lParam);

}

 

int WINAPI WinMain(HINSTANCE
hInstance, HINSTANCE x, PSTR y, int z)

{

  MSG msg;

  hinst = hInstance;

  hHook =
SetWindowsHookEx(WH_MOUSE_LL, MouseProc, hInstance, NULL);

  if(!InitInstance())
return 0;

  ShowWindow(hmain, SW_NORMAL);

  while(GetMessage(&msg,
NULL, 0, 0)) {

    TranslateMessage(&msg);

    DispatchMessage(&msg);

  }

  return 0;

}

_____________________________________
Un éditeur de ressources gratuit pour Windows

9 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je viens de tester ton code. Aucun problème. La fenêtre se ferme normalement.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Je confirme le bloquage chez moi, c'est bizarre

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Chez moi aussi ça marche (XP SP2)
au passage, Microsoft recommande de pas faire while(GetMessage(&msg, NULL, 0, 0)) à cause des éventuelles erreurs (retourne -1), mais bon...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Je viens de remarquer que quand le thème Windows XP est désactivé je ne rencontre pas le problème.

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Chez moi ça marche avec les thèmes  Windows XP et Windows classique.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Tu ne supprime pas le hook avec UnhookWindowsHookEx ?

C++ (@++)<!--
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Non, mais de toutes facons le blocage intervient avant que je ne ferme la fenêtre (c'est quand j'appuie sur le bouton de la souris que ca se bloque, pas quand je le relache)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Bizarre, car ça fonctionne aussi très bien pour moi.

C++ (@++)<!--
Messages postés
1
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
16 avril 2007

Au passage, tu as oublié de faire un Unhook à la fin de ton programme... Je sais pas si ca vient de là ou pas...

Woods