Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

AHK PMR (MRP) Player v2

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: So Jan 13, 2008 9:52 pm    Titel: AHK PMR (MRP) Player v2 Antworten mit Zitat

Moin,

Ripp3r]D3[ hat hier ein Skript eingestellt, das ich selbst einmal ausprobiert habe und interessant fand.

Leider hat er den Thread dann mit der Bemerkung
Zitat:
Hm Bobo wer diese Option haben will der kann sich ja die arbeit machen ich habe das project soweit erledigt ^^
geschlossen.

Ich denke, ohne es überprüft zu haben, dass es dafür im Mutterforum bereits viele Skripte gibt. Doch ich habe es als Herausforderung für mich verstanden, das Ding noch "geschmeidiger" zu machen und es hier einzustellen, damit es hier auch "Support" dafür gibt.

Edit: Wie BoBo" schon sagte: "Bilder sagen mehr als Worte".





Also, hier ist der AHK PMR (MRP) Player v2.1:
Code:
#NoEnv
#SingleInstance, Force
SetBatchLines, -1
; ------------------------------------------------------------------------------
;
; Version:        2.1
; Sprache:        Deutsch
; OS-Version:     Win9x/NT/Win Xp/Win 2003 Server
;                 denick : v 2 nur unter Win XP getestet
; Autor(en):      Ripp3r]D3[ <Info@dcj-clan.de>
;                 denick
;
; Funktion:       Multimediaplayer mit minimalem Ressoucenverbrauch
;
; ------------------------------------------------------------------------------
; INI-Variablen
; -------------------- ----------------------------------------------------------
; Mit letzter Auswahl Starten (false/true)
StartWithPrevSel := 1
; Startverzeichnis für das Hinzufügen von Dateien und Ordnern
StartFolder := ""
; Lautstärke beim Programmstart
StartVolume := 50
; Beim Hinzufügen von Ordnern ggf. nach der Übernahme von Unterordnern fragen
AskForSubfolders := 0
; ------------------------------------------------------------------------------
; Variablen und Konstanten
; ------------------------------------------------------------------------------
ScriptVersion := "2.1"
ScriptName := "AHK's PMR-Player  v" . ScriptVersion . "  "
            . Chr(169) . "  Ripp3r]D3[ & denick"
EndKeys := "{LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}"
         . "{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}"
         . "{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}"
         . "{Capslock}{Numlock}{PrintScreen}{Pause}"
XM := 20
YM := 10
CW := 100
CH := 30
GW := 0
GH := 0
LW := (CW * 3) + (XM * 2)
LH := (CH * 6) + (YM * 5) + 30
GBH := LH + 5
IniFile := A_ScriptDir . "\MRPlayer.ini"
ListDir := A_ScriptDir . "\Playlisten"
PrevList := ListDir . "\Letzte_Auswahl.lst"
OldTime := ""
ActTime := ""
Title := "AHK's PMR-Player  " . Chr(169) . "  Ripp3r]D3[ & denick"
Files := ""
Folder := ""
PanicStop := False
Playing := False
PlayMode := ""
Recurse := False
Index := 0
; ------------------------------------------------------------------------------
; INI lesen
; ------------------------------------------------------------------------------
If FileExist(IniFile) {
   INI_Read()
}
; ------------------------------------------------------------------------------
; Gui
; ------------------------------------------------------------------------------
Menu, FileMenu, Add, &Dateien hinzufügen, OpenFile
Menu, FileMenu, Add, &Ordner hinzufügen, OpenFolder
Menu, FileMenu, Add
Menu, FileMenu, Add, &Benden, GuiClose
Menu, ListMenu, Add, Letzte Aus&wahl, PrevList
Menu, ListMenu, Add, Playlist &laden, LoadList
Menu, ListMenu, Add, Playlist &speichen, SaveList
Menu, ListMenu, Add
Menu, ListMenu, Add, &Anzeige leeren, ClearList
Menu, SetMenu, Add, &Vorgaben, Settings
Menu, HelpMenu, Add, Über MRP, About
Menu, HelpMenu, Add, Tastatur- und Mausbedienung, Hotkeys
Menu, MenuBar, Add, &Datei, :FileMenu
Menu, MenuBar, Add, &Playlist, :ListMenu
Menu, MenuBar, Add, &Einstellungen, :SetMenu
Menu, MenuBar, Add, &Hilfe, :HelpMenu
Gui, +Resize -MaxiMizeBox + MinSize +MaxSize +MaxSize%A_ScreenWidth%x
Gui, Margin, % XM, % YM
Gui, Menu, MenuBar
Gui, Add, ListView, % "w" . LW . " h" . LH . " Section -Hdr +Grid "
                    . "Checked ReadOnly NoSort vLVLIST gPlayList"
                    , Kein Eintrag
Gui, Add, Groupbox, ys-5 w120 h%GBH% vGBPLAY Section, Abspielen
Gui, Add, Button, xs+10 ys+20 w%CW% h%CH% Section vBTALL gPlayAll, &Alle
Gui, Add, Button, wp hp vBTRANDOM gPlayRandom, &Zufällig
Gui, Add, Button, wp hp vBTCHECKED gPlayChecked, Aus&wahl
Gui, Add, CheckBox, wp hp vCBREPEAT, Endlos
Gui, Add, Button, wp hp vBTNEXT gStop, &Nächster Titel
Gui, Add, Button, wp hp vBTSTOP gStop, &Beenden
Gui, Add, CheckBox, xm Section hp vCBPANIC gCBPANIC, Panikstopp
Gui, Add, Text, ys hp vTXVOL Right 0x200, Lautstärke:
GuiControlGet, P, Pos, TXVOL
Gui, Add, Slider, % "x+0 ys hp w" . (LW - PX - PW + XM)
                  . "  AltSubmit vSLVOL gVolume"
                  , %StartVolume%
GuiControlGet, P, Pos, BTSTOP
Gui, Add, Button, ys x%PX% w%CW% hp vBTEXIT gGuiClose, &Ende
Gui, Add, StatusBar
SB_SetParts(50)
Gui, Show, , % ScriptName
If (!FileExist(PrevList)) {
   Menu, ListMenu, Disable, Letzte Aus&wahl
} Else {
   If (StartWithPrevSel) {
      GoSub, PrevList
   }
}
GoSub, Refresh_Time
GoSub, Volume
Suspend, On
SetTimer, Refresh_Time, 1000
OnExit, Exit_App
Return
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Hotkeys
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ------------------------------------------------------------------------------
; Hotkeys für Tastaturbedienung
; ------------------------------------------------------------------------------
; Lautstärke erhöhen / verringern
^#WheelUp::
^#WheelDown::
^#NumpadAdd::
^#NumpadSub::
GuiControl, ,SLVOL
          , % ((A_ThisHotkey = "^#NumpadAdd"
                Or A_ThisHotkey = "^#WheelUp") ? "+2" : "+-2")
GoSub, Volume
Return
; ------------------------------------------------------------------------------
; Nächsten Titel abspielen oder Abspielen beenden
^#LButton::
^#RButton::
^#NumpadEnter::
^#NumpadDot::
^#NumpadDel::
Gosub, Stop
If (A_ThisHotkey = "^#NumpadDot"
   Or A_ThisHotkey = "^#NumpadDel"
   Or A_ThisHotkey = "^#RButton") {
   PanicStop := True
}
Return
; ------------------------------------------------------------------------------
; Mute: Lautstärke auf 0 setzen / wiederherstellen
^#Numpad0::
^#NumpadIns::
Soundset, +1, , Mute
Return
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Gui-Subroutinen
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ------------------------------------------------------------------------------
; Subroutine für Anwendungsende
; ------------------------------------------------------------------------------
GuiClose:
ExitApp
; ------------------------------------------------------------------------------
; Subroutine für Ereignis "GuiSize"
; Die Größe kann sich nur in der Breite ändern
; ------------------------------------------------------------------------------
GuiSize:
If (GW = 0 And GH = 0) {
   GW := A_GuiWidth
   GH := A_GuiHeight
   Return
}
If (A_EventInfo = 1 Or A_GuiWidth = GW) {
   Return
}
DW := A_GuiWidth - GW
GW := A_GuiWidth
GuiControlGet, P, Pos, GBPLAY
GuiControl, MoveDraw, GBPLAY, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTALL
GuiControl, Move, BTALL, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTRANDOM
GuiControl, Move, BTRANDOM, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTCHECKED
GuiControl, Move, BTCHECKED, % "x" . (PX + DW)
GuiControlGet, P, Pos, CBREPEAT
GuiControl, Move, CBREPEAT, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTNEXT
GuiControl, Move, BTNEXT, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTSTOP
GuiControl, Move, BTSTOP, % "x" . (PX + DW)
GuiControlGet, P, Pos, BTEXIT
GuiControl, Move, BTEXIT, % "x" . (PX + DW)
GuiControlGet, P, Pos, LVLIST
GuiControl, Move, LVLIST, % "w" . (PW + DW)
GuiControlGet, L, Pos, LVLIST
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Dateien hinzufügen"
; ------------------------------------------------------------------------------
OpenFile:
Gui, +OwnDialogs
FileSelectFile, Files, M, %StartFolder%, % "Bitte Datei(en) auswählen:"
If (!ErrorLevel) {
   Loop, Parse, Files, `n
   {
      If (A_Index = 1) {
         Folder := A_LoopField
      } Else {
         LV_Add("", Folder  . "\" . A_LoopField)
      }
   }
   LV_ModifyCol(1, "Auto")
}
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Ordner hinzufügen"
; ------------------------------------------------------------------------------
OpenFolder:
Gui, +OwnDialogs
Recurse := False
FileSelectFolder, Folder, %StartFolder%, 0, % "Bitte Ordner auswählen:"
If (!ErrorLevel) {
   If (AskForSubfolders) {
      Index := 0
      Loop, %Folder%\*.*, 2, 1
      {
         Index := A_Index
      }
      If (Index) {
         MsgBox, 36
               , %Folder%
               , % "Der ausgewählte Ordner enthält " . Index . " Unterordner,"
                 . "`n`nsollen Dateien aus diesen auch hinzugefügt werden?"
         IfMsgBox, Yes
         {
            Recurse := True
         }
      }
   }
   Loop, %Folder%\*.*, , %Recurse%
   {
      LV_Add("", A_LoopFileFullPath)
   }
   LV_ModifyCol(1, "Auto")
}
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Letzte Auswahl"
; ------------------------------------------------------------------------------
PrevList:
Loop, Read, % PrevList
{
   If (A_LoopReadLine) {
      LV_Add("", A_LoopReadLine)
   }
}
LV_ModifyCol(1, "Auto")
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Playlist laden"
; ------------------------------------------------------------------------------
LoadList:
FileSelectFile, Files
              , M
              , % ListDir
              , % "Bitte Playliste(n) auswählen:"
              , Playlisten (*.lst)
If (!ErrorLevel) {
   Loop, Parse, Files, `n
   {
      If (A_Index = 1) {
         Folder := A_LoopField
      } Else {
         Loop, Read, % Folder . "\" . A_LoopField
         {
            If FileExist(A_LoopReadLine) {
               LV_Add("", A_LoopReadLine)
            }
         }
      }
      LV_ModifyCol(1, "Auto")
   }
}
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Playlist speichern"
; ------------------------------------------------------------------------------
SaveList:
If LV_GetCount() {
   If !FileExist(ListDir) {
      FileCreateDir, % ListDir
   }
   FileSelectFile, Files
                 , S24
                 , % ListDir
                 , % "Playliste speichern:"
                 , Playlisten (*.lst)
   If (!ErrorLevel) {
      If FileExist(Files) {
         FileDelete, % Files
      }
      Loop, % LV_GetCount()
      {
         LV_GetText(PlayFile, A_Index)
         FileAppend, % PlayFile . "`r`n", % Files
      }
   }
}
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Anzeige leeren"
; ------------------------------------------------------------------------------
ClearList:
LV_Delete()
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Vorgaben"
; ------------------------------------------------------------------------------
Settings:
User_Defaults()
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Über AHK's PMR"
; ------------------------------------------------------------------------------
About:
Gui, +OwnDialogs
MsgBox, 64
      , Über AHK's PMR
      , % "Player mit Minimalen Ressourcenverbrauch`n`n"
        . "Coded by Ripp3r]d3[  &  denick"
Return
; ------------------------------------------------------------------------------
; Subroutine für Menüeintrag "Tastatur- und Mausbedienung"
; ------------------------------------------------------------------------------
Hotkeys:
Gui, +OwnDialogs
Help_Hotkeys()
Return
; ------------------------------------------------------------------------------
; Subroutine für Mausereignisse des ListViews.
; Doppellinksklick: Der Titel wird abgespielt
; Doppelrechtsklick: Der/die Titel werden nach Sicherheitsabfrage entfernt
; ------------------------------------------------------------------------------
PlayList:
If (Playing) {
   Return
}
; Doppellinksklick
If (A_GuiEvent = "DoubleClick") {
   PlayPos := A_EventInfo
   LV_GetText(PlayFile, A_EventInfo)
   If (PlayFile <> "Kein Eintrag") {
      PlayMode := "Single"
      Disable_Controls("+")
      Loop
      {
         If (!Play(PlayFile, PlayPos)) Or (PanicStop){
            GuiControl, , CBREPEAT, 0
            Break
         }
         GuiControlGet, CBREPEAT
         If (!CBREPEAT) {
            Break
         }
      }
      Disable_Controls("-")
      PlayMode := ""
   }
}
; Doppelrechtsklick : Listeneinträge entfernen
If (A_GuiEvent = "R") {
   LV_GetText(PlayFile, A_EventInfo)
   If (PlayFile <> "Kein Eintrag") {
      LV_GetCount("Selected")
      MsgBox, 36
            , Einträge entfernen?
            , % "Sollen die ausgewählten "
              . LV_GetCount("Selected")
              . " Titel`nwirklich entfernt werden?"
      IfMsgBox, Yes
      {
         PlayPos := 0
         Loop
         {
            PlayPos := LV_GetNext(PlayPos)
            If (!PlayPos) {
               Break
            }
            LV_Delete(PlayPos)
            PlayPos--
         }
      }
   }
}
PanicStop := False
Return
; ------------------------------------------------------------------------------
; Subroutine für Button "Alle"
; Alle Titel der Liste werden abgespielt
; ------------------------------------------------------------------------------
PlayAll:
If !LV_GetCount() {
   Return
}
Disable_Controls("+")
PlayMode := ""
Loop
{
   PlayPos := 0
   Loop
   {
      PlayPos++
      If (PlayPos > LV_GetCount()) {
         Break
      }
      LV_GetText(PlayFile, PlayPos)
      If (!Play(PlayFile, PlayPos)) Or (PanicStop) {
         GuiControl, , CBREPEAT, 0
         Break
      }
   }
   GuiControlGet, CBREPEAT
   If (!CBREPEAT) {
      Break
   }
}
Disable_Controls("-")
PanicStop := False
Return
; ------------------------------------------------------------------------------
; Subroutine für Button "Zufällig"
; Die Titel der Liste werden in zufälliger Reihenfolge abgespielt
; ------------------------------------------------------------------------------
PlayRandom:
If (!LV_GetCount()) {
   Return
}
Disable_Controls("+")
Loop
{
   PlayPos := 0
   PlayList := ""
   Loop, % LV_GetCount()
   {
      LV_GetText(PlayFile, A_Index)
      PlayList .= PlayFile . "|" . A_Index . "`n"
   }
   Sort, PlayList, Random
   PlayMode := "Random"
   Loop, Parse, PlayList, `n
   {
      If RegExMatch(A_LoopField, "(?P<File>[^\|]+)\|(?P<Pos>\d+)", Play) {
         If (!Play(PlayFile, PlayPos)) Or (PanicStop) {
            GuiControl, , CBREPEAT, 0
            Break
         }
      }
   }
   GuiControlGet, CBREPEAT
   If (!CBREPEAT) {
      Break
   }
}
Disable_Controls("-")
PlayList := ""
PlayMode := ""
PanicStop := False
Return
; ------------------------------------------------------------------------------
; Subroutine für den Button "Auswahl"
; Nur angehakte Titel werden gespielt
; ------------------------------------------------------------------------------
PlayChecked:
If (!LV_GetNext(0, "Checked")) {
   Return
}
Disable_Controls("+")
PlayMode := ""
Loop
{
   PlayPos := 0
   Loop
   {
      PlayPos := LV_GetNext(PlayPos, "Checked")
      If (!PlayPos) {
         Break
      }
      LV_GetText(PlayFile, PlayPos)
      If (!Play(PlayFile, PlayPos)) Or (PanicStop) {
         GuiControl, , CBREPEAT, 0
         Break
      }
   }
   GuiControlGet, CBREPEAT
   If (!CBREPEAT) {
      Break
   }
}
Disable_Controls("-")
PanicStop := False
Return
; ------------------------------------------------------------------------------
; Gemeinsame Subroutine für die Buttons "Nächster Titel" und "Stop"
; Der laufende Titel wird abgebrochen und ggf. der nächste abgespielt
; ------------------------------------------------------------------------------
Stop:
SoundPlay, Stop, 1
If (A_GuiControl = "BTSTOP") {
   PanicStop := True
}
Return
; ------------------------------------------------------------------------------
; Subroutine für den Lautstärkeregler
; ------------------------------------------------------------------------------
Volume:
GuiControlGet, SLVOL
SoundSet, % SLVOL
Return
; ------------------------------------------------------------------------------
; Subroutine für die Panik-Checkbox
; ------------------------------------------------------------------------------
CBPANIC:
GuiControlGet, CBPANIC
PanicStop := False
SetTimer, Check_Panic, % (CBPANIC ? "On" : "Off")
Return
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; OnExit-Routine
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ------------------------------------------------------------------------------
; Subroutine für OnExit
; Letzte Auswahl Speichern
; INI-Datei speichern
; ------------------------------------------------------------------------------
Exit_App:
If LV_GetCount() {
   If (FileExist(PrevList)) {
      FileDelete, % PrevList
   }
   Loop, % LV_GetCount()
   {
      LV_GetText(PlayFile, A_Index)
      FileAppend, % PlayFile . "`n", % PrevList
   }
}
INI_Write()
ExitApp
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Timerroutinen
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ------------------------------------------------------------------------------
; Aktualisierung der Zeitanzeige in der Statusbar
; ------------------------------------------------------------------------------
Refresh_Time:
FormatTime, ActTime, , HH:mm
If (OldTime = ActTime) {
   Return
}
SB_SetText(ActTime, 1)
OldTime := ActTime
Return
; ------------------------------------------------------------------------------
; Prüft, ob während des Abspielens eine Taste gedrückt wurde
; und sorgt ggf. für sofortigen Abbruch
; ------------------------------------------------------------------------------
Check_Panic:
If (!Playing) {
   Return
}
Input, SingleKey, L1 I T0.3, %EndKeys%
If (ErrorLevel <> "Timeout") {
   PanicStop := True
   GoSub, Stop
}
Return
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Funktionen
; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ------------------------------------------------------------------------------
; Abspielfunktion
; ------------------------------------------------------------------------------
Play(File, ByRef Pos)
{
   Global
   Local Error
   FileGetSize, Size, % File, K
   SplitPath, File, Name
   SB_SetText(Name . " - " . Size . " KB", 2)
   LV_Modify(PlayPos, "Vis")
   Playing := True
   Suspend, Off
   SoundPlay, % File, 1
   Error := ErrorLevel
   Suspend, On
   Playing := False
   SB_SetText("", 2)
   LV_Modify(PlayPos, "-Check")
   If (Error) {
      LV_Delete(Pos)
      Pos--
      If (PlayMode = "Single" Or PlayMode = "Random") {
         MsgBox, 16
               , Fehler
               , % File
               . "`nist keine abspielbare Datei oder der passende Codec fehlt!"
         Return False
      }
      MsgBox, 20
         , Fehler
         , % File
         . "`nist keine abspielbare Datei oder der passende Codec fehlt!"
         . "`n`nSoll das Abspielen mit der nächsten Datei fortgesetzt werden?"
      IfMsgBox, No
      {
         Return False
      }
   }
   Return True
}
; ------------------------------------------------------------------------------
; Während des Abspielens werden die Controls deaktiviert,
; die für Verwirrung sorgen könnten
; ------------------------------------------------------------------------------
Disable_Controls(Mode)
{
   Global
   Local Option
   Option := (Mode = "+" ? "Disable" : "Enable")
   Menu, MenuBar, % Option, &Datei
   Menu, MenuBar, % Option, &Playlist
   Menu, MenuBar, % Option, &Einstellungen
   GuiControl, % Option, BTALL
   GuiControl % Option, BTRANDOM
   GuiControl, % Option, BTCHECKED
   GuiControl, % Option, CBREPEAT
   If (PlayMode := "Single") {
      GuiControl, % Option, BTNEXT
   }
   GuiControl, % Option, LVLIST
}
; ------------------------------------------------------------------------------
; INI-Datei einlesen
; ------------------------------------------------------------------------------
INI_Read()
{
   Global IniFile
   Global StartWithPrevSel
   Global StartFolder
   Global StartVolume
   Global AskForSubfolders
   IniRead, Value, %IniFile%, Settings, StartWithPrevSel, ERROR
   If Value In 0,1
   {
      StartWithPrevSel := Value
   }
   IniRead, Value, %IniFile%, Settings, StartFolder, ERROR
   If InStr(FileExist(Value), "D")
   {
      StartFolder := Value
   }
   IniRead, Value, %IniFile%, Settings, AskForSubfolders, ERROR
   If Value In 0,1
   {
      AskForSubfolders := Value
   }
   IniRead, Value, %IniFile%, Settings, StartVolume, ERROR
   If Value Between 25 And 75
   {
      StartVolume := Value
   }
}
; ------------------------------------------------------------------------------
; INI-Datei speichern
; ------------------------------------------------------------------------------
INI_Write()
{
   Global IniFile
   Global StartWithPrevSel
   Global StartFolder
   Global StartVolume
   Global AskForSubfolders
   Iniwrite, %StartWithPrevSel%, %IniFile%, Settings, StartWithPrevSel
   IniWrite, %StartFolder%, %IniFile%, Settings, StartFolder
   IniWrite, %AskForSubfolders%, %IniFile%, Settings, AskForSubfolders
   IniWrite, %StartVolume%, %IniFile%, Settings, StartVolume
}

