Bonjour,

J'essaye d'utiliser JNA (java native access) pour écrire un hook comme en C pour pouvoir détecter l'ouverture , la fermeture, déplacement ... des fenêtres en passant par les lib User32.

J'ai écrit ce bout de code mais le hook semble inefficace:
la méthode callback n'est jamais appelée, alors que je triture bien mes fenêtres;

j'utilise la version 3.3 de jna avec en supplément le jar plateform.jar
que j'ai téléchargé à cette adresse http://java.net/projects/jna/downloads/directory/3.3.0

ci dessous mon petit code de test
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef.LPARAM;
import com.sun.jna.platform.win32.WinDef.LRESULT;
import com.sun.jna.platform.win32.WinDef.WPARAM;
import com.sun.jna.platform.win32.WinUser.HHOOK;
import com.sun.jna.platform.win32.WinUser.HOOKPROC;
 
public class Main {
 
	public interface CBTProc extends HOOKPROC
	{
	    LRESULT callback(int nCode, WPARAM wParam, LPARAM lParam);
	}
 
	private static HHOOK hhk=null;
 
	/**
         * @param args
         */
	public static void main(String[] args) {
 
 
		CBTProc windowHOOK = new CBTProc() {
 
			@Override
			public LRESULT callback(int nCode, WPARAM wParam, LPARAM lParam) {
 
				System.out
						.println("callback()"+nCode);
				return User32.INSTANCE.CallNextHookEx(hhk, nCode, wParam, lParam);
			}
		};
		// 5 = WH_CBT
		hhk = User32.INSTANCE.SetWindowsHookEx(5, windowHOOK,Kernel32.INSTANCE.GetModuleHandle(null),0);
		System.out.println("hook installé");
 
		while (true) {
			try {
 
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		}
	}
}
J'ai fouillé la doc MSDN, mais sans rein trouver (quand on vient du monde java on est un peu perdu au début ).
si quelqu'un peu m'aider ça serai cool parce que la je sèche.

Merci d'avance.