Avatar billede nythjem Nybegynder
27. august 2006 - 15:23 Der er 14 kommentarer og
1 løsning

Finde nuværende url i Mozilla Firefox ?

Hej alle!

Til en applikation jeg skal lave skal jeg finde ud af hvilken url den aktive browser viser lige nu.

Jeg har fundet understående script, der finder det hos IE og Netscape, men det er jo mere relevant at finde det hos eks. Firefox end Netscape.

Jeg har selvfølgelig forsøgt at udskifte " - Internet Explorer" med Mozilla Firefox, men det lille trick virker desværre ikke.

Er der nogle har en god ressource til hvordan jeg kan løse problemet eller evt. løse det i denne kode?

På forhånd tak.


'******************************************************
' Module code:
'******************************************************

Option Explicit
Public Type ProcData
    AppHwnd As Long
    title As String
    Placement As String
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE

Private Const GW_CHILD = 5
Private Const GW_HWNDNEXT = 2
Private Const GW_HWNDFIRST = 0

' ***********************************************
' If this window is of the Edit class, return
' its contents. Otherwise search its children
' for an Edit object.
' ***********************************************

Public Function EditInfo(window_hwnd As Long) As String
Dim txt As String
Dim buf As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer

    ' Get the class name.
    buflen = 256
    buf = Space$(buflen - 1)
    buflen = GetClassName(window_hwnd, buf, buflen)
    buf = Left$(buf, buflen)
   
    ' See if we found an Edit object.
    If buf = "Edit" Then
        EditInfo = WindowText(window_hwnd)
        Exit Function
    End If
   
    ' It's not an Edit object. Search the children.
    ' Make a list of the child windows.
    num_children = 0
    child_hwnd = GetWindow(window_hwnd, GW_CHILD)
    Do While child_hwnd <> 0
        num_children = num_children + 1
        ReDim Preserve children(1 To num_children)
        children(num_children) = child_hwnd     
        child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
    Loop
   
    ' Get information on the child windows.
    For i = 1 To num_children
        txt = EditInfo(children(i))
        If txt <> "" Then Exit For
    Next i

    EditInfo = txt
End Function

' ************************************************
' Return the text associated with the window.
' ************************************************

Public Function WindowText(window_hwnd As Long) As String
Dim txtlen As Long
Dim txt As String

    WindowText = ""
    If window_hwnd = 0 Then Exit Function
   
    txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
    If txtlen = 0 Then Exit Function
   
    txtlen = txtlen + 1
    txt = Space$(txtlen)
    txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
    WindowText = Left$(txt, txtlen)
End Function


Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean
Dim buf As String * 1024
Dim title As String
Dim length As Long

    ' Get the window's title.
    length = GetWindowText(app_hwnd, buf, Len(buf))
    title = Left$(buf, length)

    ' this exaple will search for Internet Explorer URL. To search for Netscape URL
    ' replace  " - Microsoft Internet Explorer" with " - Netscape".
    If Right$(title, 30) = " - Microsoft Internet Explorer" Then
        ' This is it. Find the ComboBox information.
        Form1.Label1 = EditInfo(app_hwnd)

        ' Stop searching.
        EnumProc = 0
    Else
        ' Continue searching til find it.
        EnumProc = 1
    End If
End Function

'******************************************************
' Form code:
'******************************************************

Private Sub Command1_Click()
    Label1.Caption = ""
    EnumWindows AddressOf EnumProc, 0
End Sub
Avatar billede sjh Nybegynder
28. august 2006 - 08:33 #1
Det tror jeg godt du kan glemme.. det er en sikkerhed i Mozilla Firefox så man ikke kan bruge et spyware program til at hente oplysninger om dig.
Avatar billede nythjem Nybegynder
28. august 2006 - 09:57 #2
Hej Steffen.

Tak for svaret. Jeg undrer mig dog lidt, med GetWindowInfo er det jo ikke noget problem:

'Firefox','WWW_GetWindowInfo'

Så der må jo være en løsning :)
Avatar billede mcgoat Nybegynder
28. august 2006 - 10:08 #3
Firefox: her er HELE siden opbygget i class "MozillaWindowClass" incl den "edit" hvor urlen står.

Med Internet Explorer er det helt anderledes. den er bygget op af flere forskellige classes, hvor du sagtens kan gå ind og få fat på class "Edit" hvor urlen står.
Avatar billede mcgoat Nybegynder
28. august 2006 - 10:11 #4
Avatar billede nythjem Nybegynder
28. august 2006 - 10:33 #5
Hej McGoat :)

Tak for svaret.

Uden jeg lige har tid til at undersøge det lige "nu", vil det så sige at der slet ikke er nogen mulighed for at få current url ud af Firefox ?
Avatar billede mcgoat Nybegynder
28. august 2006 - 10:49 #6
ser sådan ud. desværre :( de har lagt de forskellige classes sammen til 1 stor. kan ikke lige se hvordan man skal kunne tilgå de andre :(
Avatar billede nythjem Nybegynder
28. august 2006 - 10:55 #7
Det er too bad :)

Fandt ellers lige denne her tråd:
http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20880451.html

Der ser de ud til at have fundet en metode, men har desværre endnu ikke roddet med Delphi :)

Du må meget gerne lige ligge et svar.. :)
Avatar billede mcgoat Nybegynder
28. august 2006 - 10:58 #8
Ser ud til Firefox understøtter DDE. kan da lige prøve at se på det :)
Avatar billede nythjem Nybegynder
28. august 2006 - 11:01 #9
Tak, det er meget venligt af dig :)
Avatar billede mcgoat Nybegynder
28. august 2006 - 11:09 #10
Avatar billede nythjem Nybegynder
28. august 2006 - 11:15 #11
Arhhh lækkert, et nyt keyword at søge på, Link Monitor.. :) Det gav jo en hel del gode resultater :)

Tak for hjælpen :) It has been very useful ;-)
Avatar billede mcgoat Nybegynder
28. august 2006 - 11:17 #12
var så lidt :) lad mig vide hvis du får det til at virke :)
Avatar billede nythjem Nybegynder
28. august 2006 - 11:20 #13
Jeps. Har desværre ikke Vb6 her på arbejdet, kun .net, men glæder mig jo helt til at komme hjem og efterprøve.

For opslagsværkets skyld (som eksperten jo er) findes også dette brugbare link:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=63658&lngWId=1
Avatar billede nythjem Nybegynder
28. august 2006 - 19:50 #14
Ohøj igen igen..

Den source du fandt er bare perfekt:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=66052&lngWId=1

- Den benytter WWW_GetWindowInfo variablen.
- Den returnerer det aktives vindue informationer.
- Den opdaterer selv hvis man går tilbage til et tidligere vindue.
- Og så fungerer den ikke mindst ved tabbet browsing..

Simply perfect ;-)

Cheers mate..
Avatar billede mcgoat Nybegynder
28. august 2006 - 20:46 #15
;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester