Bonjour,

Je voudrais écrire un petit programme Java qui permet de recevoir les évènements lock/unlock d'une session windows.

Tout d'abord je crée une fenêtre windows :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
Canvas win = new Canvas();
Window window = new Window(null);
window.add(win);
window.setVisible(true);
win.setVisible(true);
Après, je récupère un objet HWND depuis cette fenêtre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
HWND hwnd = new HWND();
hwnd.setPointer(Native.getComponentPointer(win));
Pour s'enregistrer au prés du système afin de recevoir les évènnements j'utilise l'API Windows Wts32Api.dll et ça méthode WTSRegisterSessionNotification :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
DWORD flag = new DWORD(0); // j'ai même essayer avec la valeur 1 "NOTIFY_FOR_ALL_SESSION"
Wts32Api lib = Wts32Api.INSTANCE;
boolean response = lib.WTSRegisterSessionNotification(hwnd, flag);
Enfin, j'appel la fonction GetMessage comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
User32 user32 = MyUser32.INSTANCE;
MSG msg = new MSG();
while (user32.GetMessage(msg, hwnd, 0, 0) != 0) {
	//user32.TranslateMessage(msg);
	//user32.DispatchMessage(msg);
	System.out.println("got a message");
}
Le problème que la méthode GetMessage reçoit pas les événements.

A mon avis les méthode WTSRegisterSessionNotification et GetMessage ne sont pas exécuter dans le même process/thread, d'où GetMessage ne reçoivent pas les événements

Des suggestions

Merci pour vos réponses.