; ------------------------------------------------------------------------------
; Einstellungs-Gui
; ------------------------------------------------------------------------------
User_Defaults()
{
   Global IniFile
   Global StartWithPrevSel
   Global StartFolder
   Global StartVolume
   Global AskForSubfolders
   Static CB1
   Static ED1
   Static TX1
   Static ED2
   Static CB2
   Static SL1
   Static ED1ID
   Static ED2ID
   Gui, 9:Default
   Gui, +Owner1 +ToolWindow +AlwaxsOnTop +LabelGuiSet
   Gui, Font, s10
   Gui, Margin, 20, 20
   Gui, Add, CheckBox, vCB1, % "   Mit letzter Auswahl Starten"
   GuiControl, , CB1, %StartWithPrevSel%
   Gui, Add, Text, vTX1
         , Startordner für das Hinzufügen von Dateien und Ordnern
   GuiControlGet, P, Pos, TX1
   W := PW - 35
   Gui, Add, Edit, xp y+5 r1 w%W% vED1 hwndED1ID, %StartFolder%
   Gui, Add, Button, x+5 yp w30 hp gGuiSetBTSEL, ...
   Gui, Add, Checkbox, xm y+5 vCB2
         , % "   Beim Hinzufügen von Ordnern`n   auf Unterordner prüfen"
   GuiControl, , CB2, %AskForSubfolders%
   Gui, Add, Text, xm, Lautstärke beim Start der Anwendung
   Gui, Add, Edit, xm y+5 h20 Right ReadOnly vED2 hwndED2ID
         , %StartVolume%
   GuiControlGet, P, Pos, ED2
   W := W - PW + 30
   Gui, Add, Slider, x+5 yp w%W% hp Range25-75 AltSubmit vSL1 gGuiSetSL1
         , %StartVolume%
   X := ((W + PW + 40) // 2) -15
   Gui, Add, Button, x%X% w30 gGuiSetBTOK, OK
   Gui, Show, , Einstellungen
   Gui, +LastFound
   WinWaitActive
   WinWaitClose
   Return
   ; ---------------------------------------------------------------------------
   GuiSetClose:
   GuiSetEscape:
   Gui, Destroy
   Return
   ; ---------------------------------------------------------------------------
   GuiSetBTOK:
   Gui, +OwnDialogs
   Gui, SubMit, NoHide
   If (ED1 <> "") {
      If (!InStr(FileExist(ED1), "D")) {
         MsgBox, 16, Fehler, Das Startverzeichnis %ED1% ist ungültig!
         ControlFocus, , ahk_id %ED1ID%
         Return
      }
   }
   StartWithPrevSel := CB1
   StartFolder := ED1
   AskForSubfolders := CB2
   StartVolume := SL1
   INI_Write()
   GoSub, GuiSetClose
   Return
   ; ---------------------------------------------------------------------------
   GuiSetSL1:
   Gui, Submit, NoHide
   ControlSetText, , %SL1%, ahk_id %ED2ID%
   Return
   ; ---------------------------------------------------------------------------
   GuiSetBTSEL:
   Gui, +OwnDialogs
   FileSelectFolder, Folder, %StartFolder%, 0, % "Bitte Startordner auswählen:"
   If (!ErrorLevel) {
      ControlSetText, , %Folder%, ahk_id %ED1ID%
   }
   Return
}
; ------------------------------------------------------------------------------
; Hilfe-Gui für Hotkeys
; ------------------------------------------------------------------------------
Help_Hotkeys()
{
   Static TX1
   HotKeyHelp := ""
      . "Einige Funktionen des PMR lassen sich auch über Tastatur- bzw.`n"
      . "Mauskürzel bedienen. Sämtliche Kürzel werden mit der Kombination`n"
      . "Strg+Win(dowstaste) eingeleitet. Die folgende Tastenangabe`n"
      . "bezieht sich auf den Ziffernblock mit deutscher Belegung, Wheel`n"
      . "ist das Mausrad, LButton/RButton die linke/rechte Maustaste."
   HotkeyDesc := ""
      . "Strg+Win+WheelUp|Lautstärke erhöhen`n"
      . "Strg+Win++  (Plus)|Lautstärke erhöhen`n"
      . "|`n"
      . "Strg+Win+WheelDown|Lautstärke verringern`n"
      . "Strg+Win+-  (Minus)|Lautstärke verringern`n"
      . "|`n"
      . "Strg+Win+LButton|Nächster Titel`n"
      . "Strg+Win+Enter|Nächster Titel`n"
      . "|`n"
      . "Strg+Win+RButton|Abspielen beenden`n"
      . "Strg+Win+Entf  (.,)|Abspielen beenden`n"
      . "|`n"
      . "Strg+Win+Einfg  (0)|Mute: Lautstärke aus/an"
   Gui, 9:Default
   Gui, +Owner1 +Toolwindow +AlwaysOnTop +LabelGuiHelpHk
   Gui, Font, s10
   Gui, Margin, 10, 10
   Gui, Add, Picture, w32 h32 AltSubmit Icon5, USER32.DLL
   Gui, Add, Text, x+10 ym vTX1, % HotkeyHelp
   GuiControlGet, P, Pos, TX1
   W := PW + PX - 10
   StringSplit, Hotkey, HotkeyDesc, `n
   Gui, Add, ListView, xm y+10 w%w% r%Hotkey0% Grid Readonly NoSortHdr 0x2000
                     , Hotkey|Aktion
   Loop, % Hotkey0
   {
      StringSplit, Desc, Hotkey%A_Index%, |
      LV_Add("", Desc1, Desc2)
   }
   LV_ModifyCol(1, "AutoHdr")
   X := ((W + 20) // 2) - 20
   Gui, Add, Button, x%X% y+10 w40 Default gGuiHelpHkClose, OK
   Gui, Show, , Tastatur- und Mausbedienung
   Gui, +LastFound
   WinWaitActive
   WinWaitClose
   Return
   ; ---------------------------------------------------------------------------
   GuiHelpHkClose:
   GuiHelpHkEscape:
   Gui, Destroy
   Return
}


Was kann es zusätzlich:

Es kann eigene Playlisten verwalten (Menü "Playlist").
Es lässt zu, dass Listeneinträge mit Doppelrechtsklick gelöscht werden.
Es kann ausgewählte Dateien abspielen (CheckBox klicken).
Es kann die Dateien in "zufälliger" Reihenfolge abspielen.
Es kennt den "Panikstopp" auch beim Abspielen mehrerer Dateien.
Es lässt zu, dass die Fensterbreite verändert wird.

Ich habe versucht, es so gut wie möglich auszutesten, aber: "Nobody's perfekt!". So bitte ich Euch, es richtig zu quälen und mir die von Euch festgestellten Fehler oder Eure Änderungswünsche mitzuteilen. Ich werde dann sehen, was ich für Euch tun kann.

Update v2.1:

Benutzerdefinierte Voreinstellungen über Einstellungsfenster und INI-Datei
- Programmstart mit letzter Auswahl
- Startordner für das Hinzufügen von Ordner und Dateien
- Unterordner beim Hinzufügen von Ordnern berücksichtigen
- Lautstärke bei Programmstart
(Dank an garry)

Teilweise Bedienung über Tastatur- und Maushotkeys
- Siehe Hilfemenü -> Tastatur- und Mausbedienung
(Danke an DerRaphael, die Idee mit den Icons hatte ich noch nicht!)

Endloses Abspielen.
Im zufälligen Modus wird dabei jedes Mal eine neue Reihenfolge erzeugt.

Entfernen von mehreren mit Shift-Klick oder Ctrl-Klick ausgewählten Titeln per Doppelrechtsklick.
_________________
Hilfe zur Hilfe

(de)nick


Zuletzt bearbeitet von denick am Do Jan 17, 2008 6:31 am, insgesamt 5-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
garry



Anmeldedatum: 25.10.2005
Beiträge: 442
Wohnort: switzerland

BeitragVerfasst am: So Jan 13, 2008 10:33 pm    Titel: Antworten mit Zitat

Zitat:
damit es hier auch "Support" dafür gibt.

danke, sehr schön denick, nichts besseres zu tun ? Smile
erhielt Fehlermeldung
gegen Schluss , sollte Playlist heissen ( statt Playliste)
Menu, MenuBar, % Option, &Playlist
wünsche euch schönes Wochenend-Ende
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: So Jan 13, 2008 10:56 pm    Titel: Antworten mit Zitat

Moin garry,

es sind immer wieder die Änderungen in letzter Sekunde, die man dann doch nicht getestet hat. Sad Ist korrigiert!

Zitat:
danke, sehr schön denick, nichts besseres zu tun ?

Ist halt Wochenende! Wink
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
garry



Anmeldedatum: 25.10.2005
Beiträge: 442
Wohnort: switzerland

BeitragVerfasst am: Mo Jan 14, 2008 7:41 am    Titel: Antworten mit Zitat

danke, sehr schön , macht richtig Freude mal wieder Musik zu hören am Computer
schön übersichtlich, um es kompliziert zu machen , evtl paar (unnötige) Funktionen dazukleben:
-Anzeige des letzten gewählten Ordners/files bei start
-FileselectFolder , suche ab voreingestelltem Folder, evtl checkbox suche auch in subfolder
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
IsNull



Anmeldedatum: 20.12.2006
Beiträge: 1326
Wohnort: CH

BeitragVerfasst am: Mo Jan 14, 2008 8:16 am    Titel: Antworten mit Zitat

hehe, "Wünsch dir was" - finde ich gut Very Happy

Folgende Vorgeschichte:
Ich habe einige PCs/Lappis bei mir zu Hause stehen. Nun, mein Hauptrechner hat ne Macke an der Onboard-Soundkarte. Deswegen muss ich (und es ist wirklich ein Muss, da ich Musik brauche) einen anderen PC starten und dort meine Musik abspielen lassen^^ Nur muss ich zum bedienen des players immer zu der Kiste greifen. Und nen Remote-Desktop ist dafür aber auch irgendwie schade...

-> Nun, obwohl es sowas sicher irgendwo schon gibt, wäre eine Funktion, mit der man den player über ne tcp/ip Verbindung connecten und dann steuern könnte interessant. Im engl. Forum gibts einige client/server skripte, welche auf winsock aufbauen... Das wäre doch mal ne Herausforderung, denick Very Happy
_________________

http://securityvision.ch
www.forum.securityvision.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: Mo Jan 14, 2008 9:21 am    Titel: Antworten mit Zitat

@garry:
Das sollte machbar sein. Ich bin sowieso noch am Entwickeln.

@IsNull:
Das wäre wirklich eine Herausforderung. Ich schau es mir mal an, aber möglicherweise ist das eine Nummer zu groß.

Schaun wir mal! Wink
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ripp3r]D3[



Anmeldedatum: 11.11.2007
Beiträge: 743
Wohnort: Altenburg\Kernel32.dll

BeitragVerfasst am: Mo Jan 14, 2008 10:19 am    Titel: Antworten mit Zitat

Hatte schon mal einen ******* gecoded ich denke mit dem fernsteuern sollte kein Problem sein.

Ich werde mich mal an dem problem wagen xD

So zufrieden????
_________________

ResistantX:
"...In deren Köpfen läuft das selbe Programm welches auch bei den früheren Jahrgängen lief! Ich bin der Virus der diese Programme zerstören will..."


Zuletzt bearbeitet von Ripp3r]D3[ am Mo Jan 14, 2008 4:23 pm, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: Mo Jan 14, 2008 11:41 am    Titel: Antworten mit Zitat

Ripp3r]D3[ hat Folgendes geschrieben:
Hatte schon mal einen ****** gecoded ich denke mit dem fernsteuern sollte kein Problem sein.


Moin,

muss das hier sein? Shocked
Vielleicht nutz Du für sowas lieber eine PN. Exclamation
_________________
Hilfe zur Hilfe

(de)nick


Zuletzt bearbeitet von denick am Do Jan 17, 2008 6:37 am, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ripp3r]D3[



Anmeldedatum: 11.11.2007
Beiträge: 743
Wohnort: Altenburg\Kernel32.dll

BeitragVerfasst am: Mo Jan 14, 2008 3:25 pm    Titel: Antworten mit Zitat

Wieso net ist doch ein freies land oder Very Happy (guter witz)

Nochmal zu den rechnern sind die im netzwerk oder über i-net verbunden?
_________________

ResistantX:
"...In deren Köpfen läuft das selbe Programm welches auch bei den früheren Jahrgängen lief! Ich bin der Virus der diese Programme zerstören will..."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
IsNull



Anmeldedatum: 20.12.2006
Beiträge: 1326
Wohnort: CH

BeitragVerfasst am: Mo Jan 14, 2008 4:11 pm    Titel: Antworten mit Zitat

Du bist mir vielleicht ein Held... seit in Deutschland das neue "Hacker-Gesetz" wirk ist...

... die Herstellung...
.... der Vertrieb...
... sogar der Besitz...


...von hackertools strafbar.

Wenn du hier also so freigiebig solche Dinge rum erzählst, müsste evtl (kA) ein Admin od. Mod deine IP melden...und du müsstest mit Konsequenzen rechen. Also auch deinetwegen solltest du dich öffentlich mit solchen Sprüchen zurückhalten.
/ot:

Zitat:
Nochmal zu den rechnern sind die im netzwerk oder über i-net verbunden?
Das spielt doch keine Rolle, oder?
_________________

http://securityvision.ch
www.forum.securityvision.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: Di Jan 15, 2008 6:42 am    Titel: Antworten mit Zitat

Moin garry,

schau mal oben nach.
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
garry



Anmeldedatum: 25.10.2005
Beiträge: 442
Wohnort: switzerland

BeitragVerfasst am: Mi Jan 16, 2008 8:00 pm    Titel: Antworten mit Zitat

danke denick, vielen Dank für die Erstellung der gewünschten Funktionen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: Do Jan 17, 2008 6:39 am    Titel: Antworten mit Zitat

Moin,

v2.1 ist da (s.o.)!
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
garry



Anmeldedatum: 25.10.2005
Beiträge: 442
Wohnort: switzerland

BeitragVerfasst am: Do Jan 17, 2008 7:42 am    Titel: Antworten mit Zitat

vielen Dank, viel Arbeit dahinter, sieht optimal aus ....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de