標籤:blog http 使用 2014 問題 cti
這是個老梗了,也沒什麼技術含量。因為自從接觸Linux之後,Windows上我所知道的那一點api基本上都忘光了。所以這樣的博文可以當做是備忘,說不定有天還能用的到。
Windows上想要擷取瀏覽器的地址欄資訊,基本思路是枚舉瀏覽器的子表單,然後擷取hwnd(handle of window),最後使用SendMessage & WM_GETTEXT(或者 GetWindowText大體上沒什麼區別)。好,基於這樣的事實,我們來做個簡單的實現。
1.擷取IE視窗
這個很簡單通過FindWindow就可以做到,前提是我們已經知道了IE8的ClassName(視窗的類名稱)是“IEFrame”。這樣的話,用FindWindow這樣的函數,就可以直接擷取。當然,如果你是像擷取Chrome這類瀏覽器,請先在Spy++中抓取視窗看看類名稱。
2.通過枚舉得到地址欄子表單
使用Spy++可以很輕鬆地得到IE8的子表單分布情況,請看:
下面兩個我就不列出來了(因為編輯這個太累了),我們需要擷取的是這樣一個路徑:IEFrame->WorkerW->RebarWindow32->Address Band Root->Edit。
到此為止基本上問題分析就已經結束了,直接上代碼吧(敘述真累人)。
3.代碼
Private Function GetIE8Url() As String Dim hwnd As Long ‘default 0, which eq top-hwnd. Dim lpsz1 Dim url As String * 2048 Dim length As Long For Each lpsz1 In Array("IEFrame", _ "WorkerW", _ "ReBarWindow32", _ "Address Band Root", _ "Edit") hwnd = FindWindowEx(hwnd, 0&, lpsz1, vbNullString) Next length = SendMessage(hwnd, WM_GETTEXT, 2048&, ByVal url) GetIE8Url = Left(url, length)End Function
如上所示,擷取IE8地址欄URL資訊的函數就實現了。我沒有寫函式宣告,和容錯處理,因為這樣的函數是在確定IE8在啟動並執行情況下執行的(當然你可以改寫)。