Embedded FireFox (nur ein Test)

  • Nicht schön - aber einfach mal anschauen ... :D

    Anwendung:

    Spoiler anzeigen
    [autoit]

    #Region Includes
    #include <Constants.au3>
    #include <FF.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion Includes

    [/autoit] [autoit][/autoit] [autoit]

    $hGui = GUICreate('Embedded FF ', 800, 600)
    $hBut1 = GUICtrlCreateButton("Autoit.de", 10, 550)
    $hBut2 = GUICtrlCreateButton("About Mozilla", 70, 550)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _FFCreateEmbedded($hGUI, 10, 10, 780, 500)

    [/autoit] [autoit][/autoit] [autoit]

    _FFOpenURL("autoit.de")

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    _FFQuit()
    Exit
    Case $hBut1
    _FFOpenURL("autoit.de")
    Case $hBut2
    _FFAction("about", "mozilla")
    EndSwitch
    WEnd

    [/autoit]

    Funktion dazu:

    Spoiler anzeigen
    [autoit]

    Func _FFCreateEmbedded($hGUI,$x, $y, $width, $height, $iTimeOut = 10000)
    Local $sFuncName = "_FFCreateEmbedded"
    Local $OK

    [/autoit] [autoit][/autoit] [autoit]

    Local $sHKLM = "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox"
    Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")

    [/autoit] [autoit][/autoit] [autoit]

    WinSetOnTop($hGUI,"",1)

    [/autoit] [autoit][/autoit] [autoit]

    Run($sFFExe, "", @SW_HIDE)
    Local $iTimeOutTimer = TimerInit()
    While 1
    Sleep(500)
    If ProcessExists($_FF_PROC_NAME) Then ExitLoop
    If (TimerDiff($iTimeOutTimer) > $iTimeOut) Then
    SetError(__FFError($sFuncName, $_FF_ERROR_Timeout, "Browser process not exists: " & $_FF_PROC_NAME))
    Return ""
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _FFConnect()
    $OK = @error
    If @error Then _FFDisConnect()
    Until Not $OK

    [/autoit] [autoit][/autoit] [autoit]

    Local $hFF = _FFWindowGetHandle()
    WinMove($hFF, "", $x, $x, $width, $height)

    [/autoit] [autoit][/autoit] [autoit]

    Do
    _FFAction("pm", True)
    Until Not @error

    [/autoit] [autoit][/autoit] [autoit]

    WinMove($hFF, "", $x, $x, $width, $height)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hFF, "hwnd", $hGui)
    WinSetOnTop($hGUI,"",0)

    [/autoit] [autoit][/autoit] [autoit]

    Return $hFF
    EndFunc

    [/autoit]

    5 Mal editiert, zuletzt von Stilgar (29. April 2009 um 09:15)

  • Nochmal etwas überarbeitet. Diesmal ist das Öffnen von FF nicht mehr sichtbar, wenn noch kein FF läuft.

    Probleme macht mir allerdings immer noch die Darstellung der Oberfläche. D.h. falls man das Fenster mit einem anderen überdeckt oder aus dem Bildschirm bewegt, wird die Darstellung von FF "unschön", auch ein Redraw oder Update des Fensters bringt nichts. Hat da jemand noch einen Vorschlag?

  • hi, hab mir das mal angeguckt, wenn ich das zum beispiel mit tabs benutze scheint das fenster durch alle tabs durch. gibt es eine möglichkeit das hidden aufzurufen?

    hm ok hat sich erledigt, ich machs einfach so klein das man es nicht sieht.

    Einmal editiert, zuletzt von knx (17. Mai 2009 um 13:26)

  • hi, hab mir das mal angeguckt, wenn ich das zum beispiel mit tabs benutze scheint das fenster durch alle tabs durch. gibt es eine möglichkeit das hidden aufzurufen?

    hm ok hat sich erledigt, ich machs einfach so klein das man es nicht sieht.

    Was möchtest du eigentlich machen?
    Versteckt bzw. minimiert aufrufen und in eine GUI einbinden ?( der Sinn entzieht sich mir vollkommen ... da kann man sich den Aufwand sparen und FF gleich versteckt starten.

    Mit Tabs habe ich das noch probiert, macht allerdings auch wenig Sinn, da die Bedienelemente eh weg sind, dann kann mal gleich eine andere Seite laden.

  • der is ja voll doof irgenwie der geht nich richtig XD hab auch MozRepl an und so

  • ich hab glaub ich das prob mit den tabs und der darstellung ich guck ma

  • Zitat

    der is ja voll doof irgenwie der geht nich richtig XD hab auch MozRepl an und so

    Leider kann ich mi dieser aussagekräftigen Fehlermeldung nichts anfangen.

    Wer ist voll doof?
    Der Browser? Dieses zusammengefrickelte Beispiel?

    Das FF kein com, ActiveX, dbus, sonstwas Schnittstelle hat? Stimmt!

    Siehe erster Satz in dem Thread "nicht schön" und funktioniert auch nicht wirklich gut. Es ist wirklich nur nur dazu gedacht wie man evtl. vielleicht wenns gut geht unter guten Umständen und wenn die Sterne in der richtigen Konstellation stehen (ok ich schweife ab) "eine" Webseite in einer GUI mit Hilfe von FF darstellen könnte. Dazu ist die FF.au3 aber nicht gemacht.

  • ich weiß leider vielleicht kann man ja mal gucken ob dies überarbeitet werden könnte :)

  • "Man" mal gucken ist gut.

    Ganz, ganz oben hatte ich das selbst schon gefragt

    Zitat

    Probleme macht mir allerdings immer noch die Darstellung der Oberfläche. D.h. falls man das Fenster mit einem anderen überdeckt oder aus dem Bildschirm bewegt, wird die Darstellung von FF "unschön", auch ein Redraw oder Update des Fensters bringt nichts. Hat da jemand noch einen Vorschlag?

    [EDIT]
    Dreckfuhler korrigiert ...

    Einmal editiert, zuletzt von Stilgar (20. Mai 2009 um 17:49)

  • Ahja wenn man die Zeilen:

    [autoit]


    Local $sHKLM = "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox"
    Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")

    [/autoit]

    durch:

    [autoit]


    Local $sFFExe = "***Pfad zur firefox.exe***"

    [/autoit]

    ersetzt läuft das ganze auch unter Win7 ;)

    Ausserdem kann man mit einigen Änderungen in der ff.au3 auch erreichen, dass die Funktion _FFStart(...) funktioniert. Gehört zwar nicht direkt zum Embedded Beispiel, da hier die Funktion garnicht genutzt wird, aber ich poste trotzdem mal meine Änderungen, vielleicht hilft es jemandem ;)


    [autoit]


    Func _FFStart($sURL = "about:blank", $sProfile = "default", $iMode = 1, $bHide = False, $IP = "127.0.0.1", $iPort = 4242, $ffportable = -1) ; <-- $ffportable als neuer optionaler Parameter
    ; etwas weiter untern in der selben Funktion
    __FFStartProcess($ffportable, $sURL, True, $sProfile, $bNoRemote, $bHide, $iPort) ; <-- Die Funktion __FFStartProcess bekommt $ffportable als neuen ersten Parameter, siehe unten...

    [/autoit][autoit]


    Func __FFStartProcess($ffportable, $sURL = "about:blank", $bNewWin = False, $sProfile = "default", $bNoRemote = False, $bHide = False, $iPort = 4242, $iTimeOut = 30000) ; <-- $ffportable als neuer erster Parameter
    ; etwas weiter untern in der selben Funktion wird dann noch eine if Abfrage eingebaut, die entweder die Registry ausliest wenn kein Pfad übergeben wurde oder den übergebenen Pfad benutzt.
    If $iTimeOut < 2000 Then $iTimeOut = 2000 ; unverändert

    [/autoit][autoit][/autoit][autoit]

    if $ffportable = -1 Then
    Local $sHKLM = "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox"
    Local $sFFExe = RegRead($sHKLM & "\" & RegRead($sHKLM, "CurrentVersion") & "\Main", "PathToExe")
    If @error Then
    SetError(__FFError($sFuncName, $_FF_ERROR_GeneralError, "Error reading registry entry for FireFox." & @CRLF & _
    "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox\*CurrentVersion*\Main\PathToExe" & @CRLF & _
    "Error from RegRead: " & @error))
    Return 0
    EndIf
    Else
    Local $sFFExe = $ffportable
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Local $sCommand = StringFormat('"%s" %s %s %s -repl %i %s', $sFFExe, $sNewWin, $sURL, $sNoRemote, $iPort, $sProfile) ; unverändert

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    Die Funktion _FFStart kann nun also als letzten Parameter beim Aufruf auch noch einen Pfad zur gewünschten firefox.exe enthalten. Wird dieser nicht angegeben verhält sich die Funktion wie gewohnt.

    Beispiel:

    [autoit]


    #include <FF.au3>

    [/autoit][autoit][/autoit][autoit]

    $ffportable = "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
    $url = "www.google.de"

    [/autoit][autoit][/autoit][autoit]

    _FFStart( $url, "default" , 1 , False , "127.0.0.1" , 4242 , $ffportable )

    [/autoit][autoit][/autoit][autoit][/autoit]

    3 Mal editiert, zuletzt von misterspeed (20. Oktober 2010 um 01:25)

  • Im übrigen gab es bei mir einige seltsame Fehler, die scheinbar nur zufällig auftreten.

    Einmal wurd das FF-Fenster normal geöffnet anstatt in die GUI eingebunden.
    Mehrmals war FF kurz zu sehen bevor es in die GUI eingebunden wurde.

    Da beides nicht wirklich reproduzierbar ist bin ich aber überfragt woran das liegen mag. Auch kam es zum Absturz beim Link in neuem Tab öffnen. Hierzu gab es eine Absturzmeldung von FF, die sich auf das FF Plugin mozrepl bezog.

    System:
    Windows 7 @ VirtualBox VM
    FF 3.6.8
    MozRepl 1.0
    FF.au3 v 0.6.0.1b-3 // modifiziert für Win7 siehe oben

    Ansonsten finde ich die Idee aber sehr schön und werde das ganze möglicherweise in mein Programm einbinden.

    Einmal editiert, zuletzt von misterspeed (20. Oktober 2010 um 01:56)

  • Hab nun nochmals einige Tests gemacht. Neue Tabs öffnen funktioniert bei mir nur wenn das FF Fenster nicht embedded ist. Vielleicht mag ja mal einer diese Funktion testen:

    [autoit]


    Func tabtest()

    [/autoit][autoit][/autoit][autoit]

    _FFOpenURL("www.google.de")
    _FFTabAdd("www.heise.de", False , False)
    Sleep(5000)
    _FFTabAdd("www.chip.de", False , False)
    Sleep(5000)
    _FFTabAdd("www.pcgh.de", False , False)
    _FFTabSetSelected(3)
    Sleep(1000)
    _FFTabSetSelected(2)
    Sleep(1000)
    _FFTabSetSelected(1)
    Sleep(1000)
    _FFTabSetSelected(0)
    exit
    EndFunc

    [/autoit]

    In obiges Beispiel eingebaut erhalte ich folgende Fehler:

    Spoiler anzeigen


    EDIT:
    Problem mit den Tabs liegt anscheinend an Windows 7. Unter Vista funktioniert das auch innerhalb der GUI. Wenn man die kompilierte exe unter Windows 7 im Kompatibilitätsmodus ausführt funktioniert es ebenfalls.

    Einmal editiert, zuletzt von misterspeed (20. Oktober 2010 um 19:08)