• Der Begriff "Media Center" ist vielleicht etwas übertrieben, aber ich habe nix passenderes griffiges gefunden. Mit diesem Programm verwaltet ihr eure Filmfestplatte.
    Folgendermaßen muss diese aufgebaut sein: Das Skript muss in einem Ordner (oder im Wurzelverzeichnis) der Festplatte liegen. In diesem Ordner liegt ein Ordner ~MC, der für das Media Center benötigt wird (Cache). Außerdem gibt es einen Ordner "Filme", in dem es pro Film einen Ordner gibt, der so heißt, wie der Film.
    Wie üblich ist das Ganze etwas unübersichtlich und gebastelt geschrieben, aber es funktioniert.
    Features:

    • GDI+-Oberfläche (teilweise)
    • Navigation mit Pfeiltasten
    • Enter wählt den Film aus, es werden dann rechts (sofern möglich) Informationen zu dem Film angezeigt. Diese werden (bei aktivier Internetverbindung) von Wikipedia geladen und dann im Cache-Ordner gespeichert, sodass dann auch ein Zugriff ohne Internet möglich ist.
    • Leertaste startet den Film mit dem Standardprogramm. Existieren mehrere Dateien, werden sie in alphabetischer Reihenfolge gestartet (zum Beispiel erst Matrix part 1.avi und dann Matrix part 2.avi)
    • Bei Druck auf einen Buchstaben wird zum ersten Film mit dem Anfangsbuchstaben navigiert.
    • Unterstützung von Schreibweisen wie "Matrix, The [ENG][LQ]" (Wird als "The Matrix" angezeigt, aber trotzdem unter M einsortiert.

    Das Ganze ist als Beta-version zu betrachten, an vielen Stellen fehlt noch Fehlerbehandlung oder Einstellungen (z.B. der Ordnernamen)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <File.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Const $sFolder = @ScriptDir & "\Filme"
    Dim $aMovies = _FileListToArray($sFolder, "*", 2)
    Dim $iMovies = $aMovies[0]
    _ArrayDelete($aMovies,0)
    Global $landscape=1

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

    $hGUI = GUICreate("Media Center", 781, 500, Default, Default, BitOR($WS_SIZEBOX, $WS_SYSMENU, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP))
    $hLabel_Title = GUICtrlCreateLabel("", 368, 104, 355, 37)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)
    GUICtrlSetFont(-1, 20, 400, 0, "Calibri")
    $hLabel_Info = GUICtrlCreateLabel("", 384, 152, 387, 273)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)
    $hCover = GUICtrlCreatePic("", 368, 0, 409, 97, $WS_GROUP)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT)
    $hPicList = GUICtrlCreatePic("", 0, 0, 368, 500, $WS_GROUP)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKHEIGHT)
    ;~ $hButton_Play = GUICtrlCreateButton("Play", 376, 440, 57, 57, $WS_GROUP)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    ;~ $hButton_iMDb = GUICtrlCreateButton("iMDb", 440, 440, 57, 57, $WS_GROUP)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    ;~ $hButton_Wiki = GUICtrlCreateButton("Wiki", 504, 440, 57, 57, $WS_GROUP)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    ;~ $hButton_Temp1 = GUICtrlCreateButton("Funk 1", 568, 440, 57, 57, $WS_GROUP)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    ;~ $hButton_Temp2 = GUICtrlCreateButton("Funk 2", 632, 440, 57, 57, $WS_GROUP)
    ;~ GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    $hButton_Temp3 = GUICtrlCreateButton("?", 751, 470, 30, 30, $WS_GROUP)
    GUICtrlSetResizing(-1, $GUI_DOCKRIGHT + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)

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

    _GUI_Set_Standard()
    GUISetState(@SW_SHOW)

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

    #Region GDI+
    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(781,500, $hGraphics) ;Bitmap, das geschrieben wird
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) ;Buffer, in den geschrieben wird
    _SetBitmapToCtrl($hPicList, $hBitmap)
    Global $iSel = 0
    Global $iStringsX = 0

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

    $dll = DllOpen("user32.dll")
    _Move(1)
    _Move(-1)
    #EndRegion

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    ;~ case $hButton_Play
    ;~ _play()
    case $hButton_Temp3
    MsgBox(64,"Credits","Programmiert von L3viathan ([email='mail@l3viathan.de'][/email])" & @CRLF & @CRLF & "Webseite: http://l3viathan.de" & @CRLF & @CRLF & "Mit freundlicher Unterstützung von Carsten8 (autoit.de) bei den GDI+-Arbeiten.")
    Case $GUI_EVENT_MAXIMIZE
    ;Landscape-Mode
    $landscape=1
    _move(0)
    Case $GUI_EVENT_RESIZED
    _move(0)
    Case $GUI_EVENT_RESTORE
    ;Portrait-Mode
    $landscape=1
    _move(0)
    EndSwitch
    Select
    Case _IsPressed("28", $dll)
    _Move(1)
    sleep(50)
    Case _IsPressed("26", $dll)
    _Move(-1)
    sleep(50)
    Case not WinActive("Media Center")
    _GUI_Unset_Hotkeys()
    WinWaitActive("Media Center")
    _GUI_Set_Hotkeys()
    _Move(1)
    _Move(-1)
    EndSelect
    WEnd

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

    Func _GUI_Set_Standard()
    GUICtrlSetData($hLabel_Title, "Media Center")
    GUICtrlSetData($hLabel_Info, "Dieses Programm ermöglicht ein erleichtertes Durchstöbern ihrer Filmfestplatte." & @CRLF & "Es steht unter Open Source (cc-by-nc-sa)")
    ;~ GUICtrlSetData($hButton_Play, "Play")
    ;~ GUICtrlSetData($hButton_iMDb, "iMDb")
    ;~ GUICtrlSetData($hButton_Wiki, "Wiki")
    ;~ GUICtrlSetData($hButton_Temp1, "?")
    ;~ GUICtrlSetData($hButton_Temp2, "?")
    GUICtrlSetData($hButton_Temp3, "?")

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

    GUISetBkColor(0xffffff)
    GUICtrlSetColor($hLabel_Title, 0x0)
    GUICtrlSetColor($hLabel_Info, 0x0)
    _GUI_Set_Hotkeys()
    EndFunc ;==>_GUI_Set_Standard
    Func _GUI_Set_Hotkeys()
    HotKeySet("{SPACE}","_play")
    HotKeySet("{ENTER}","_highlight")
    For $i=97 To 122
    HotKeySet(Chr($i),"_jump")
    Next
    EndFunc
    Func _GUI_Unset_Hotkeys()
    HotKeySet("{SPACE}")
    HotKeySet("{ENTER}")
    For $i=97 To 122
    HotKeySet(Chr($i))
    Next
    EndFunc
    Func _GetMovie_Info($sTitle)
    $sTitle=_BuildTitle($sTitle)
    If FileExists(@ScriptDir & "\~MC\" & $sTitle & ".txt") Then Return FileRead(@ScriptDir & "\~MC\" & $sTitle & ".txt",FileGetSize(@ScriptDir & "\~MC\" & $sTitle & ".txt"))
    GUICtrlSetData($hLabel_Info,"Informationen werden abgerufen...")
    ;~ Return "keine Internetverbindung";1&1 sucks
    If not Ping("http://google.de",250) Then
    $aFound=_StringBetween(StringRegExpReplace(BinaryToString(InetRead("http://de.wikipedia.org/w/index.php?title=" & StringReplace($sTitle," ","_")),4),"<.+?>",""),"[Bearbeiten] Handlung","[Bearbeiten]")
    Else
    $aFound="keine Internetverbindung."
    EndIf
    If IsArray($aFound) Then
    FileWrite(@ScriptDir & "\~MC\" & $sTitle & ".txt",$aFound[0])
    Return $aFound[0]
    Else
    If not StringInStr($sTitle,"(Film)") Then Return _GetMovie_Info($sTitle & " (Film)")
    Return "Zu diesem Film konnte keine Beschreibung abgerufen werden."
    EndIf
    MsgBox(0,"","")
    EndFunc ;==>_GetMovie_Info
    Func _BuildTitle($titel)
    $titel=StringReplace($titel,"[ENG]","")
    $titel=StringReplace($titel,"[EN]","")
    $titel=StringReplace($titel,"[LQ]","")
    $titel=StringReplace($titel,"[HQ]","")
    $titel=StringReplace($titel,"[SUB]","")
    If StringLen($titel) - StringInStr($titel,",") = 4 Then $titel=StringRight($titel,3) & " " & StringTrimRight($titel,5)
    Return StringStripWS($titel,7)
    EndFunc
    ;~ #cs
    Func _Move($iVal)
    Global $iSel
    _WinAPI_RedrawWindow($hGUI)
    _GDIPlus_GraphicsClear($hBuffer,0x00ffffff)
    $iSel += $iVal
    If $iSel = UBound($aMovies) Then $iSel -= 1
    If $iSel = -1 Then $iSel = 0
    $iSize = -12
    $iI = 0
    For $i = $iSel-12 to $iSel+12
    $iTempSize = $iSize
    If $iSize < 0 Then $iTempSize = $iSize * -1
    $iTempSize *= 2
    If $i >= 0 And $i < UBound($aMovies) Then _GDIPlus_GraphicsDrawString($hBuffer, _BuildTitle($aMovies[$i]), 8, -150+$iI*(@DesktopHeight/24), "Calibri", 16-$iTempSize)
    If $i=$iSel Then _GDIPlus_GraphicsDrawLine($hBuffer,0,-135+$iI*(@DesktopHeight/24),5,-135+$iI*(@DesktopHeight/24))
    $iI += 1
    $iSize += 1
    Next
    _GDIPlus_GraphicsDrawImageRect($hGraphics,$hBitmap,0,0,781,500)
    If GUICtrlRead($hLabel_Title) <> "Media Center" Then
    GUICtrlSetData($hLabel_Title, "Media Center")
    GUICtrlSetData($hLabel_Info, "Dieses Programm ermöglicht ein erleichtertes Durchstöbern ihrer Filmfestplatte." & @CRLF & "Es steht unter Open Source (cc-by-nc-sa)")
    EndIf
    Return 1
    EndFunc
    ;~ #ce
    Func _Goto($iX)
    $iSel=$iX
    _Move(0)
    Return 1
    EndFunc
    Func _highlight()
    Global $iSel
    _WinAPI_RedrawWindow($hGUI)
    _GDIPlus_GraphicsClear($hBuffer,0x00ffffff)
    If $iSel = UBound($aMovies) Then $iSel -= 1
    If $iSel = -1 Then $iSel = 0
    $iSize = -12
    $iI = 0
    For $i = $iSel-12 to $iSel+12
    $iTempSize = $iSize
    If $iSize < 0 Then $iTempSize = $iSize * -1
    $iTempSize *= 2
    If $i <> $iSel And $i >= 0 And $i < UBound($aMovies) Then _GDIPlus_GraphicsDrawString($hBuffer, _BuildTitle($aMovies[$i]), 8, -150+$iI*(@DesktopHeight/24), "Calibri", 16-$iTempSize)
    If $i = $iSel And $i >= 0 And $i < UBound($aMovies) Then
    _GDIPlus_GraphicsDrawString($hBuffer, _BuildTitle($aMovies[$i]), 28, -150+$iI*(@DesktopHeight/24), "Calibri", 16-$iTempSize)
    _GDIPlus_GraphicsDrawLine($hBuffer,0,-135+$iI*(@DesktopHeight/24),20,-135+$iI*(@DesktopHeight/24))
    EndIf
    $iI += 1
    $iSize += 1
    Next
    _GDIPlus_GraphicsDrawImageRect($hGraphics,$hBitmap,0,0,781,500)
    ;nun Infos laden:
    GUICtrlSetData($hLabel_Title,_BuildTitle($aMovies[$iSel]))
    GUICtrlSetData($hLabel_Info,_GetMovie_Info($aMovies[$iSel]))
    EndFunc
    Func _play()
    _GUI_Unset_Hotkeys()
    $result=_getMovie($aMovies[$iSel])
    If isArray($result) Then
    GUISetState(@SW_HIDE)
    If $result[0] > 3 Then
    $file=FileOpenDialog("Filmdatei auswählen",@ScriptDir & "Filme\" & $aMovies[$iSel] & "\","Alle Dateien (*.*)",3)
    If not @error And $file <> "Thumbs.db" Then ShellExecuteWait($file)
    Else
    For $i=1 To $result[0]
    If $result[$i] <> "Thumbs.db" Then ShellExecuteWait(@ScriptDir & "\Filme\" & $aMovies[$iSel] & "\" & $result[$i])
    Next
    EndIf
    GUISetState(@SW_SHOW)
    Else
    GUISetState(@SW_HIDE)
    ShellExecuteWait(@ScriptDir & "\Filme\" & $aMovies[$iSel] & "\" & $result)
    GUISetState(@SW_SHOW)
    EndIf
    WinActivate("Media Center")
    _GUI_Set_Hotkeys()
    _Move(1)
    _Move(-1)
    EndFunc
    Func _getMovie($name)
    $dateien=_FileListToArray(@ScriptDir & "\Filme\" & $name,"*",1)
    If IsArray($dateien) And $dateien[0]=1 Then Return $dateien[1]
    Return $dateien
    EndFunc
    Func _SetBitmapToCtrl($CtrlId, $hBitmap)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $IMAGE_BITMAP = 0
    Local Const $SS_BITMAP = 0xE
    Local Const $GWL_STYLE = -16

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

    Local $hWnd = GUICtrlGetHandle($CtrlId)
    If $hWnd = 0 Then Return SetError(1, 0, 0)

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

    Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE)
    If @error Then Return SetError(2, 0, 0)
    DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
    If @error Then Return SetError(3, 0, 0)

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

    Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
    If @error Then Return SetError(4, 0, 0)
    If $oldBmp[0] <> 0 Then DllCall("GDI32.dll", "int", "DeleteObject", "int", $oldBmp[0])
    Return 1
    EndFunc
    Func _jump()
    $hk=@HotKeyPressed
    $res=_ArrayLetterFind($hk)
    If not @error Then _Goto($res)
    EndFunc
    Func _ArrayLetterFind($hk)
    For $i=0 To UBound($aMovies)-1
    ;~ MsgBox(0,$hk & " " & $aMovies[$i], StringLeft($aMovies[$i],1))
    If StringLeft($aMovies[$i],1) = $hk Then Return $i
    Next
    SetError(1)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Der Begriff "Media Center" ist vielleicht etwas übertrieben, aber ich habe nix passenderes griffiges gefunden.


    Ich hab zwar keine Verwendung dafür - kann dir aber (da es um Filme geht) einen vllt. treffenderen Namen anbieten: MovieControl (oder MovieControlCenter)

  • Okay, irgendwasmit Movie wird die nächste Version heißen^^

    Eine Frage noch zu dem Skript: Ich prüfe vor dem Abrufen, ob eine Internetverbindung besteht. Das klappt normalerweise auch gut. Aber: Wenn ein spezieller Fehler auftritt (der bei mir so alle 2 Wochen auftritt), die Fritz!Box nennt den Fehler eine PPPoE-Zeitüberschreitung, dann meldet er nicht, dass keine Internetverbindung besteht, sondern hängt sich auf. Gibt es sicherere Methoden, um rauszufinden, ob eine funktionierende Internetverbindung besteht?

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Für Serien, wäre sowas perfekt.
    kann ich dein Skript für mich so umschreiben, das es auch für Serien funktioniert?

  • Wie alle meine Skripte (außer es ist anderweitig angegeben) steht auch dieses unter CC-by-nc-sa-Lizenz, das heißt:

    Du darfst das Skript uneingeschränkt benutzen, weiterverbreiten, und verändern, unter folgenden Bedingungen:
    Nicht kommerziell (also nicht verkaufen), Namensnennung (also "L3viathan" + email ("mail@l3viathan.de") in die Credits jedes darauf aufbauenden Programmes) sowie Weitergabe unter den selben Bedingungen.

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.