新增了4個Low Level Hook:Mouse_LL,Keyboard_LL, JournalRecord,JournalPlayback。由于是Low Level Hook,因此Hook是不依賴于dll,所以可以直接將HookProc在Java程序中編寫。這四個鉤子都是全局的,而且都很有用處。Mouse_LL,Keyboard_LL,自不必說,用來監(jiān)聽鼠標(biāo)和鍵盤的。Journal的2個Hook則是所謂的日志鉤子,WH_JOURNALPLAYBACK Hook使應(yīng)用程序可以插入消息到系統(tǒng)消息隊(duì)列。可以使用這個Hook回放通過使用WH_JOURNALRECORD Hook記錄下來的連續(xù)的鼠標(biāo)和鍵盤事件。只要WH_JOURNALPLAYBACK Hook已經(jīng)安裝,正常的鼠標(biāo)和鍵盤事件就是無效的。WH_JOURNALPLAYBACK Hook是全局Hook,它不能象線程特定Hook一樣使用。WH_JOURNALPLAYBACK Hook返回超時值,這個值告訴系統(tǒng)在處理來自回放Hook當(dāng)前消息之前需要等待多長時間(毫秒)。這就使Hook可以控制實(shí)時事件的回放。
基本上現(xiàn)在用SWT-Extension來實(shí)現(xiàn)這四個Hook還是很容易的,做了一下簡單的數(shù)據(jù)封裝和事件封裝,而且加入了結(jié)合體對象和JNI的handle互相轉(zhuǎn)換的函數(shù)。用來做C++的一些事情還是比較得心應(yīng)手的。最新版本的Example提供了一個簡單的系統(tǒng)Record/Playback例子,可以記錄和回放系統(tǒng)事件。
最新的build已經(jīng)發(fā)布到 http://feeling.sourceforge.net 上了,有興趣的可以下載看看,并且可以作為Eclipse插件使用,支持 eclipse 3.2 以上版本。
PS: Journal的2個Hook Vista已經(jīng)停止支持了,所以這個例子在Vista 下是看不到的:-(