Je possède un caméscope numérique canon et lors de l'enregistrement chaque scène est un fichier, lors du transfert, l'utilitaire canon crée un sous dossier par jour.
Pour lire les vidéos il faut sélectionner fichier par fichier même pour des vidéos de 2 secondes ça devient vite barbant et cela gâche le plaisir.
J'ai donc conçût un script pour lire les vidéos à la suite comme dans un diaporama d’où le nom VIDEORAMA.
Les softs de lecture que j'ai testé ne se ferme pas après la lecture, je test le pourcentage d'occupation du cpu pour détecter la fin de la lecture. Pour VLC il faut tuer la tache
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; sortie sur Shift-Alt-d
HotKeySet("+!s", "_sortir")
#Region ### START Koda GUI section ### Form=F:\pi\videorama.kxf
Global $Form1_1 = GUICreate("VIDEORAMA", 624, 337, 192, 124)
GUISetBkColor(0x00FFFF)
Global $bt_lancer_video = GUICtrlCreateButton("Lancer la lecture des videos", 100, 276, 355, 53)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000000)
GUICtrlSetBkColor(-1, 0x00FF00)
Global $inp_programme = GUICtrlCreateInput("", 156, 200, 457, 21)
Global $Inp_extension = GUICtrlCreateInput("", 300, 132, 61, 21)
Global $Inp_pourcentage_process = GUICtrlCreateInput("", 300, 100, 61, 21)
Global $bt_dossier_video = GUICtrlCreateButton("Dossier des videos", 16, 60, 103, 25)
Global $Inp_dossier_video = GUICtrlCreateInput("", 144, 64, 469, 21)
Global $Check_tuer_la_tache = GUICtrlCreateCheckbox("Tuer la tache a la fin de la lecture", 368, 100, 193, 17)
Global $Inp_nom_de_la_tache = GUICtrlCreateInput("", 156, 224, 145, 21)
Global $Label1 = GUICtrlCreateLabel("Minumum de % du Procces pour passer à la video suivante", 12, 104, 282, 17)
Global $Label2 = GUICtrlCreateLabel("Extension des fichiers video. exemple mpg", 12, 132, 203, 17)
Global $bt_programme = GUICtrlCreateButton("Programme de lecture", 12, 196, 135, 25)
Global $Label3 = GUICtrlCreateLabel("Tache ou process à surveiller", 12, 228, 143, 17)
Global $Label4 = GUICtrlCreateLabel("Pour arreter la lecture tapez sur ALT SHIFT S ", 16, 24, 221, 17)
Global $inp_dossier_par_defaut = GUICtrlCreateInput("", 432, 24, 177, 21)
Global $Label5 = GUICtrlCreateLabel("Dossier par defaut", 320, 28, 90, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc"), $f_COMError = False
Global $avRET
Global $dossier_par_defaut
_lectureini()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $bt_dossier_video
$chemin = FileSelectFolder("Selectionner le dossier video", $dossier_par_defaut)
GUICtrlSetData($Inp_dossier_video, $chemin)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "dossier video", $chemin)
Case $inp_dossier_par_defaut
$dossier_par_defaut = GUICtrlRead($inp_dossier_par_defaut)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "dossier par defaut des videos", $dossier_par_defaut)
Case $Inp_dossier_video
$chemin = GUICtrlRead($Inp_dossier_video)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "dossier video", $chemin)
Case $bt_programme
$programme = FileOpenDialog("Choisisser le programme de lecture", "c:\", "(*.exe)")
GUICtrlSetData($inp_programme, $programme)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "Programme", $programme)
$var = StringSplit($programme, "\")
$tache = $var[$var[0]]
GUICtrlSetData($Inp_nom_de_la_tache, $tache)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "Process", $tache)
Case $Inp_nom_de_la_tache
$tache = GUICtrlRead($Inp_nom_de_la_tache)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "Process", $tache)
Case $Inp_extension
$extension = GUICtrlRead($Inp_extension)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "extension", $extension)
Case $Inp_pourcentage_process
If GUICtrlRead($Inp_pourcentage_process) < 0 Or GUICtrlRead($Inp_pourcentage_process) > 100 Then
Beep(500, 1000)
Else
$pourcentage = GUICtrlRead($Inp_pourcentage_process)
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "Pourcentage mini", $pourcentage)
EndIf
Case $Check_tuer_la_tache
If _IsChecked($Check_tuer_la_tache) Then
$tuer = "oui"
Else
$tuer = "non"
EndIf
IniWrite(@ScriptDir & "\videorama.ini", "parametre", "tuer la tache", $tuer)
Case $bt_lancer_video
_lecture()
EndSwitch
WEnd
Func _IsChecked($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_IsChecked
Func _lecture()
$search = FileFindFirstFile($chemin & "\*." & $extension)
$nombredefichier = 0
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$nombredefichier =$nombredefichier +1
WEnd
If $search = -1 Then
MsgBox(0, "Erreur", "Il n'y a pas de fichier video *." & $extension & " dans " & $chemin)
Return
EndIf
$search = FileFindFirstFile($chemin & "\*." & $extension)
For $i = 1 To $nombredefichier
$file = FileFindNextFile($search)
Run($programme & ' "' & $chemin & '\' & $file & '"', "")
Sleep(500)
$avRET = _ProcessListProperties($tache)
While $avRET[1][6] > $pourcentage
Sleep(100)
$avRET = _ProcessListProperties($tache)
ConsoleWrite($tache & "=" & $avRET[1][6] & @CRLF)
WEnd
If $tuer = "oui" Then
ProcessClose($tache)
Sleep(100)
EndIf
Next
FileClose($search)
EndFunc ;==>_lecture
Func _lectureini()
Global $dossier_par_defaut = IniRead(@ScriptDir & "\videorama.ini", "parametre", "dossier par defaut des videos", "")
Global $programme = IniRead(@ScriptDir & "\videorama.ini", "parametre", "Programme", "C:\Program Files\VideoLAN\VLC\vlc.exe")
Global $tache = IniRead(@ScriptDir & "\videorama.ini", "parametre", "Process", "vlc.exe")
Global $pourcentage = IniRead(@ScriptDir & "\videorama.ini", "parametre", "Pourcentage mini", 5)
Global $chemin = IniRead(@ScriptDir & "\videorama.ini", "parametre", "dossier video", "")
Global $extension = IniRead(@ScriptDir & "\videorama.ini", "parametre", "extension", "mts")
Global $tuer = IniRead(@ScriptDir & "\videorama.ini", "parametre", "tuer la tache", "oui")
GUICtrlSetData($inp_programme, $programme)
GUICtrlSetData($Inp_pourcentage_process, $pourcentage)
GUICtrlSetData($Inp_dossier_video, $chemin)
GUICtrlSetData($Inp_extension, $extension)
GUICtrlSetData($Inp_nom_de_la_tache, $tache)
GUICtrlSetData($inp_dossier_par_defaut, $dossier_par_defaut)
If $tuer = "oui" Then GUICtrlSetState($Check_tuer_la_tache, $GUI_CHECKED)
EndFunc ;==>_lectureini
Func MyErrFunc()
Local $HexNumber = Hex($oMyError.number, 8)
MsgBox(0, "", "Nous avons intercepté une erreur COM !" & @CRLF & _
"Nombre est: " & $HexNumber & @CRLF & _
"WinDescription est: " & $oMyError.windescription & @CRLF & _
"Source est: " & $oMyError.source & @CRLF & _
"Ligne du script est: " & $oMyError.scriptline)
$f_COMError = True; something to check for when this function returns
EndFunc ;==>MyErrFunc
Func _sortir()
Exit
EndFunc ;==>_sortir
;===============================================================================
; Function Name: _ProcessListProperties()
; Description: Get various properties of a process, or all processes
; Call With: _ProcessListProperties( [$Process [, $sComputer]] )
; Parameter(s): (optional) $Process - PID or name of a process, default is "" (all)
; (optional) $sComputer - remote computer to get list from, default is local
; Requirement(s): AutoIt v3.2.4.9+
; Return Value(s): On Success - Returns a 2D array of processes, as in ProcessList()
; with additional columns added:
; [0][0] - Number of processes listed (can be 0 if no matches found)
; [1][0] - 1st process name
; [1][1] - 1st process PID
; [1][2] - 1st process Parent PID
; [1][3] - 1st process owner
; [1][4] - 1st process priority (0 = low, 31 = high)
; [1][5] - 1st process executable path
; [1][6] - 1st process CPU usage
; [1][7] - 1st process memory usage
; [1][8] - 1st process creation date/time = "MM/DD/YYY hh:mm:ss" (hh = 00 to 23)
; [1][9] - 1st process command line string
; ...
; [n][0] thru [n][9] - last process properties
; On Failure: Returns array with [0][0] = 0 and sets @Error to non-zero (see code below)
; Author(s): PsaltyDS at http://www.autoitscript.com/forum
; Date/Version: 12/01/2009 -- v2.0.4
; Notes: If an integer PID or string process name is provided and no match is found,
; then [0][0] = 0 and @error = 0 (not treated as an error, same as ProcessList)
; This function requires admin permissions to the target computer.
; All properties come from the Win32_Process class in WMI.
; To get time-base properties (CPU and Memory usage), a 100ms SWbemRefresher is used.
;===============================================================================
Func _ProcessListProperties($process = "", $sComputer = ".")
Local $sUserName, $sMsg, $sUserDomain, $avProcs, $dtmDate
Local $avProcs[1][2] = [[0, ""]], $n = 1
; Convert PID if passed as string
If StringIsInt($process) Then $process = Int($process)
; Connect to WMI and get process objects
$oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy, (Debug)}!\\" & $sComputer & "\root\cimv2")
If IsObj($oWMI) Then
; Get collection processes from Win32_Process
If $process == "" Then
; Get all
$colProcs = $oWMI.ExecQuery("select * from win32_process")
ElseIf IsInt($process) Then
; Get by PID
$colProcs = $oWMI.ExecQuery("select * from win32_process where ProcessId = " & $process)
Else
; Get by Name
$colProcs = $oWMI.ExecQuery("select * from win32_process where Name = '" & $process & "'")
EndIf
If IsObj($colProcs) Then
; Return for no matches
If $colProcs.count = 0 Then Return $avProcs
; Size the array
ReDim $avProcs[$colProcs.count + 1][10]
$avProcs[0][0] = UBound($avProcs) - 1
; For each process...
For $oProc In $colProcs
; [n][0] = Process name
$avProcs[$n][0] = $oProc.name
; [n][1] = Process PID
$avProcs[$n][1] = $oProc.ProcessId
; [n][2] = Parent PID
$avProcs[$n][2] = $oProc.ParentProcessId
; [n][3] = Owner
If $oProc.GetOwner($sUserName, $sUserDomain) = 0 Then $avProcs[$n][3] = $sUserDomain & "\" & $sUserName
; [n][4] = Priority
$avProcs[$n][4] = $oProc.Priority
; [n][5] = Executable path
$avProcs[$n][5] = $oProc.ExecutablePath
; [n][8] = Creation date/time
$dtmDate = $oProc.CreationDate
If $dtmDate <> "" Then
; Back referencing RegExp pattern from weaponx
Local $sRegExpPatt = "\A(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(?:.*)"
$dtmDate = StringRegExpReplace($dtmDate, $sRegExpPatt, "$2/$3/$1 $4:$5:$6")
EndIf
$avProcs[$n][8] = $dtmDate
; [n][9] = Command line string
$avProcs[$n][9] = $oProc.CommandLine
; increment index
$n += 1
Next
Else
SetError(2); Error getting process collection from WMI
EndIf
; release the collection object
$colProcs = 0
; Get collection of all processes from Win32_PerfFormattedData_PerfProc_Process
; Have to use an SWbemRefresher to pull the collection, or all Perf data will be zeros
Local $oRefresher = ObjCreate("WbemScripting.SWbemRefresher")
$colProcs = $oRefresher.AddEnum($oWMI, "Win32_PerfFormattedData_PerfProc_Process" ).objectSet
$oRefresher.Refresh
; Time delay before calling refresher
Local $iTime = TimerInit()
Do
Sleep(20)
Until TimerDiff($iTime) >= 100
$oRefresher.Refresh
; Get PerfProc data
For $oProc In $colProcs
; Find it in the array
For $n = 1 To $avProcs[0][0]
If $avProcs[$n][1] = $oProc.IDProcess Then
; [n][6] = CPU usage
$avProcs[$n][6] = $oProc.PercentProcessorTime
; [n][7] = memory usage
$avProcs[$n][7] = $oProc.WorkingSet
ExitLoop
EndIf
Next
Next
Else
SetError(1); Error connecting to WMI
EndIf
; Return array
Return $avProcs
EndFunc ;==>_ProcessListProperties
A+ JL56