Link einer Internetseite im TrayTip

  • Hallo,

    vielleicht hat das jemand schonmal gemacht. Unzwar möchte ich den Linktext eines Links, nicht die Linkadresse, in einem TrayTip anzeigen wenn man mit der Maus über den Link fährt, also bei Mouseover. Kann mir da jemand helfen bzw. Lösungsansätze geben? Achja falls ich dazu die FF.au3 brauch, ich verwende Firefox.

  • Sowas in der Art:

    Spoiler anzeigen
    [autoit]

    #include <IE.au3>
    #include <String.au3>
    Global $LastStatus, $NowStatus, $oIE

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

    _IEErrorHandlerRegister()
    $oIE = _IECreate("http://www.autoit.de/")

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

    While IsObj($oIE) * Sleep(10)
    $NowStatus = _IEPropertyGet($oIE,"statustext")
    If $NowStatus <> $LastStatus Then
    $LastStatus = $NowStatus
    If StringRegExp($NowStatus,"\bhttp://(www\..+\.|.+\.|.+\..+\.)\w+/") = 1 Then
    $StrRegExpRepl = StringRegExpReplace($NowStatus,"http://(www\..+\.|.+\.)\w+/","")
    If $StrRegExpRepl <> "" Then
    $aArray = _StringBetween(StringReplace(StringReplace(_IEBodyReadHTML($oIE),"&amp;","&"),"&nbsp;"," "),$StrRegExpRepl&'">',"</a>")
    IF IsArray($aArray) Then TrayTip(StringRegExpReplace($aArray[0],"<.+?>",""),$NowStatus,1)
    Else
    ;Hier müssten dann externe Links verarbeitet werden.
    EndIf
    EndIf
    EndIf
    WEnd

    [/autoit]

    Funktioniert aber nicht 100%ig so wie ich mir das vorgestellt hab.

  • Wenn ich IE hätte würde ich es mit StatusbarGetText machen, aber ich nutze Firefox.

    Aber danke trotzdem.

  • Mit FireFox:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    Global $sText, $sStatus

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

    If _FFConnect() Then
    Global $sFertig = _FFCmd("gNavigatorBundle.getString('nv_done')") ; = "Fertig"

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

    While 1
    $sStatus= _FFCmd("XULBrowserWindow.statusTextField.label")
    If $sStatus <> $sFertig Then
    $sText = _FFXPath("//a[@href='" & $sStatus & "']", Default, 9)
    TrayTip("",$sText,1)
    EndIf
    Sleep(100)
    Wend
    EndIf

    [/autoit]
  • Habs getestet und es funktioniert nicht.

    Code
    _FFConnect: OS:	WIN_VISTA WIN32_NT 6001 Service Pack 1
    _FFConnect: AutoIt:	3.2.12.1
    _FFConnect: FF.au3:	0.6.0.1b-2
    _FFConnect: IP:	127.0.0.1
    _FFConnect: Port:	4242
    _FFConnect: Delay: 	2ms
    _FFConnect ==> Timeout: TCPConnect Error: 10061
    _FFConnect ==> General Error: Timeout: Can not connect to FireFox/MozRepl on: 127.0.0.1:4242

    Habe aber das MozRepl installiert, woran kann es denn liegen, dass es nicht funktioniert?

  • Nun bin ich schon die ganze Zeit am herausfinden wie der Index von dem Frame lautet. Nutze dafür den DOM Inspector. Kann da jemand helfen?

    Edit: Ok ich habs gefunden.

    Einmal editiert, zuletzt von m-obi (13. Dezember 2009 um 23:54)

  • Also es funktioniert ja, nur er zeigt mir im TrayTip die Adresse an und nicht den Text. Vielleicht erklär ich erstmal was ich machen möchte. Unzwar wenn ich die Taste ALT drücke und die rechte Maustaste soll er mir die Artikelnummer in eine Variable speichern.

    Mein bisheriger Code

    [autoit]

    #include <FF.au3>

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

    Global $sText, $sStatus

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

    If _FFConnect() Then
    Global $sFertig = _FFCmd("gNavigatorBundle.getString('nv_done')") ; = "Fertig"

    While 1
    _FFFrameEnter(2)
    $sStatus= _FFCmd("XULBrowserWindow.statusTextField.label")
    If $sStatus <> $sFertig Then
    $sText = _FFXPath("//a[@href='" & $sStatus & "']", Default, 9)
    TrayTip("",$sText,1)
    EndIf
    Sleep(100)
    Wend
    EndIf

    [/autoit]

    Dies ist das erste mal das ich was mit der FF.au3 mache, daher frage ich soviel. Ich hab auch schon versucht es mit den normalen Funktionen zu machen von Autoit, aber ich denk mal ich werde um die FF.au3 nicht rumkommen.

  • Seltsam bei mir zeigt es immer den Text an.
    Allein durch diese Zeile:

    [autoit]

    $sText = _FFXPath("//a[@href='" & $sStatus & "']", Default, 9)

    [/autoit]


    ist es gar nicht möglich, daß das Programm die Adresse anzeigt, weil garantiert nur der Text ausgelesen wird.

    Aber egal, bei dieser Seite geht auch folgendes:

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    Global $sText
    HotKeySet("!y", "_copy") ; alt + y

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

    Main()
    Func Main()
    Local $sStatus
    If _FFConnect() Then
    Local $sFertig = _FFCmd("gNavigatorBundle.getString('nv_done')") ; = "Fertig"
    While 1
    If StringInStr(_FFCmd(".location.href"), "https://eshop.phoenixcontact.de/phoenix/") Then
    $sStatus = _FFCmd("XULBrowserWindow.statusTextField.label") ; Status-Text auslesen
    If $sStatus <> $sFertig Then
    $sText = StringRegExpReplace($sStatus, '.*?UID=(.*?)&parentUID=.*?$', '$1') ; Nummer extrahieren
    TrayTip("", $sText, 1)
    EndIf
    EndIf
    Sleep(100)
    WEnd
    EndIf
    EndFunc

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

    Func _copy()
    ClipPut($sText)
    EndFunc

    [/autoit]


    wobei ich nicht weis, wie man Tasten und Maustasten vernünftig kombiniert. Ich habe mal als Beispiel Alt-y genommen.

    Zu Deinem Versuch:
    Ein wiederholtes _FFFrameEnter kann nicht funktionieren, da Du dadurch versuchst im gewählten Frame einen anderen Frame aufzurufen. Wenn Du das machen möchtest, dann mußt Du den Frame mit _FFFrameLeave wieder verlassen.

    Dadurch passiert folgendes:

    Spoiler anzeigen
    [autoit]


    ; Start-Objekt mit 3 Frames: content.top.document
    _FFFrameEnter(2) ; => content.frame[2].document
    ; ... Anweisungen ...
    _FFFrameEnter(2) ; => content.frame.[2].frame[2].document = Fehler da es dort keinen Frame mehr gibt
    ; usw.
    ; Mit _FFFrameLeave wechselt man wieder in den übergeordneten Frame und kann dann wieder erneut wechseln.

    [/autoit]

    Ist im Prinzip wie If / Endif. Nur If-Blöcke anzufangen ohne diese auch mit EndIf abzuschließen geht nicht.

  • Also danke erstmal. Wieso nimmst du denn jetzt nicht den _FFFrameEnter? Und bei mir gibt der StringRegExpReplace einen Leerstring raus, sonst funktioniert es. Es funktioniert doch, seltsam.
    Und das mit der tastenkombi würde ich dann mit _IsPressed machen, weil es ja eben bei HotKeySet keine Maustasten gibt.

    Einmal editiert, zuletzt von m-obi (14. Dezember 2009 um 13:49)

  • Danke SEuBo, aber ich will ja ALT-Taste + Rechte Mausteaste also im Stil von !{linke Maustaste}. Mit _Ispressed gehts am einfachsten.

  • Habs jetzt mal verfeinert, so dass er nur noch die Nummer anzeigt, sonst hat er noch bei anderen Links was anderes angezeigt z.B. Links von der Navigation und Links mit Javascript. Und das wenn die Maus drüber ist, er nicht immer wieder $sText neu zuweist obwohl sich eigentlich nix geändert hat.

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    Global $sText
    HotKeySet("!y", "_copy") ; alt + y

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

    Main()
    Func Main()
    Local $sStatus, $sLast
    If _FFConnect() Then
    Local $sFertig = _FFCmd("gNavigatorBundle.getString('nv_done')") ; = "Fertig"
    While 1
    If StringInStr(_FFCmd(".location.href"), "https://eshop.phoenixcontact.de/phoenix/") Then
    $sStatus = _FFCmd("XULBrowserWindow.statusTextField.label") ; Status-Text auslesen
    If $sStatus <> $sFertig And $sStatus <> $sLast Then
    $sText = StringRegExpReplace($sStatus, '.*?UID=(.*?)&parentUID=.*?$', '$1') ; Nummer extrahieren
    If StringIsInt($sText) And StringLen($sText) <= 7 And StringLen($sText) >= 5 Then
    ToolTip($sText)
    Sleep(500)
    ToolTip("")
    EndIf
    $sLast = $sStatus
    ElseIf $sStatus = $sFertig Then
    $sLast = $sStatus
    EndIf
    EndIf
    Sleep(100)
    WEnd
    EndIf
    EndFunc

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

    Func _copy()
    ClipPut($sText)
    EndFunc

    [/autoit]

    So hab mich jetzt nochmal umentschbieden, ich nehme doch nicht _IsPressed und ALT + rechte Maustaste. Weil wenn ich die Tastenkombi drücke und dann die rechte Maustaste wieder loslasse kommt das Kontextmenü und das stört. Hab es jetzt doch mit HotKeySet gemacht. Unzwar ich fahre mit der Maus über die Nummer oder Beziehcnung oder Artikelbild (irgendwas was den selben Link hat) und drücke dann Enter. Das reicht vollkommen. Da Windows oder Firefox nix macht wenn ich das mache, also keine anderen Aktionen ausführen, sprich diese Tastenkombi ist noch nicht reserviert.

    Spoiler anzeigen
    [autoit]

    #include <FF.au3>

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

    Global $sText, $bHotKeySet
    HotKeySet("{ENTER}", "_copy")

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

    Main()
    Func Main()
    Local $sStatus, $sLast
    If _FFConnect() Then
    Local $sFertig = _FFCmd("gNavigatorBundle.getString('nv_done')") ; = "Fertig"
    While 1
    If StringInStr(_FFCmd(".location.href"), "https://eshop.phoenixcontact.de/phoenix/") Then
    $sStatus = _FFCmd("XULBrowserWindow.statusTextField.label") ; Status-Text auslesen
    If $sStatus <> $sFertig And $sStatus <> $sLast Then
    $sText = StringRegExpReplace($sStatus, '.*?UID=(.*?)&parentUID=.*?$', '$1') ; Nummer extrahieren
    If StringIsInt($sText) And StringLen($sText) <= 7 And StringLen($sText) >= 5 Then
    $bHotKeySet = True
    ToolTip($sText)
    Else
    $bHotKeySet = False
    ToolTip("")
    EndIf
    $sLast = $sStatus
    ElseIf $sStatus = $sFertig Then
    $sLast = $sStatus
    EndIf
    EndIf
    Sleep(100)
    WEnd
    EndIf
    EndFunc

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

    Func _copy()
    If $bHotKeySet Then
    HotKeySet("{ENTER}")
    MsgBox(0, "Test", $sText)
    HotKeySet("{ENTER}", "_copy")
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von m-obi (15. Dezember 2009 um 00:39)