Script für Vorschau/Anzeige/Übersicht von Bildern

  • Erst einmal herzliches Hallo an die Community ;)

    Ich habe mich diesen Monat mit dem Thema Autoit beschäftigt und bin gerade dabei ein Script zu entwerfen.
    Eiegentlich sind es sogar 2...das erste wird auf die gewünschten PCs "installiert" und erzeugt in einem gewissen Intervall
    Screenshots vom Desktop und speichert diese in einen Ordner.

    Nun entwerfe ich das "Hauptscript" mit passender GUI. Dieses soll mir quasi die Bilder die das erste Tool erzeugt hat,
    anzeigen. Dazu habe ich erst einmal eine Listbox erstellt wo ich die Bilder im Ordner sehen kann. Nun hänge ich seit einigen Tagen und etlichen Probieren an den Problem, das mir das Script auch genau das Bild anzeigt, was ich in der Listbox ausgewählt habe. Ich habe es erst einmal so weit, das er mir überhaubt ein Bild anzeigt, sobald ich etwas ausgewählt habe. Ich müsste den script doch jetzt nur noch zeigen, das er mir das Anzeigen soll, was er im Array hat oder?
    Am Ende habe ich dann noch vor die Möglichkeit zu haben, das ich den PC-Namen mit den Standort des PCs koppel und er mir dann Quasi den Standort anzeigt und nicht den Namen vom Bild bzw. vom PC.

    Hier einmal die Codes:

    Tool 1:

    Spoiler anzeigen
    [autoit]


    #include <ScreenCapture.au3>
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #NoTrayIcon

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

    ;AutoItSetOption("MustDeclareVars", 1)
    ;AutoItSetOption("MouseCoordMode", 1)
    ;AutoItSetOption("PixelCoordMode", 0)
    ;AutoItSetOption("RunErrorsFatal", 0)
    ;AutoItSetOption("TrayIconDebug", 1)
    ;AutoItSetOption("WinTitleMatchMode", 4)
    ;Opt("TrayMenuMode",1)
    ;----------------------------------------------------------------------------------------------------------------------------
    ; Pfad zu den ScreenShot Einstellungen:
    ;----------------------------------------------------------------------------------------------------------------------------
    Global $inifile = @ScriptDir & "\settings.ini"
    ;----------------------------------------------------------------------------------------------------------------------------
    ; Ini Datei:
    ;----------------------------------------------------------------------------------------------------------------------------
    global $interval = Iniread(@Scriptdir & "\settings.ini", "Allgemein", "Intervall", "")
    ;----------------------------------------------------------------------------------------------------------------------------
    ; Erstellen des Tray-Menu's:
    ;----------------------------------------------------------------------------------------------------------------------------
    Global $trayscreenshot = TrayCreateMenu("ScreenShot")
    Global $traydeskshot = TrayCreateItem("Start", $trayscreenshot)
    Global $trayexitshot = TrayCreateItem("Beenden", $trayscreenshot)
    Global $options = TrayCreateMenu("Einstellungen")
    Global $options_intervall = TrayCreateItem("Intervall", $options)
    Global $info = TrayCreateItem("Über")
    TraySetState()
    Global $exit = TrayCreateItem("Exit")
    TrayTip("ScreenShot-Tool:", "zum Erstellen von automatischen ScreenShots.", 5, 1)
    Opt("TrayMenuMode", 1) ; "script paused" wird ausgechalten

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

    ;----------------------------------------------------------------------------------------------------------------------------
    ; Screenshot des Desktops:
    ; ----------------------------------------------------------------------------------------------------------------------------

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

    Func DesktopScreenShot()

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

    DirCreate(@DesktopDir & "\Screenshots\"); erstellt Verzeichnis für die Screenshots
    _ScreenCapture_Capture(@DesktopDir & "\Screenshots\Screenshot_" & @ComputerName & ".jpg")
    If @error Then MsgBox(262160, "Fehler", "Es wurde kein Screenshot erstellt!", 4)
    ;sleep (30000)
    EndFunc

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

    ;----------------------------------------------------------------------------------------------------------------------------
    ; Info:
    ; ----------------------------------------------------------------------------------------------------------------------------

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

    Func info()
    MsgBox(64, "Info:", "Windows SreenShot-Tool" & @LF & "Version: 1.0.0" & @LF & "erstellt mit AutoIt 3" & @LF & "" & @LF & "© 2011 by Tom W", 15)
    EndFunc

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

    ;----------------------------------------------------------------------------------------------------------------------------
    ; Funktion CheckInput:
    ; ----------------------------------------------------------------------------------------------------------------------------
    func CheckInput()
    $getinput = GUICtrlRead ($interval)

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

    if StringIsDigit ($getinput) = 0 Then
    SplashTextOn("Fehler", "Bitte geben Sie die gewünschte Aktualisierungszeit ein!")
    EndIf
    EndFunc
    ;----------------------------------------------------------------------------------------------------------------------------
    ; tray:
    ; ----------------------------------------------------------------------------------------------------------------------------
    While 1

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

    $trayMsg = TrayGetMsg()
    Switch $trayMsg
    Case $traydeskshot
    if ($interval > 0) Then
    AdlibRegister("DesktopScreenshot", $interval * 1000)
    Else
    DesktopScreenShot()
    EndIf
    Case $trayexitshot
    AdlibUnRegister("DesktopScreenshot")
    case $options_intervall

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

    Do
    $interval = Inputbox("","Aktualisierungshäufigkeit in Sekunden: ")
    ;CheckInput()
    if @error = 1 Then
    ExitLoop
    EndIf
    if ($interval <=0) Then
    MsgBox(0,"Fehler!", "Bitte geben Sie einen gültigen Wert ein!")
    EndIf

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

    Iniwrite(@Scriptdir & "\settings.ini", "Allgemein", "Intervall", $interval)
    Until ($interval > 0)

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

    Case $info
    info()
    Case $exit
    Exit
    Exit

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

    EndSwitch
    WEnd

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

    Tool 2:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>
    #include <StructureConstants.au3>
    #include <array.au3>
    #include <GuiComboBox.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 886, 644, 188, 117)
    $filemenu = GUICtrlCreateMenu ("&Programm")
    $fileitem1 = GUICtrlCreateMenuItem("Start", $filemenu)
    $fileitem2 = GUICtrlCreateMenuItem("Einstellungen", $filemenu)
    GUICtrlCreateMenuItem("", $filemenu, 2)
    $fileitem3 = GUICtrlCreateMenuItem("Beenden", $filemenu)
    $Button1 = GUICtrlCreateButton("Aktualisieren", 64, 24, 273, 41, $WS_GROUP)
    $ListBox = GUICtrlCreateList("", 24, 168, 225, 406, BitOR($CBS_SORT, $GUI_SS_DEFAULT_COMBO))
    $label = GUICtrlCreateGroup("PC-Screenshot", 270, 148, 610, 436)
    $hWndListBox = GUICtrlGetHandle($ListBox)

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

    GUISetState()
    #EndRegion ### END Koda GUI section ###

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

    $Form2 = GUICreate("Form2", 300,300,188,117)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    $LastSel = ""

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    ;$sPath = FileSelectFolder("Bitte Pfad aussuchen", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 2, @ScriptDir, $Form1) ;evtl. 2 mit 0 ersetzen
    $sPath = "Pfad zu den Screenshots"
    $Files = _FileListToArray($sPath, "*.jpg", 1)
    For $i = 1 To $Files[0]

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

    GUICtrlSetData($Listbox, $Files[$i] )
    Next

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

    Case $fileitem2
    GUISetState(@SW_SHOW, $Form2)

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

    EndSwitch

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

    If GUICtrlRead($ListBox) <> $LastSel Then
    $LastSel = GUICtrlRead($ListBox)

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

    $pic = GUICtrlCreatePic(@ScriptDir & "\bild.jpg", 300, 168, 561, 409)

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

    EndIf

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

    WEnd

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

    Über Hilfe und Ratschläge wäre ich sehr dankbar =)

    Einmal editiert, zuletzt von Tom87 (1. März 2012 um 10:47)

  • Bei der automatischen Kopplung könnten dir folgende Funktion von mir helfen:

    [autoit]

    #include<inet.au3>
    #include<string.au3>
    #include<array.au3>
    #include<googlemaps.au3>
    ;===============================================================================
    ; Function Name.....: _locateip($i)
    ; Parameter(s)......: $i;
    ;....................1- ip-address
    ;....................2- provider
    ;....................3- location
    ;....................4- latidude
    ;....................5- longitude
    ;================================================================================
    Func _locateip($i)

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

    $source = _INetGetSource("http://www.utrace.de/?query=" & _GetIP())
    If $i = 1 Then
    $string = _StringBetween($source, 'href=\"http:\/\/www.utrace.de\/whois\/' & _GetIP() & '\">', '<\/a><\/span><\/td><\/tr>')
    return $string[0]
    elseif $i=2 then
    $string = _StringBetween($source, 'href=\"http:\/\/www.utrace.de\/whois\/' & _GetIP() & '\">', '<\/a><\/span><\/td><\/tr>')
    return $string[1]
    ElseIf $i = 3 Then
    $string = _StringBetween($source, '<b>Region:<\/b><\/span><\/td><td><span class=\"standard\">&nbsp;<\/span><\/td><td align=\"left\" valign=\"top\"><span class=\"standard\">', '<\/span><\/td><\/tr><\/table>"')
    return $string[0]
    ElseIf $i = 4 Then
    $string = _StringBetween($source, 'new GLatLng(', ',')
    return $string[0]
    ElseIf $i = 5 Then
    $string = _StringBetween($source, 'new GLatLng(', ',')
    $string = _StringBetween($source, $string[0] & ",", ');')
    return $string[0]
    Elseif @error Then
    Return 0
    EndIf

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

    EndFunc ;==>_locateip
    ;wenn google maps installiert/udf vorhanden ist:
    func _GUICtrlGoogleMap_SetViewoniplocation($gmap)
    Local $latlng[2]
    $source = _INetGetSource("http://www.utrace.de/?query=" & _GetIP())
    $address = _StringBetween($source, 'new GLatLng(', ');')
    $latlng = _GUICtrlGoogleMap_GetLatLng($address[0])
    $gmap.document.parentWindow.execScript("move_map(" & $latlng[0] & "," & $latlng[1] & ");")
    Return True
    EndFunc

    [/autoit]

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

  • Danke für deine Hilfe =)

    allerdings war das mit diesem Standort nicht so gemeint. Die PCs bzw. Monitore stehen vor bestimmten Räumen und zeigen halt bestimmte Folien an. Mit Standort war dann quasi nur die lokale Position (Raumname/Raumnummer) gemeint ;)

    Aber deine Funktion werd ich mir dennoch annehmen, gefällt mir!

  • zum BIld
    ersetz mal

    [autoit]

    $pic = GUICtrlCreatePic(@ScriptDir & "\bild.jpg", 300, 168, 561, 409)

    [/autoit]


    mit

    [autoit]

    $avarray = _GUICtrlListBox_GetSelItemsText($ListBox)
    $pic = GUICtrlCreatePic($Path & "\" & $avarray[1], 300, 168, 561, 409)

    [/autoit]

    Sollte dann funktionieren

  • Doesnt work =/

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

  • Das hier funktioniert bei mir

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <GDIPlus.au3>
    #include <ScreenCapture.au3>
    #include <StructureConstants.au3>
    #include <array.au3>
    #include <GuiComboBox.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 886, 644, 188, 117)
    $filemenu = GUICtrlCreateMenu ("&Programm")
    $fileitem1 = GUICtrlCreateMenuItem("Start", $filemenu)
    $fileitem2 = GUICtrlCreateMenuItem("Einstellungen", $filemenu)
    GUICtrlCreateMenuItem("", $filemenu, 2)
    $fileitem3 = GUICtrlCreateMenuItem("Beenden", $filemenu)
    $Button1 = GUICtrlCreateButton("Aktualisieren", 64, 24, 273, 41, $WS_GROUP)
    $ListBox = GUICtrlCreateList("", 24, 168, 225, 406, BitOR($CBS_SORT, $GUI_SS_DEFAULT_COMBO))
    $label = GUICtrlCreateGroup("PC-Screenshot", 270, 148, 610, 436)
    $pic = GUICtrlCreatePic("", 300, 168, 561, 409)
    $hWndListBox = GUICtrlGetHandle($ListBox)

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

    GUISetState()
    #EndRegion ### END Koda GUI section ###

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

    $Form2 = GUICreate("Form2", 300,300,188,117)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    $LastSel = ""

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    ;$sPath = FileSelectFolder("Bitte Pfad aussuchen", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}", 2, @ScriptDir, $Form1) ;evtl. 2 mit 0 ersetzen
    $sPath = "Pfad zu den jpges"
    $Files = _FileListToArray($sPath, "*.jpg", 1)
    For $i = 1 To $Files[0]

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

    GUICtrlSetData($Listbox, $Files[$i] )
    Next

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

    Case $fileitem2
    GUISetState(@SW_SHOW, $Form2)
    Case $ListBox
    $txt = _GUICtrlListBox_GetText($ListBox, _GUICtrlListBox_GetCurSel($ListBox))
    GUICtrlSetImage($pic, $sPath & "\" & $txt)
    EndSwitch
    WEnd

    [/autoit]

    Zum PC Namen:

    Du kannst die Desktopfotos ja direkt als Namen Speichern, also z.B "Raum nr6.jpg" und bei der Anzeige der Namen dann einfach mit Stringreplace das .jpg durch "" ersetzen

  • Danke für eure Hilfen, aber irgendwie bekomme ich jedesmal folgende Fehlermeldung:

    ==> Subscript used with non-Array variable.:
    For $i = 1 To $Files[0]
    For $i = 1 To $Files^ ERROR

    habe schon einiges probiert, aber nichts hat geholfen =/ ich verstehe nur nicht, warum das vorher ging und aufeinmal nicht mehr (habe genai die codes versucht die hier gepostet wurden und mein eigenes vom anfang) =/

    @Lubu

    Ja daran hatte ich auch schon gedacht...könnte ich ja im Script eine Einstellung bzw Eingabe erstellen, wo man dann den Standort eingibt und er diese variable dann auch als namen abspeichert

    Einmal editiert, zuletzt von Tom87 (28. Februar 2012 um 12:19)

  • hast du den Pfad denn auch angegeben bzw. sind in dem Pfad auch Dateien drin?

  • düdüm =D

    da habe ich mir selber ein ei gelegt...manchmal sieht man den wald vor lauter bäumen nicht ;) ich bedanke mich *schäm*

  • Ich bedanke mich für eure unterstützung =) hat mir wieder ein paar neue dinge gezeigt. Den Rest werde ich schon noch hinbekommen.

    THX