利用ENumWindow取得瀏覽器網址的範例

首先準備Form1, List1, Command1, Text1
再準備一個Module1

Form1的程式碼:

Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Sub Command1_Click()
CallBackDemo
End Sub

Private Sub List1_Click()
On Error Resume Next
Dim W As String
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
SetForegroundWindow Val(Left(List1.List(List1.ListIndex), 12))
ShowWindow Val(Left(List1.List(List1.ListIndex), 12)), 3

DoEvents
keybd_event vbKeyMenu, &H0, &H0, &H0
keybd_event vbKeyD, &H0, &H0, &H0
keybd_event vbKeyD, &H0, &H2, &H0
keybd_event vbKeyMenu, &H0, &H2, &H0
DoEvents
keybd_event vbKeyControl, &H0, &H0, &H0
keybd_event vbKeyC, &H0, &H0, &H0
keybd_event vbKeyC, &H0, &H2, &H0
keybd_event vbKeyControl, &H0, &H2, &H0
DoEvents
W = ""
W = Clipboard.GetText
If LCase(Left(W, 7)) = "http://" Then
Text1.Text = W
Else
Text1.Text = "沒有網址或不正確的網址"
End If
SetForegroundWindow Me.hwnd
SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 3
End Sub

Module1的程式碼:

Option Explicit

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Any) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public EWin As String

Private Function CallBackFunction(ByVal hwnd As Long) As Long
Dim ShWnd As String * 12
ShWnd = Str(hwnd)
If IsWindowVisible(hwnd) Then
If InStr(GetTitle(hwnd), "Microsoft Internet Explorer") < > 0 Or InStr(GetTitle(hwnd), "Netscape") < > 0 Then
Form1.List1.AddItem ShWnd & GetTitle(hwnd)
End If
End If
CallBackFunction = True
End Function

Public Sub CallBackDemo()
Form1.List1.Clear
EnumWindows AddressOf CallBackFunction, 0&
End Sub

Public Function GetTitle(hwnd As Long) As String
Dim Title As String * 255
Dim TitleLength As Long
TitleLength = GetWindowText(hwnd, Title, 255)
GetTitle = Left(Title, TitleLength)
End Function

用法:

  1. 首先開幾個瀏覽器,網址最好不一樣~
  2. 開了程式後按Command1, 會出現執行中的瀏覽器的名稱。
  3. 按List1中的其中一個
  4. 看看Text1, 它就是該瀏覽器的網址了。

注意:德本立沒有Netscape, 因此可能測不到Netscape的網址~

範例可到VB範例單元中API範例項目下載。


上一頁