Mit ErGo die Suchtreffer bei Google einschränken

  • Hallo zusammen,

    da ich in letzter Zeit vergesslicher werde und immer wieder die eingrenzenden Suchfunktionen von Google vergesse, habe ich ein kleines Script geschrieben, um diese Suche zu vereinfachen.

    Um beispielsweise die Avatar-Bilder aus dem AutoIt.de-Forum im JPG-Format bei Google zu finden geht man idR folgendermaßen vor:
    Browser öffnen, Google aufrufen in die Bildersuche wechseln und dort in der Eingabezeile folgendes eintragen:
    avatar site:https://autoit.de/www.autoit.de filetype:jpg

    Google sucht dann nur innerhalb der bei site: angegebenen website und nach dem Dateiformat, welches bei fileformat: angegeben wurde. Aber es gibt natürlich noch mehr dieser Möglichkeiten zu filtern.
    ErGo hilft dabei...[Blockierte Grafik: http://www.abload.de/thumb/ergo_picpsjk.jpg]
    Man kann bei ErGo persönliche Sucheinstellungen in einer Vorlagenliste eintragen, als kleines Schmankerl werden die Favicons der Website, auf der gesucht werden soll, mit in diese Vorlagenliste eingetragen.

    Beispielsweise sucht man nach AutoIt-Codebeispielen zum Thema "WM_Command" mit ErGo auf den einschlägigen Webseiten folgendermaßen:
    ErGo starten, die zu durchsuchenden Webseiten in der Vorlagenliste anhaken (auch mehrere), im oberen Inputfeld den Suchbegriff WM_Command eintragen, Enter drücken und der Standardbrowser präsentiert (ggf nach automatischem Start) in einzelnen Reitern die Suchergebnisse der ausgewählten Seiten!

    Auch die Suche im AutoIt-Forum findet jetzt viiiele Treffer mehr wie mit der "internen" Suche auf der Website.
    Genau wie auf http(s):\\ Seiten, kann Google natürlich auch auf FTP-Servern suchen, oder auch nach oder in Büchern und und und

    Leider ist ErGo (zzt noch) auf die Zusammenarbeit mit Opera, Firefox, Iron und natürlich dem Internetzexplodierer beschränkt, aber es sollte kein Problem sein, jeden anderen beliebigen Browser einzubinden.
    Btw., ich hatte das Programm erst nur für Opera geschrieben, aber Freunde baten mich es etwas umzustricken, damit es auch mit anderen Browsern automatisch läuft.
    Daher ist der Code stellenweise etwas "gewöhnungsbedürftig"^^

    Auf der ToDo-Liste steht schon einiges, z.B. hätte ich gerne die heruntergeladenen Favicons alle in einem Container.


    Viel Spass beim Suchen mit ErGo

    Andy

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=ErGo.ico
    #AutoIt3Wrapper_outfile=ErGoSuche.exe
    #AutoIt3Wrapper_Res_Fileversion=1.0.3.1
    #AutoIt3Wrapper_Res_Language=1031
    ;#AutoIt3Wrapper_Run_After=copy "%in%" "z:\test\g_suche\"
    ;#AutoIt3Wrapper_Run_After=copy "%out%" "z:\test\g_suche\"
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Constants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <Inet.au3>
    #include <StructureConstants.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <GuiStatusBar.au3>
    #include <GUIConstantsEx.au3>
    #include <ListBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>

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

    ;*************Variablen*****************
    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE, $LBS_EXTENDEDSEL)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER, $LVS_EX_TRACKSELECT)
    Local $aStatusbar_Text[2] = [" Ver "&_scriptversion(), "Info"], $aStatusbar_Parts[2] = [60, -1] ;statusbar
    Global $suchmaschine, $browserfenster, $combostring
    Global $RadioString = "allintitle:", $hstatus, $mausaltx = 0, $mausalty = 0, $toolstarttime, $toolflag = 0, $Faviconfile = ""
    Global $Browserwindow[10], $DefaultBrowser, $Browsername, $Browserprocess, $browsermainwin, $browsernewwindow

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

    Global $dll = DllOpen("user32.dll") ; für die WindowsMessages WM_notify-Funktion
    Global $hImage = _GUIImageList_Create(16, 16, 5, 5) ;Liste für die Favicons
    Global $defaulticon = "ErGo.ico", $inifile = "ErGo.ini"

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

    _GetBrowserInfo() ;stellt standardbrowser fest und setzt entsprechend die fensterdaten
    Global $progname = "ErGo Erweiterte Googlesuche mit " & $Browsername

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

    Opt("GUIOnEventMode", 1)
    Opt("TCPTimeout", 500)
    Opt('TrayMenuMode', 1) ; Tray-Standardmenü ausschalten
    Opt('TrayAutoPause', 0) ; AutoPause ausschalten
    ;Opt("WinTitleMatchMode",2)

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

    ;************Instanzen***********

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

    if _Singleton($progname,1) = 0 Then
    Msgbox(0,"Warnung",$progname&@crlf&" wird bereits ausgeführt!")
    Exit
    EndIf

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

    ;*********GUI***************
    $GUI = GUICreate($progname, 635, 515, ((@DesktopWidth - 635) / 2), ((@DesktopHeight - 515) / 2) - 50)
    GUISetIcon($defaulticon);'icon_g_suche.ico')
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIClose")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIMinimize")
    $StatusBar = _GUICtrlStatusBar_Create($GUI, $aStatusbar_Parts, $aStatusbar_Text)
    ;_GUICtrlStatusBar_SetMinHeight($StatusBar, 17)

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

    ;********Suchwörter Inputfeld*********
    $Group1 = GUICtrlCreateGroup("Suchen nach ", 8, 8, 617, 49)
    $Input = GUICtrlCreateInput("", 16, 24, 601, 21); ,bitor($ES_AUTOvSCROLL,$ES_WANTRETURN))
    ;GUICtrlSetOnEvent($Input, "Button1Click") ;wenn enter gedrückt, dann Suche beginnen

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

    ;********Suche eingrenzen, Liste erstellen**********
    $Group2 = GUICtrlCreateGroup("Suche eingrenzen auf ", 8, 64, 617, 201)
    $Liste = GUICtrlCreateListView("Vorlage|Erweiterte Google-Parameter", 16, 130, 601, 125, $iExWindowStyle, $iExListViewStyle)
    _GUICtrlListView_SetExtendedListViewStyle($Liste, $iExListViewStyle)
    _GUICtrlListView_SetColumnWidth($Liste, 0, 200)
    _GUICtrlListView_SetColumnWidth($Liste, 1, 380)
    $Input_URL = GUICtrlCreateInput("", 17, 96, 378, 21)
    $Input_EXT = GUICtrlCreateInput("", 411, 96, 43, 21)
    $Label1 = GUICtrlCreateLabel("URL:", 18, 79, 31, 17)
    $Label2 = GUICtrlCreateLabel("Dateiendung:", 412, 75, 68, 17)
    $Label3 = GUICtrlCreateLabel("Googlesuche in", 498, 75, 78, 17)
    $Combo = GUICtrlCreateCombo("Web", 498, 96, 116, 25)
    GUICtrlSetData(-1, "Bilder|Buchsuche|Maps|News|Video")

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

    ;********Listview-Kontextmenü*******
    $context = GUICtrlCreateContextMenu($Liste)
    $item1 = GUICtrlCreateMenuItem("Neue Vorlage", $context)
    $item2 = GUICtrlCreateMenuItem("Markierte Vorlage(n) löschen", $context)
    ;$item3 = GUICtrlCreateMenuItem("Eingabeparameter in aktuelle Vorlage übertragen", $context)
    ;GUICtrlSetOnEvent($item3, "_Bearbeiten")
    GUICtrlSetOnEvent($item1, "_Neu")
    GUICtrlSetOnEvent($item2, "_Delete")
    GUICtrlSetOnEvent($Liste, "List1Click")

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

    ;***************Erweiterte Parameter**********
    $Group4 = GUICtrlCreateGroup(" Erweiterte Suche mit folgenden Parametern ", 8, 272, 617, 153)
    $Radio1 = GUICtrlCreateRadio("Webseiten finden, welche die Suchwörter im Titel haben allintitle:Wort", 16, 288, 377, 33)
    $Radio2 = GUICtrlCreateRadio("Webseiten finden, welche das erste Suchwort im Titel und das weitere Suchwort in der Seite haben intitle:Wort1 Wort2", 16, 312, 585, 33)
    $Radio3 = GUICtrlCreateRadio("URL´s finden, welche die Suchwörter enthalten allinurl:Wort1 Wort2 ", 16, 336, 561, 33)
    $Radio4 = GUICtrlCreateRadio("URL´s finden, welche das erste Suchwort in der URL und das weitere Suchwort in der Seite haben inurl:Wort1 Wort2", 16, 360, 585, 33)
    $Radio5 = GUICtrlCreateRadio("Seite finden mit den Suchwörtern nur im Text und nicht als Link intext:Wort1 Wort2", 17, 392, 591, 25)
    GUICtrlSetOnEvent($Radio1, "Radio1Click")
    GUICtrlSetState($Radio1, $GUI_CHECKED)
    GUICtrlSetOnEvent($Radio2, "Radio2Click")
    GUICtrlSetOnEvent($Radio3, "Radio3Click")
    GUICtrlSetOnEvent($Radio4, "Radio4Click")
    GUICtrlSetOnEvent($Radio5, "Radio5Click")

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

    ;***************Buttons******************
    $Group3 = GUICtrlCreateGroup(" Aktion ", 8, 432, 617, 57)
    $Button1 = GUICtrlCreateButton("Suche starten", 16, 448, 169, 33, $BS_DEFPUSHBUTTON)
    $Button2 = GUICtrlCreateButton("Erweiterte Suche", 232, 448, 169, 33, 0)
    $Button3 = GUICtrlCreateButton("Ende", 448, 448, 169, 33, 0)
    GUICtrlSetOnEvent($Button1, "Button1Click")
    GUICtrlSetOnEvent($Button2, "Button2Click")
    GUICtrlSetOnEvent($Button3, "Button3Click")

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

    _inilesen() ;inidatei auslesen und werte in die listview eintragen

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

    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events") ;Funktion der WindowsMessage zuweisen
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ;Funktion den WindowsMessages zuweisen
    GUISetState(@SW_SHOW)

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

    While 1 ;hauptschleife, macht nichts, ausser die infotexte in die statusbar zu schreiben
    Sleep(50)
    _Mouseover()
    WEnd

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

    Func Button1Click() ;Browser aufrufen mit der Suchanfrage
    If _isinput() Then ;wenn das inputfeld nicht leer ist.....
    Local $checkflag = 0, $suchstring = ""
    For $iIndex = 0 To _GUICtrlListView_GetItemCount($Liste) ;nacheinander die listenitems aufrufen
    Local $googlestring = ""
    If _GUICtrlListView_GetItemChecked($Liste, $iIndex) Then ;wenn ein listeneintrag angehakt oder markiert ist
    Local $checkflag = 1 ;merken, dass ein eintrag angehakt ist
    Local $row = _GUICtrlListView_GetItem($Liste, $iIndex, 1) ;listenzeile spalte 1 in array schreiben
    $googlestring = StringLeft($row[3], StringInStr($row[3], " ")) ;ggf site: und filetype:
    $combostring = StringRight($row[3], StringLen($row[3]) - StringInStr($row[3], " ", 0, -1)) ;wo soll google suchen?
    _stringselect() ;fenstertitel und googleseite holen
    Local $suchstring = GUICtrlRead($Input) & " " & $googlestring
    _Browsercall($suchstring, $suchmaschine, $browserfenster)
    EndIf
    Next
    If $checkflag = 0 Or GUICtrlRead($Input_URL) <> "" Or GUICtrlRead($Input_EXT) <> "" Then ;keine zeile in der liste ausgewählt, dann im web suchen
    $combostring = GUICtrlRead($Combo)
    If GUICtrlRead($Input_URL) <> "" Then $suchstring = "site:" & GUICtrlRead($Input_URL)
    ; msgbox(0,GUICtrlRead($Input_URL),$suchstring)
    If GUICtrlRead($Input_EXT) <> "" Then $suchstring &= " filetype:" & GUICtrlRead($Input_EXT)
    ; msgbox(0,GUICtrlRead($Input_URL),$suchstring)
    _stringselect()
    Local $sstring = GUICtrlRead($Input) & " " & $suchstring
    ;msgbox(0,$suchmaschine,$sstring)
    _Browsercall($sstring, $suchmaschine, $browserfenster) ;browser aufrufen
    EndIf
    EndIf
    EndFunc ;==>Button1Click

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

    Func _stringselect()
    Select
    Case $combostring = "Web"
    $suchmaschine = "http://www.google.de/"
    $browserfenster = "Google - " & $Browsername ;name des Browserfensters
    Case $combostring = "Bilder"
    $suchmaschine = "http://images.google.de/"
    $browserfenster = "Google Bilder - " & $Browsername
    Case $combostring = "Buchsuche"
    $suchmaschine = "http://www.google.de/books?hl=de"
    $browserfenster = "Google Bücher - " & $Browsername
    Case $combostring = "Video"
    $suchmaschine = "http://video.google.de/?hl=de"
    $browserfenster = "Google Video - " & $Browsername
    Case $combostring = "News"
    $suchmaschine = "http://news.google.de/nwshp?hl=de"
    $browserfenster = "Google News - " & $Browsername
    Case $combostring = "Maps"
    $suchmaschine = "http://maps.google.de/maps?hl=de&tab=wl"
    $browserfenster = "Google Maps - " & $Browsername
    EndSelect
    EndFunc ;==>_stringselect

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

    Func suchstring_aufbereiten()
    EndFunc ;==>suchstring_aufbereiten

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

    Func Button2Click()
    If _isinput() Then _Browsercall($RadioString & GUICtrlRead($Input), "http://www.google.de/", "")
    EndFunc ;==>Button2Click

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

    Func _GUIMinimize()
    Opt('TrayIconHide', 0) ; Tray-Menü anzeigen
    TraySetIcon($defaulticon) ; Icon für Tray-Menü setzen
    GUISetState(@SW_HIDE, $GUI) ; Fenster verstecken
    While 2 ; Tray-Menü-Schleife
    Switch TrayGetMsg() ; Anhand des eingetretenen Tray-Ereignisses die entsprechenden Befehle ausführen
    Case $TRAY_EVENT_PRIMARYDOWN; wurde 'Anzeigen' aufgerufen, dann...
    Opt('TrayIconHide', 1) ; Tray-Menü wieder verstecken
    GUISetState(@SW_SHOW, $GUI) ; Fenster anzeigen
    GUISetState(@SW_RESTORE, $GUI) ; und wiederherstellen (minimieren rückgängig machen)
    ExitLoop ; Tray-Menü-Schleife verlassen
    ;~ Case $TrayExit ; Benutzer hat 'Beenden' ausgewählt
    ;~ Exit ; Programm beenden
    EndSwitch
    WEnd
    EndFunc ;==>_GUIMinimize

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

    Func Button3Click()
    _GUIClose()
    EndFunc ;==>Button3Click

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

    Func _GUIClose()
    _inischreiben()
    _GUICtrlListView_UnRegisterSortCallBack($Liste)
    Exit
    EndFunc ;==>_GUIClose

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

    Func List1Click()
    _GUICtrlListView_SortItems(GUICtrlGetHandle($Liste), GUICtrlGetState($Liste))
    EndFunc ;==>List1Click
    Func Radio1Click()
    $RadioString = "allintitle:"
    EndFunc ;==>Radio1Click
    Func Radio2Click()
    $RadioString = "intitle:"
    EndFunc ;==>Radio2Click
    Func Radio3Click()
    $RadioString = "allinurl:"
    EndFunc ;==>Radio3Click
    Func Radio4Click()
    $RadioString = "inurl:"
    EndFunc ;==>Radio4Click
    Func Radio5Click()
    $RadioString = "intext:"
    EndFunc ;==>Radio5Click

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

    Func _neu() ;neuen listeneintrag erstellen, ggf favicon holen
    Local $vorlagename = InputBox("Vorlage", "Bitte geben Sie einen Namen für die Vorlage ein. Wenn Sie nach einer Minute keinen Namen eingegeben haben, dann wird diese Eingabebox geschlossen!", "", " M20", -1, -1, -1, -1, 40, GUICtrlGetHandle($GUI))
    If @error = 1 Or $vorlagename = "" Then Return
    Local $iconindex = 0
    _GUICtrlListView_BeginUpdate($Liste) ;liste sperren
    $Faviconfile = _getfavicon((GUICtrlRead($Input_URL))) ;favicon der website holen
    If FileExists($Faviconfile) Then
    $iconindex = _GUIImageList_GetImageCount($hImage)
    _GUIImageList_AddIcon($hImage, $Faviconfile)
    EndIf
    $index = _GUICtrlListView_AddItem($Liste, $vorlagename, $iconindex, _GUICtrlListView_GetItemCount($Liste) + 9999)
    Local $Site = "", $Ext = ""
    If GUICtrlRead($Input_URL) <> "" Then $Site = StringStripWS("site:" & GUICtrlRead($Input_URL), 8)
    If GUICtrlRead($Input_EXT) <> "" Then $Ext = " " & StringStripWS("filetype:" & GUICtrlRead($Input_EXT), 8)
    _GUICtrlListView_AddSubItem($Liste, $index, $Site & " " & $Ext & " " & GUICtrlRead($Combo), 1)
    _GUICtrlListView_EndUpdate($Liste) ;liste freigeben
    EndFunc ;==>_neu

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

    Func _bearbeiten()
    _GUICtrlListView_BeginUpdate($Liste)
    _GUICtrlListView_EndUpdate($Liste)
    EndFunc ;==>_bearbeiten

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

    Func _delete() ;zeilen in der liste löschen
    If MsgBox(262144 + 32 + 4, "", "Markierte bzw. angehakte Zeilen löschen? ") = 6 Then
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($Liste))
    EndIf
    EndFunc ;==>_delete

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

    Func _Browsercall($sstring, $suchmaschine, $Winname) ;Browser aufrufen und google aktivieren
    _GUICtrlStatusBar_SetText($StatusBar, ' Browser wird gestartet, bitte warten Sie....', 1, 0)

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

    ShellExecute($suchmaschine) ;standardbrowser wird aufgerufen

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

    If Not ProcessExists($Browserprocess) Then ;Browser zzt nicht aktiv
    Local $Browser = $DefaultBrowser
    If $Browser <> "" And @error = 0 Then ;Browser existiert in der registry
    Local $run = Run($Browser) ;Browser starten
    If $run <> 0 Then ;wenn es keine Probleme beim Start gibt
    Local $timer = TimerInit()
    Do
    If TimerDiff($timer) > 10000 Then ;wenn nach 10 sekunden kein Browser aktiv ist, dann ende
    MsgBox(262144, "Fehler!", "Entweder ist " & $Browsername & " nicht auf Ihrem System installiert, oder " & $Browsername & " kann nicht automatisch gestartet werden!" & @CRLF & "Dieses Programm wird beendet!")
    _GUIClose()
    EndIf
    Until ProcessExists($Browserprocess) ;solange, bis browser läuft, oder 10 sekunden vorbei sind
    Else
    MsgBox(262144, "Fehler!", "Entweder ist " & $Browsername & " nicht auf Ihrem System installiert, oder " & $Browsername & " kann nicht automatisch gestartet werden!" & @CRLF & "Dieses Programm wird beendet!")
    _GUIClose()
    EndIf
    Else ;opera ist nicht auf dem system installiert
    MsgBox(262144, "Fehler!", "Das Programm hat keinen " & $Browsername & "-Eintrag in der Registry gefunden!" & @CRLF & "Entweder ist Opera nicht auf Ihrem System installiert, oder " & $Browsername & " kann nicht automatisch gestartet werden!" & @CRLF & "Dieses Programm wird beendet!")
    _GUIClose()
    EndIf
    EndIf
    If $Winname = "" Then $Winname = "Google - " & $Browsername ;Parameter für die erweiterte suche
    WinActivate($Winname) ;warten bis browserfenster aktiv
    If Not WinWaitActive($Winname, "", 10) Then ;wenn nach 10 sekunden das Fenster nicht aktiv ist, dann
    _browserwin_notactive_msg() ;Info, später nochmal versuchen, ggf schreibt opera wieder mal fleissig dateien
    Else ;alle Fenster zur Eingabe bereit.....
    WinWaitActive($Winname, "", 5) ;warten
    ClipPut($sstring) ;suchstring in die zwischenablage
    Send("^v{ENTER}") ;und ab damit an google
    EndIf
    EndFunc ;==>_Browsercall

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

    Func _browserwin_notactive_msg()
    MsgBox(262144, "Information!", $Browsername & " ist aktiv aber beschäftigt! Daher sind die " & $Browsername & "-Fenster nicht aktivierbar." & @CRLF & "Bitte warten sie, bis " & $Browsername & " die Aktion beendet hat und versuchen sie es erneut!")
    EndFunc ;==>_browserwin_notactive_msg

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

    Func _isinput()
    If GUICtrlRead($Input) = "" Then
    MsgBox(262144 + 64, "Information", "Bitte geben Sie im obersten Eingabefeld ihre Suchbegriffe ein!")
    Return 0
    EndIf
    Return 1
    EndFunc ;==>_isinput

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

    Func _getfavicon($url) ;holt das favicon von der angegebenen website

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

    _GUICtrlStatusBar_SetText($StatusBar, ' Favicon der Website downloaden.....bitte warten', 1, 0)
    _GUICtrlListView_BeginUpdate($Liste) ;liste sperren
    If _isurl($url) Then ;wenn die url "regulär" ist, dann suche dort nach einem favicon

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

    If FileExists("favicon_" & _domain_from_url($url) & ".ico") Then Return "favicon_" & _domain_from_url($url) & ".ico" ;wenn es bereits ein favicon gibt, dann braucht man keins zu laden
    $protokoll = StringRegExp($url, "^(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)", 3) ;ist protokoll http o.ä. in der url?
    If @error <> 0 Then local $protokoll[1] = ["http://"] ; $url="http://"&$url ;website mit "http://" vornedran versuchen
    Local $domain = _extracturl($url) ;erster teil protokoll+domain z.b. http://www.testtest.de
    Local $iconfile = $protokoll[0] & $domain & "/favicon.ico" ;damit wird im rootdirectory der HP nach dem iconfile gesucht
    Local $pagetext = _INetGetSource(_domain_from_url($url)) ;quellcode laden, darin befindet sich ggf ein Hinweis auf das favicon
    ;filewrite("test2.html",$pagetext)
    If @error = 1 Then ;fehler beim lesen des quellcodes der site
    $a = MsgBox(262144, "Fehler!", "Die angegebene Website " & _domain_from_url($url) & " ist zur Zeit nicht erreichbar!" & @CRLF & "Bitte erlauben sie diesem Programm auch den Zugriff auf das Internet durch Ihre Firewall.")
    Else ;kein fehler beim laden des quellcodes, also durchsuchen nach hinweisen auf das favicon
    Local $u = StringInStr($pagetext, "shortcut icon") ;den text suchen
    If $u <> 0 Then ;icon-text gefunden, site nach url vom favicon scannen
    $z1 = StringInStr($pagetext, @LF, 0, 1, $u) ;nächstes lf finden ACHTUNG inetget macht aus CRLF ein LF
    $z2 = StringInStr($pagetext, @LF, 0, -1, $u) ;vorheriges lf finden, dazwischen steht die zeile mit dem icon
    Local $zeile = StringMid($pagetext, $z2, $z1 - $z2) ;zeile im text, welche auf ein icon hinweist
    $u = StringInStr($zeile, "href") ; nächsten ref suchen
    $u1 = StringInStr($zeile, '"', 0, 1, $u) ;erstes anführungszeichen
    $u2 = StringInStr($zeile, '"', 0, 1, $u1 + 1) ;zweites anführungszeichen, dazwischen steht der pfad

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

    $ico=StringMid($zeile, $u1 + 1, $u2 - $u1 - 1)
    $ico_ext=stringtrimleft($ico,stringinstr($ico,".",default,-1)-1)
    $ico=stringreplace(Stringtrimright($ico,stringlen($ico_ext)),".","") &$ico_ext

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

    $iconpfad = $protokoll[0] &_domain_from_url($url) & "/" &$ico

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

    If InetGet($iconpfad, @ScriptDir & "/favicon_" & _domain_from_url($url) & ".ico") Then ;icon holen und in datei schreiben
    _GUICtrlStatusBar_SetText($StatusBar, ' Favicon heruntergeladen!', 1, 0)
    _GUICtrlListView_EndUpdate($Liste) ;liste zum bearbeiten freigeben
    Return @ScriptDir & "/favicon_" & _domain_from_url($url) & ".ico" ;icon zurückgeben
    EndIf
    Else ;kein icontext gefunden
    If InetGet($iconfile, @ScriptDir & "/favicon_" & _domain_from_url($url) & ".ico") Then ;icon im rootdirectory suchen
    _GUICtrlStatusBar_SetText($StatusBar, ' Favicon heruntergeladen!', 1, 0)
    _GUICtrlListView_EndUpdate($Liste)
    Return @ScriptDir & "/favicon_" & _domain_from_url($url) & ".ico"
    EndIf
    EndIf
    EndIf
    EndIf

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

    if _GUIImageList_GetImageCount($hImage)=0 then;noch kein icon im index
    _GUIImageList_AddIcon($hImage,"shell32.dll",130) ;erstes favicon ist das windows-dateizeichen
    _GUICtrlListView_SetImageList($Liste, $hImage, 1) ;imageliste faktualisieren
    endif
    _GUICtrlListView_EndUpdate($Liste)
    _GUICtrlStatusBar_SetText($StatusBar, ' Kein Favicon heruntergeladen!', 1, 0)
    Return 0
    EndFunc ;==>_getfavicon

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

    Func _inilesen()
    If FileExists($inifile) Then
    Local $aSections = IniReadSectionNames($inifile) ;ini lesen
    ; _arraydisplay($asections)
    If @error Then
    MsgBox(262144 + 64, "Information", "Die Datei " & $inifile & " ist beschädigt und wird gelöscht!")
    FileDelete($inifile)
    Else
    Local $anz_icons = 0 ;anzahl favicons
    _GUICtrlListView_BeginUpdate($Liste)
    if fileexists($defaulticon) then ;defaulticon existiert
    _GUIImageList_AddIcon($hImage, @ScriptDir & "\" & $defaulticon) ;Erstes favicon in der imageliste ist das G-icon
    else ;defaulticon existiert nicht
    _GUIImageList_AddIcon($hImage,"shell32.dll",130) ;erstes favicon ist das windows-dateizeichen
    endif
    For $iIndex = 0 To $aSections[0] - 1 ;alle sektionen nacheinander durchsuchen
    Local $a = IniReadSection($inifile, String($iIndex)) ;
    If FileExists($a[3][1]) Then ;ein favicon existiert als datei
    $anz_icons += 1 ;zähler in der liste erhöhen
    _GUIImageList_AddIcon($hImage, @ScriptDir & "/" & $a[3][1]) ;Icon in die imageliste schreiben
    _GUICtrlListView_AddItem($Liste, $a[1][1], $anz_icons, _GUICtrlListView_GetItemCount($Liste) + 9999) ;Listeneintrag und Favicon schreiben
    Else ;kein favicon als datei gefunden
    _GUICtrlListView_AddItem($Liste, $a[1][1], 0, _GUICtrlListView_GetItemCount($Liste) + 9999) ;listeneintrag mit G-icon schreiben
    EndIf
    _GUICtrlListView_AddSubItem($Liste, $iIndex, $a[2][1], 1) ;Spalte mit den parametern schreiben
    Next
    _GUICtrlListView_SetImageList($Liste, $hImage, 1) ;imageliste fertig
    _GUICtrlListView_EndUpdate($Liste) ;liste zum bearbeiten freigeben
    _GUICtrlListView_RegisterSortCallBack($Liste, True, True) ;sortierfunktion einschalten
    EndIf
    EndIf
    EndFunc ;==>_inilesen

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

    Func _inischreiben() ;inidatei schreiben
    _GUICtrlListView_BeginUpdate($Liste)
    FileDelete($inifile)
    For $iIndex = 0 To _GUICtrlListView_GetItemCount($Liste) - 1 ;alle zeilen der liste abarbeiten
    Local $row = _GUICtrlListView_GetItem($Liste, $iIndex, 0)
    $vorlage = $row[3] ;vorlagenname
    $row = _GUICtrlListView_GetItem($Liste, $iIndex, 1)
    $sstring = $row[3] ;string des listensubitems, die Suchparameter
    $iconfile = ""
    If StringInStr($sstring, "site:") <> 0 Then ;site im string
    $sString2 = StringTrimLeft($sstring, 5) ;erste 5 zeichen kappen
    $url = StringLeft($sString2, StringInStr($sString2, " ") - 1) ;alles bis zum ersten leerzeichen ist die url
    if fileexists("favicon_" & _domain_from_url($url) & ".ico") then $iconfile = "favicon_" & _domain_from_url($url) & ".ico" ;nur wenn es ein favicon gibt, dann voller dateiname des favicons
    ;msgbox(0,0,"favicon url :"&$iconfile)
    EndIf
    IniWriteSection($inifile, $iIndex, "Vorlage=" & $vorlage & @LF & "Suchstring=" & $sstring & @LF & "Iconfile=" & $iconfile)
    Next
    _GUICtrlListView_EndUpdate($Liste)
    EndFunc ;==>_inischreiben

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

    Func _extracturl($sURL) ;ersten teil der url holen, um das icon auf der page zu finden
    Local $a = StringRegExp($sURL, '^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))', 3)
    If @error = 0 Then Return $a[0]
    MsgBox(0, 0, $sURL & " ist keine url")
    EndFunc ;==>_extracturl

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

    Func _isurl($sURL) ;test ob string im url-Format vorliegt, regex hier gefunden: http://geekswithblogs.net/casualjim/arch…2/01/61722.aspx
    $a = StringRegExp($sURL, "^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$", 3)
    If @error = 0 Then Return 1 ;url ist im korrekten Format
    If $sURL <> "" Then MsgBox(262144 + 64, "Information", "Ihre angegebene URL: " & @CRLF & $sURL & @CRLF & "entspricht nicht dem URL-Format!" & @CRLF & "Bitte ändern sie die URL!")
    Return 0
    EndFunc ;==>_isurl

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

    Func _domain_from_url($url) ;gibt ein http://www.xxxx.de von http://www.xxxx.de/test/test2 zurück
    Local $t = StringRegExp(_extracturl($url), "(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))", 3)
    Return $t[0]
    EndFunc ;==>_domain_from_url

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

    Func ListView_HOTTRACK($iSubItem)
    Local $HotItem = _GUICtrlListView_GetHotItem($Liste)
    ; If $HotItem <> -1 Then _GUICtrlStatusBar_SetText($Statusbar, "Hot Item: " & $HotItem & " SubItem: " & $iSubItem)
    EndFunc ;==>ListView_HOTTRACK

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

    Func WM_NOTIFY_EVENTS($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $Liste
    If Not IsHWnd($Liste) Then $hWndListView = GUICtrlGetHandle($Liste)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom

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

    Case $hWndListView
    Switch $iCode
    Case $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ListView_HOTTRACK(DllStructGetData($tInfo, "SubItem"))
    Return 0 ; allow the list view to perform its normal track select processing.
    ;Return 1 ; the item will not be selected.
    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _listview_doubleclick(DllStructGetData($tInfo, "Index"))
    Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY_EVENTS

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

    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $IdFrom, $iCode, $iGetInput, $iRegExp

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

    $IdFrom = BitAND($wParam, 0x0000FFFF) ;loword
    $iCode = BitShift($wParam, 16) ;hiword
    ;consolewrite("Command Event "&$en_update&" "&$input&" "&$idfrom&" "&$icode&@crlf)
    Switch $IdFrom
    Case $Input
    If $iCode = $EN_UPDATE Then
    $iGetInput = GUICtrlRead($Input)
    If StringInStr($iGetInput, @CRLF) Then
    MsgBox(0, StringLen($iGetInput), "enter", 1)
    EndIf
    EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func _listview_doubleclick($index) ;listview doppelgeklickt, die Inputfelder werden gefüllt
    Local $row = _GUICtrlListView_GetItem($Liste, $index, 1) ;alle daten aus der listviewzeile in ein array
    Local $zeile = $row[3] ;der Zeileninhalt als string
    If $zeile <> "" Then
    GUICtrlSetData($Combo, StringRight($zeile, StringLen($zeile) - StringInStr($zeile, " ", 0, -1)))
    EndIf

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

    If StringInStr($zeile, "site:") <> 0 Then ;wenn site: in der zeile, dann
    Local $url = StringTrimLeft($zeile, 5)
    $url = StringLeft($url, StringInStr($url, " ") - 1)
    GUICtrlSetData($Input_URL, $url)
    Else
    GUICtrlSetData($Input_URL, "")
    EndIf

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

    If StringInStr($zeile, "filetype:") <> 0 Then
    Local $x = StringInStr($zeile, "filetype:")
    $ft = StringTrimLeft($zeile, $x + 8)
    $ft = StringLeft($ft, StringInStr($ft, " ") - 1)
    GUICtrlSetData($Input_EXT, $ft)
    Else
    GUICtrlSetData($Input_EXT, "")
    EndIf
    EndFunc ;==>_listview_doubleclick

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

    Func _Mouseover() ;Mausposition abfragen und Infos in die Statuszeile schreiben
    If WinActive($progname) Then
    Local $a = GUIGetCursorInfo($GUI)
    ;_GUICtrlStatusBar_SetText($StatusBar, $a[4] & " " & $a[1], 0, 0)
    If Abs($a[0] - $mausaltx) > 10 Or Abs($a[1] - $mausalty) > 10 Then ;statusbar nur beschreiben, wenn Mauscursor sich bewegt hat
    $mausaltx = $a[0]
    $mausalty = $a[1]
    Switch $a[4]
    Case $Button1
    _GUICtrlStatusBar_SetText($StatusBar, ' Browser mit den in den Eingabefeldern gemachten Angaben aufrufen! Angehakte Seiten in der Liste abarbeiten.', 1, 0)
    Case $Button2
    _GUICtrlStatusBar_SetText($StatusBar, ' Browser mit der erweiterten Suche aufrufen', 1, 0)
    Case $Button3
    _GUICtrlStatusBar_SetText($StatusBar, ' Beendet das Programm', 1, 0)
    Case $Liste
    _GUICtrlStatusBar_SetText($StatusBar, ' Doppelklick auf Zeile: Daten in Felder übertragen Rechtsklick: Auswahlmenü Haken: Suche im Browser', 1, 0)
    Case $Input, $Group1
    _GUICtrlStatusBar_SetText($StatusBar, ' Suchbegriffe eingeben', 1, 0)
    Case $Input_URL, $Label1
    _GUICtrlStatusBar_SetText($StatusBar, ' Webadresse eingeben, es wird erst ab dem angegebenen Unterverzeichnis gesucht', 1, 0)
    Case $Input_EXT, $Label2
    _GUICtrlStatusBar_SetText($StatusBar, ' Dateierweiterung eingeben z.B. JPG, HTML, TXT es wird nur nach diesen Dateien gesucht', 1, 0)
    Case $Combo, $Label3
    _GUICtrlStatusBar_SetText($StatusBar, ' Angeben, in welchen speziellen Bereichen auf Google gesucht werden soll', 1, 0)
    Case $Group4, $Radio1, $Radio2, $Radio3, $Radio4, $Radio5
    _GUICtrlStatusBar_SetText($StatusBar, ' Auswahl treffen, dann den Button "Erweiterte Suche" anwählen', 1, 0)
    Case Else
    _GUICtrlStatusBar_SetText($StatusBar, '', 1, 0)
    EndSwitch
    EndIf
    EndIf
    EndFunc ;==>_Mouseover

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

    Func FindPathToDefaultBrowser() ;findet den vollen Pfad zum Standardbrowser
    Local $RegLocation = RegRead("HKEY_CLASSES_ROOT\" & ".html", "")
    Local $RegLoc = RegRead("HKEY_CLASSES_ROOT\" & $RegLocation & "\Shell\Open\command", "")
    $RegLoc = StringMid($RegLoc, 2, StringInStr($RegLoc, '"', 0, 2) - 2)
    If $RegLoc = "" Then
    MsgBox(262144, "Fehler!", "Der Pfad zum in Windows installierten Standardbrowser konnte nicht ermittelt werden!" & @CRLF & "Bitte installieren sie einen Browser oder teilen Sie dem System den Standardbrowser mit." & @CRLF & "Das Programm wird beendet!")
    _GUIClose()
    Else
    Return SetError(@error, 0, $RegLoc)
    EndIf
    EndFunc ;==>FindPathToDefaultBrowser

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

    Func _GetBrowserInfo() ;holt sich aus der registry den standardbrowser und setzt die Fensternamen
    Local $cPath, $cFDrive, $cFDir, $cFName, $cFExt
    $DefaultBrowser = FindPathToDefaultBrowser()
    Local $a = _PathSplit($DefaultBrowser, $cFDrive, $cFDir, $cFName, $cFExt)
    ;_arraydisplay($a)
    $browser_exe = $a[3] & $a[4]
    $Browser = $a[3]
    Switch $Browser
    Case "OPERA"
    $Browsername = "Opera"
    $Browserprocess = "Opera.exe"
    $browsernewwindow = "Schnellwahl - " & $Browsername
    Case "IEXPLORER"
    $Browsername = "Windows Internet Explorer"
    $Browserprocess = "iexplore.exe"
    $browsernewwindow = "Neue Registerkarte - " & $Browsername
    Case "Firefox"
    $Browsername = "Mozilla Firefox"
    $Browserprocess = "firefox.exe"
    $browsernewwindow = $Browsername
    Case "IRON"
    $Browsername = "Iron"
    $Browserprocess = "iron.exe"
    $browsernewwindow = "Neuer Tab - " & $Browsername
    Case Else
    $Browsername = "Windows Internet Explorer"
    $Browserprocess = "iexplore.exe"
    EndSwitch
    EndFunc ;==>_GetBrowserInfo

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

    func _scriptversion()
    if stringright(@scriptname,4)=".exe" Then ;ist exe-datei
    return fileGetVersion(@ScriptName)
    Else
    local $file=fileopen(@scriptname,0)
    while 1
    local $scource=filereadline($file)
    If @error = -1 then
    fileclose($file)
    return "N/A"
    else
    if stringinstr($scource,"#AutoIt3Wrapper_Res_Fileversion") Then
    return StringStripWS(stringright($scource,stringlen($scource)-stringinstr($scource,"=")),8)
    endif
    endif
    wend
    endif
    endfunc

    [/autoit]

    autoit.de/wcf/attachment/6323/