NativeWindow是.net Framework提供的一個底層的類。微軟官方的解釋為:NativeWindow Provides a low-level encapsulation of a window handle and a window procedure.說道這些也相當於沒有說,因為NativeWindow到底是幹什麼的也沒有說清楚,意思就是一個低層級的對表單控制代碼和表單過程的一個封裝。後來查詢了很多的資料才明白了其中的意義。
資料來源:
http://www.diybl.com/course/4_webprogram/asp.net/netjs/2007921/72804.html
這個講解的是《利用NativeWindow監視WndProc訊息》,這篇內容比較長,而且頁數比較多,經過自己努力和耐心,終於完成了其中的例子,代碼為:/Files/zhjp11/皮膚/NativeWindowApplication.rar
http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx
這篇來自CodeProject,老外寫的代碼就是比較有水平。將Windows 的OpenFileDialog子類化,顯示成了自訂的OpenFileDialog,而且添加了很多的事件。相當的佩服。
經過這兩篇的細心閱讀,終於瞭解了NativeWindow的作用,NativeWindow就是提供了底層的封裝,提供了AssignHandle和RealeseHandle這兩個方法,主要就是對註冊了表單控制代碼的表單進行Hook,將表單的事件經過自己處理後交給Windows處理。使用Refector.net查看了NativeWindow中AssignHandle這個方法,也驗證了我這個說法。在AssignHandle中有這樣一段代碼:
userDefWindowProc = UnsafeNativeMethods.GetProcAddress(new HandleRef(null,UnsafeNativeMethods.GetModuleHandle("user32.dll")), lpProcName);
對Win32開發的也許都知道這段代碼的意義,他也是Hook的一種。不過是更加進階的Hook方式。這裡就不在細說,我們現在只要知道他可以對我們進行註冊的表單進行Hook,可以將自己的代碼載入到我們想要的位置就可以了。
然後我就使用NativeWindow擷取所有的表單的所有事件,然後輸出Hook到的時間,結果圖如下:
下載代碼如下:/Files/zhjp11/皮膚/SkinEngines20100319.rar