Irfan view thumbnails selektierte Datei(en) auslesen

  • Hallo,
    bin noch nicht so ganz fit mit AutoIt, aber ein Problem:
    Ich möchte im Iview-Thumbnail-Fenster die Namen der selektierten Datei(en) auslesen und zB. per mittlerer Maustaste ein Programm starten und die Dateinamen als Parameter übergeben. Leider zeigt das Info-Tool hier absolut nichts Verwertbares.
    Hintergrund des Ganzen:
    Tausende Video-Dateien auf der Platte..., mit MovieThumNnailer (mtn) nebst AutoIt-Frontend Vorschaubilder erstellt.
    Ziel:
    per mittlerem Mausklick das zugehörige Video abspielen.
    OK, geht bei IviewThumbnails über rechten Mausklick -> ext. Editor -> 1..2..3 -> Autoitscript -> (zB MPC) -> LAÜFT!!
    Das Ganze ist aber recht umständlich, um einen kurzen Überblick zu erhalten.

    Das Frontend für mtn läuft schon recht ordentlich, wenn fertig, werde ich es ins Forum stellen.

    Hat jemand einen Tip, wie das geht?

    VDO (Vielen Dank Ooch) schon mal

    Hexer

  • Hallo,
    nun habe ich, um mir die Klickerei wie oben beschrieben zu ersparen, das Ganze mal
    auto(it)matisiert.
    Mit diesem kleinen (im Hintergrund laufenden) 7-zeiler (IviewTh.exe) wird die mittlere Maustaste abgefragt und die entprechenden Funktionen an IrfanView Thumbnails gesendet.


    [autoit]


    #include <misc.au3>

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

    While 1
    if _IsPressed(4) Then
    WinWaitActive("IrfanView Thumbnails")
    MouseClick("right")
    send("x"&"1")
    EndIf
    WEnd

    [/autoit]

    Damit wird dann als externer Editor das folgende Script als "Startvid.exe" gestartet:

    [autoit]


    #include <file.au3>
    #include <array.au3>
    Dim $szDrive, $szDir, $szFName, $szExt,$vid,$zDrive, $zDir, $zFName, $zExt

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

    $bild=$cmdline[1]

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

    $pfadb=_PathSplit($bild, $Drive, $Dir, $FName, $Ext)

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

    if $Ext<>".jpg" Then
    MsgBox("16","Fehler","Die gewählte Datei ist kein Videothumbnail")
    Exit
    EndIf

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

    $check=_PathSplit($Drive&$Dir&$FName, $cDrive, $cDir, $cFName, $cExt)

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

    if $cExt="" Then
    MsgBox("16","Fehler","Die gewählte Datei ist kein Videothumbnail")
    Exit
    EndIf

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

    If FileExists($Drive&$Dir&$FName) Then
    $start=$Drive&$Dir&$FName
    ShellExecute($start)
    else
    $pfad= FileSelectFolder("Die zugehörige Videodatei wurde im aktuellen Verzeichnis nicht gefunden, bitte Verzeichnis wählen","::{20D04FE0-3AEA-1069-A2D8-08002B30309D}","")
    if @error=1 Then Exit
    $start=$pfad&"\"&$FName
    ShellExecute($start)
    EndIf

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

    Exit

    [/autoit]

    Dieses ruft dann bei mir per ShellEcecute den MediaplayerClassic auf und übergibt die abzuspielende Datei als Parameter. Das klappt auch prima.

    Nun möchte ich aber auch mehrere in den Thumbnails selektierte Dateien übergeben, woran ich bis jetzt gescheitert bin.

    Folgendes passiert:
    Der Versuch, $bild als Array anzulegen ($bild=$cmdline) scheitert, da Iviewth.exe in mehreren Instanzen gestartet wird und jeweils nur eine Datei liefert. Damit gelingt es mir nicht, alle zusammenzufassen und als Parameter zu übergeben.
    Und da liegt das nächste Problem:
    Wie müßte dieser Parameter aussehen?

    Ach ja, zum Verständnis:
    Die Namen der Vorschaubilder entprechen dem Schema "video.erw.jpg"


    Hexer
    (der nicht hexen kann)

    2 Mal editiert, zuletzt von hexer (9. September 2009 um 19:05)

  • Hallo,
    der Urlaub ist vorbei und die Beschäftigung mit dem Thema geht weiter.
    Zuerst eine Korrektur:
    Es muß natürlich heißen: "..., da Startvid.exe mehrmals gestartet wird und jeweils nur eine Datei liefert."
    Bleibt aber weiterhin die Frage, wie sammle ich die Dateinamen der selektierten Bilder ein um sie an den MPC zu übergeben.
    Oder gibt es vielleicht eine andere Möglichkeit, an die Namen der Dateien zu kommen?

    MfG
    Hexer

  • Leider zeigt das Info-Tool hier absolut nichts Verwertbares.

    ?(

    Also bei mir zeigt das Window-Info-Tool alles an, was ich brauche.
    Dieses Script funktioniert bei mir:

    Spoiler anzeigen
    [autoit]

    #cs
    >>>> Window <<<<
    Title: IrfanView Thumbnails
    Class: IrfanViewThumbnails
    Position: 320, 0
    Size: 1600, 1170
    Style: 0x14CF0000
    ExStyle: 0x00000100
    Handle: 0x000406CE

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

    >>>> Control <<<<
    Class: SysListView32
    Instance: 1
    ClassnameNN: SysListView321
    Advanced (Class): [CLASS:SysListView32; INSTANCE:1]
    ID: 999
    Text:
    Position: 322, 27
    Size: 1270, 1089
    ControlClick Coords: 343, 195
    Style: 0x5000C200
    ExStyle: 0x00020000
    Handle: 0x000A0700

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

    >>>> Mouse <<<<
    Position: 989, 272
    Cursor ID: 2
    Color: 0xC0C0C0

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

    >>>> StatusBar <<<<

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

    >>>> Visible Text <<<<
    D:\Eigene Dateien\Eigene Musik\Bob Marley - 1973 - catch a fire\
    #ce

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

    #include <Constants.au3>
    #include <Array.au3> ; zum debuggen ...

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

    Global Const $IDC_LV = 999

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

    Global $sTitleName = "IrfanView Thumbnails"

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

    Global $hwndIViewThumb

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

    Global $asItems
    Global $sPath

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

    If (not WinWaitActive ($sTitleName, "", 10)) Then

    MsgBox ( _
    BitOR ($MB_OK, $MB_ICONHAND), _
    "Fehler", _
    StringFormat ("%s konnte nicht gefunden werden.", $sTitleName) _
    )
    Else
    $hwndIViewThumb = WinGetHandle ($sTitleName)
    EndIf

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

    $sPath = WinGetText ($hwndIViewThumb)

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

    If ($sPath) Then

    MsgBox ( _
    BitOR ($MB_OK, $MB_ICONHAND), _
    "Pfad", _
    StringFormat ("Pfad der Dateien: %s.", $sPath) _
    )
    Else
    MsgBox ( _
    BitOR ($MB_OK, $MB_ICONHAND), _
    "Fehler", _
    StringFormat ("Kein Pfad gewählt.", "") _
    )
    EndIf

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

    $asItems = GetSelectedItems ( )

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

    If (IsArray ($asItems)) Then

    _ArrayDisplay ($asItems)
    Else
    MsgBox ( _
    BitOR ($MB_OK, $MB_ICONHAND), _
    "Fehler", _
    StringFormat ("Keine Elemente gewählt.", "") _
    )
    EndIf

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

    Func GetSelectedItems ( )

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

    Local $cnItemSel
    Local $sItemIdx

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

    $cnItemSel = ControlListView ($hwndIViewThumb, "", $IDC_LV, "GetSelectedCount")

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

    If ($cnItemSel) Then

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

    $sItemIdx = ControlListView ($hwndIViewThumb, "", $IDC_LV, "GetSelected", 1)

    $aItemIdx = StringSplit ($sItemIdx, "|")

    If (IsArray ($aItemIdx)) Then

    For $i = 1 To $aItemIdx[0]

    $aItemIdx[$i] = ControlListView ($hwndIViewThumb, "", $IDC_LV, "GetText", $aItemIdx[$i])
    Next

    Return $aItemIdx
    EndIf
    EndIf

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

    Return 0

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

    EndFunc
    ;

    [/autoit]


    Gruß
    Greenhorn


  • Hallo Greenhorn,

    DANKE, funzt bestens, so hatte ich mir das vorgestellt.
    Da merkt man den Profi.
    Nun werde ich mal noch das Drumherum basteln.

    LG
    Hexer