benji791 a écrit:Je sais pas comment c'est fait mais dsplayer peut modifier les paramètres de madvr il me semble. Donc il doit bien y avoir moyen d'interagir avec le setup par programme.
Oui mais tu dois initialiser madvr, donc il faudrait créer une application qui utilise le renderer madvr.
Par exemple un player vidéo, ce qu'est finalement dsplayer, mais cela reste overkill comme approche.
Ce que peut faire kazuya, c'est de l'automatisation d'interface graphique ou uiautomation, notamment avec AutoIt.
J'ai retrouvé et adapté un vieux script AutoIt :
- Code: Tout sélectionner
#include <GuiTreeView.au3>
Global Const $sWindowClass = '[CLASS:TFMadVRSettings]'
Global Const $sProgramDest = 'C:\Program Files (x86)\LAV Filters\x64\madVR\'
Reset()
Start()
Sleep(1500)
SetDisplayType()
Sleep(1500)
SetDisplayLevels()
Sleep(1500)
Close()
Func Start()
; Kill current madvr processes to prevent some errors.
ProcessClose('madHcCtrl.exe')
; Start the application.
Run($sProgramDest & 'madHcCtrl.exe editLocalSettingsDontWait')
; Set the application window fully transparent.
WinWait($sWindowClass, '', 10)
WinSetTrans($sWindowClass, '', 100) ; set 0 for full transparency
EndFunc
Func Reset()
; Delete settings file.
FileDelete($sProgramDest & 'settings.bin')
; Delete madvr registry key.
RegDelete('HKEY_CURRENT_USER\Software\madshi\madVR')
EndFunc
Func Close()
Local $hWindow = WinGetHandle('[CLASS:TFMadVRSettings]');
Local $hApplyBtn = ControlGetHandle($hWindow, '', '[CLASSNN:TButton1]');
Local $hOkBtn = ControlGetHandle($hWindow, '', '[CLASSNN:TButton3]');
; Click on the apply button to save madvr settings.
If ControlCommand($hWindow, '', $hApplyBtn, 'IsEnabled') Then
ControlClick($hWindow, '', $hApplyBtn)
EndIf
; Click on the ok button to quit the application.
ControlClick($hWindow, '', $hOkBtn)
EndFunc
Func SetDisplayType($sName = '#0', $sType = 'Digital Monitor')
; Select the display device item.
ControlTreeView($sWindowClass, '', 'TTreeView1', 'Select', 'devices|' & $sName);
; Check the appropriated device type.
Switch $sType
Case 'Receiver', 'Processor', 'Switch'
ControlCommand($sWindowClass, '', 'TRadioButton6', 'Check')
Case 'Digital Monitor'
ControlCommand($sWindowClass, '', 'TRadioButton5', 'Check')
Case 'Digital Projector'
ControlCommand($sWindowClass, '', 'TRadioButton4', 'Check')
Case 'CRT Projector'
ControlCommand($sWindowClass, '', 'TRadioButton3', 'Check')
Case 'CRT Monitor'
ControlCommand($sWindowClass, '', 'TRadioButton2', 'Check')
EndSwitch
EndFunc
Func SetDisplayLevels($sName = '#0', $sLevels = 'TV')
; Select the display device properties item.
ControlTreeView($sWindowClass, '', 'TTreeView1', 'Select', 'devices|' & $sName & '|properties');
; Change the display device levels.
ControlCommand($sWindowClass, '', 'TComboBox4', 'SelectString', $sLevels);
EndFunc
Voici ce que le script fait :
- Il reset madvr.
- Il lance la fenêtre de madvr.
- Il rend la fenêtre transparente (mettre 0 lors du WinSetTrans pour la cacher complètement).
- Il change le type de l'écran (#0 le premier à apparaître dans l'interface graphique).
- Il change le niveau de l'écran (#0 le premier à apparaître dans l'interface graphique).
- Il applique les paramètres si nécessaire.
- Et enfin ferme la fenêtre.
Mon code d'exemple contient toutes les bases pour ensuite automatiser le reste de madvr.
La documentation d'AutoIt étant super claire, cela sera un jeu d'enfant pour kazuya.
Il suffira de créer un exécutable en ligne de commande qu'il pilotera depuis innosetup par exemple.
Pensez à modifier la variable $sProgramDest avec le chemin vers votre installation de madvr.
J'ai rajouté des sleep et modifié la transparence pour que vous puissiez voir le processus.
Une petite preview :