display.setData(CALLBACK, callback);
display.setData(HHOOKMSG, new MSG());
private static void initMsgHook(Display display) {	if (display.getData(HHOOK) != null) return;	final Callback callback = new Callback(OleFrame.class, "getMsgProc", 3);	int address = callback.getAddress();	int threadId = OS.GetCurrentThreadId();	final int hHook = OS.SetWindowsHookEx(OS.WH_GETMESSAGE, address, 0, threadId);	if (hHook == 0) {		callback.dispose();		return;	}	display.setData(HHOOK, new Integer(hHook));	display.setData(CALLBACK, callback);	display.disposeExec(new Runnable() {		public void run() {			if (hHook != 0) OS.UnhookWindowsHookEx(hHook);			if (callback != null) callback.dispose();		}	});}