[Ex] Regarder la télé avec DVPiper

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
illwind33
Niveau 1
Niveau 1
Messages : 12
Enregistré le : sam. 27 févr. 2016 18:42
Localisation : toulouse
Status : Hors ligne

[Ex] Regarder la télé avec DVPiper

#1

Message par illwind33 » dim. 20 nov. 2016 18:02

Bonjour,

Modification du 2 dec 2016
j'ai réécrit 80% du prg (et en particulier la recherche initiale des multiplex)

http://www.cs.usyd.edu.au/~efax/DVPiper.html

un peu d'info
http://forum.hardware.fr/hfr/VideoSon/H ... 1207_1.htm

-------------------------------------------
ce que j'appris de tous ces soft TV:
http://www.tvnt.net/forum/les-softs-pou ... s-t19.html
la recherche initiale des chaines c'est très compliqué, la plupart n'y arrive pas, les 'meilleurs' : le média center de Win7 (mais je l'ai viré il y a 3 ans), les softs fourni avec les clés usb (mais ils sont très très lourd).
PouchinTVMod fait 1Mo, TOUS les autres soft TV vont de 30GO à 100GO

DVPiper trouve les 6 multiplex sur 2 clés et 5 sur l'avermedia (je reçois le même multiplex(fr2) de 2 endroits
Pouchin trouve (et encore pas tjrs) 5 multiplex sur 2 clés et 4 sur l'avermedia

recherche des multiplex: une boucle de 21 a 60
En UHF la règle de calcul est simple :
N° de canal x8 + 306 = Fréquence en Mhz , auquel il convient d'ajouter le shift décalage de 0,167 Mhz
Exemple canal 42 :
42 x 8 = 336 336+306 = 642 642+0,167 = 642,167Mhz

voir la fonction RechercheMultiplex()
-------------------------------------------

envoyer le signal TV sur le poste 192.168.1.200 (en udp) pour le lire avec un player type Vlc,SMplayer,MPC-HD...
DVPiper.exe -devicenum 1 -type DVB-T -frequency 522167 -bandwidth 8 -command record(rid(1237),progid(1031),buildpat,send(udp(192.168.1.200,1234)))"

liste des devices TNT il m'a trouvé mes 3 clés usb (avermedia,hautpage,conceptronic)
DVPiper.exe -listdevicexml

programme télé (epg)
DVPiper -devicenum 1 -type dvb-t -frequency 522167 -bandwidth 8 -epg "epg.xml"

recherche les chaines du multiplex
DVPiper.exe -devicenum 1 -type DVB-T -frequency 746167 -bandwidth 8 -command scan

enregistre la chaine 1031 (Arte) dans un fichier TS
DVPiper.exe -devicenum 1 -type DVB-T -frequency 522167 -bandwidth 8
-command "record(rid(1),progid(1031),buildpat,send(file('fichier.ts')))"


Qualité du signal du multiplex
DVPiper.exe -devicename "DVB-T Dongle" -type DVB-T -frequency 594167 -bandwidth 8 -command signal



je n'ai découvert ce prg que depuis peu, à part la doc du concepteur, il n'existe que peu de doc sur le web
mes compétences réseaux (multicast etc..) sont limitées, il y a certainement d'autres commandes à explorer
la prochaine étape sera de programmer des enregistrements histoire de concurrencer PoutchinTV http://www.pouchintv.fr/

A+



dir /b
474167.xml
498167.xml
522167.xml
578167.xml
594167.xml
610167.xml
746167.xml
device.xml
DVPiper.exe
DVPiperUDP.au3
horse.ani
install.bat
kangaroo bleu 32.ico
Streamer.dll
uninstall.bat
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=kangaroo bleu 32.ico
#AutoIt3Wrapper_UseX64=y
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;http://www.cs.usyd.edu.au/~efax/DVPiper.html
;
;un peu d'info
;http://forum.hardware.fr/hfr/VideoSon/HiFi-HomeCinema/dvpiper-streaming-tnt-sujet_121207_1.htm
;
;ce que j'appris de tous ces soft TV
;http://www.tvnt.net/forum/les-softs-pouchintv-vlc-wintv2k-et-autres-mediacenters-t19.html
;la recherche initiale des chaines c'est très compliqué, la plupart n'y arrive pas
;les 'meilleurs' : le média center de Win7 (mais je l'ai viré il y a 3 ans),
;les softs fourni avec les cle usb (mais ils sont trés trés lourd)
;PouchinTVMod fait 1Mo, TOUS les autres vont de 30GO à 100GO
;DVPiper trouve les 6 multiplex sur 2 cles et 5 sur l'avermedia
;Pouchin trouve (et encore pas tjrs) 5 multiplex sur 2 cles et 4 sur l'avermedia
;
;En UHF la règle de calcul est simple :
;N° de canal x8 + 306 = Fréquence en Mhz , auquel il convient d'ajouter le shift décalage de 0,167 Mhz
;Exemple canal 42 :
;42 x 8 = 336 ; 336+306 = 642 ; 642+0,167 = 642,167Mhz
;voir la fonction RechercheMultiplex()
;
;-------------------------------------------------
;envoyer le signal TV sur le poste 192.168.1.200 (en udp) pour le lire avec un player type Vlc(udp://@:1234),SMplayer,MPC-HD...
;DVPiper.exe -devicenum 1 -type DVB-T -frequency 522167 -bandwidth 8 -command "record(rid(1237),progid(1031),buildpat,send(udp(192.168.1.200,1234)))"
;perso je lis sans probleme du 1920x1080 sur un reseau en cpl
;
;liste des devices TNT (BDA) il m'a trouve mes 3 cles usb (avermedia,hautpage,conceptronic)
;DVPiper.exe -listdevicexml
;
;les programmes tele (epg)
;DVPiper -devicenum 1 -type dvb-t -frequency 522167 -bandwidth 8 -epg "epg.xml"
;
;recherche les canaux du multiplex
;DVPiper.exe -devicenum 1 -type DVB-T -frequency 746167 -bandwidth 8 -command scan
;
;enregistre le canal 1031 (Arte) dans un fichier TS
;DVPiper.exe -devicenum 1 -type DVB-T -frequency 522167 -bandwidth 8 _
;-command "record(rid(1),progid(1031),buildpat,send(file('fichier.ts')))"
;
;Qualite du signal du multiplex
;DVPiper.exe -devicename "DVB-T Dongle" -type DVB-T -frequency 594167 -bandwidth 8 -command signal
;
;regexp un grand merci a mikell https://autoitscript.fr/forum
;

#include <GuiListView.au3>
#include <GuiButton.au3>
#include <TrayConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>
#include <array.au3>
#include <File.au3> ;_FileWriteFromArray
#include <_XML.au3> ;https://www.autoitscript.com/forum/files/file/358-xmlau3-formerly-xmlwrapperexau3/

Opt('MustDeclareVars', 1)
Opt("GUIOnEventMode", 1)
Opt("GUICloseOnESC", 0)
Opt("TrayMenuMode", 3)
Opt("TrayOnEventMode", 1)

Global Const $shorse = @ScriptDir & '\horse.ani' ;l'icone horse anime ....\AutoIt3\Examples\Helpfile\Extras\horse.ani
Global Const $g_sDVPiper = @ScriptDir & '\DVPiper.exe'
Global Const $g_sIP = '192.168.1.100|192.168.1.101|192.168.1.102' ; mes 3 PC (win7 pro)
Global Const $g_sdevicexml = @ScriptDir & '\device.xml' ; fichier xml des tuner TNT a creer dans le menu de la GUI

Global Const $g_iW = 700, $g_iH = 300
Global $g_iPID, $g_hListView, $g_hGui, $g_idComboIP, $g_idComboDevice, $g_idComboFernsehKanal
Global $g_idBtnAnhalten, $g_idBtnStart, $g_idani, $g_hCopy


Init()

While 1
        Sleep(100)
WEnd

Func Init()

        GUI()
        Tray()

        If Not FileExists(@ScriptDir & '\log\') Then DirCreate(@ScriptDir & '\log\')
        ComboDevice() ;combo dongle TNT
        If Not @error Then ComboFernsehKanal() ;combo chaines

EndFunc   ;==>Init

Func SignalQualitat() ;Qualite du signal du multiplex
        ;DVPiper.exe -devicename "DVB-T Dongle" -type DVB-T -frequency 594167 -bandwidth 8 -command signal
        Local $i, $T, $scmd, $sdevice, $sfreq

        GUICtrlSetImage($g_idani, $shorse)
        _GUICtrlButton_Enable($g_idBtnStart, False) ;empeche d'appuyer sur start

        $sdevice = '-log .\log\SignalQualitat.log -devicename ' & Cote(GUICtrlRead($g_idComboDevice))
        $sfreq = GUICtrlRead($g_idComboFernsehKanal)
        $sfreq = StringRegExpReplace($sfreq, '(.*bandwidth \d).*', '${1}') ;-type DVB-T -frequency 522167 -bandwidth 8........

        $scmd = $g_sDVPiper & ' ' & $sdevice & ' ' & $sfreq & ' -command signal'
        $T = StdoutR($scmd, 0) ; 0 = ne pas attendre que le process s'arrete

        $i = srch($T, 'Strength') ; recupere la force du signal
        Switch $i
                Case -1
                        WinSetTitle($g_hGui, '', 'Pas de signal')
                Case Else
                        WinSetTitle($g_hGui, '', $T[$i])
        EndSwitch

        StdinWrite($g_iPID, 'stopany' & @CRLF) ;envoie des commandes a DVPiper pour l'arreter
        Sleep(1000 * 2)
        StdinWrite($g_iPID, 'exit' & @CRLF)

        GUICtrlSetImage($g_idani, "shell32.dll", 253)
        _GUICtrlButton_Enable($g_idBtnStart, True) ; on peut appuyer sur start
EndFunc   ;==>SignalQualitat

Func Starten() ; demarre un send(udp(192.168....
        ;DVPiper.exe -devicenum 2 -type DVB-T -frequency 746167 -bandwidth 8
        ;-command "record(rid(1237),progid(262),buildpat,send(udp(192.168.1.200,1234)))"

        Local $i, $T, $scmd, $sout, $sdevice, $sfreq, $sprogid, $sIP

        _GUICtrlButton_Enable($g_idBtnStart, False) ; empeche de reappuyer
        GUICtrlSetImage($g_idani, $shorse)

        $sIP = GUICtrlRead($g_idComboIP)
        $sdevice = ' -log .\log\send_udp.log -devicename ' & Cote(GUICtrlRead($g_idComboDevice))
        $sfreq = GUICtrlRead($g_idComboFernsehKanal)
        $sfreq = StringRegExpReplace($sfreq, '(.*bandwidth \d).*', '${1}')
        $sprogid = GUICtrlRead($g_idComboFernsehKanal)
        $sprogid = StringRegExpReplace($sprogid, '.*bandwidth \d (\d{1,4}) .*', '${1}')

        $scmd = $g_sDVPiper & ' ' & $sdevice & ' ' & $sfreq & _
                        ' -signalstart -command "record(rid(1237),progid(' & $sprogid & '),buildpat,send(udp(' & $sIP & ',1234)))"'

        $T = StdoutR($scmd, 0) ;ne pas attendre que le process s'arrete
        $i = srch($T, 'Strength') ; recupere la force du signal
        Switch $i
                Case -1
                        WinSetTitle($g_hGui, '', 'Pas de signal')
                Case Else
                        WinSetTitle($g_hGui, '', $T[$i])
        EndSwitch
        AdlibRegister("StdoutDVPiper", 1000 * 5) ; lit le stdout toutes les 5s

EndFunc   ;==>Starten

Func StdoutDVPiper() ;recupere le Stdout pour l'afficher et verifie que ProcessExists("DVPiper.exe")
        Local $icount, $sout = StdoutRead($g_iPID)

        If $sout <> '' Then
                _GUICtrlListView_AddItem($g_hListView, $sout)
                $icount = _GUICtrlListView_GetItemCount($g_hListView)
                _GUICtrlListView_Scroll($g_hListView, 0, $icount)
        EndIf

        If Not ProcessExists($g_iPID) Then
                _GUICtrlButton_Enable($g_idBtnStart, True)
                GUICtrlSetImage($g_idani, "shell32.dll", 253)
                AdlibUnRegister("StdoutDVPiper")
        EndIf
EndFunc   ;==>StdoutDVPiper

Func Anhalten() ;envoie des commandes a DVPIper pour l'arreter
        ErreurNonFatale("Stoppe dans 10s", $g_hGui)
        _GUICtrlButton_Enable($g_idBtnStart, True)
        GUICtrlSetImage($g_idani, "shell32.dll", 253)
        If Not ProcessExists('DVPiper.exe') Then Return

        StdinWrite($g_iPID, 'stopany' & @CRLF)
        Sleep(1000 * 5)
        StdinWrite($g_iPID, 'exit' & @CRLF)
        AdlibUnRegister("StdoutDVPiper")
EndFunc   ;==>Anhalten

Func ComboDevice() ; rempli le combo device avec le fichier device.xml
        If Not FileExists($g_sdevicexml) Then
                ErreurNonFatale("(Menu) Commencer par chercher le(s) Tuner TNT/DVB-T", $g_hGui)
                Return SetError(1, 0, '')
        EndIf

        Local $i, $T = SelectNodes($g_sdevicexml, '/devices/device/name')
        If @error Then Return SetError(1, 0, '')

        $i = 1
        While 1
                GUICtrlSetData($g_idComboDevice, $T[$i][3])
                $i += 1
                If $i > UBound($T) - 1 Then ExitLoop
        WEnd
        ;ControlCommand($g_hGui, '', $g_idComboDevice, "SetCurrentSelection", 0)
        GUICtrlSetData($g_idComboDevice, "DVB-T Dongle", "DVB-T Dongle")

EndFunc   ;==>ComboDevice

Func ComboFernsehKanal() ;rempli le combo chaines avec les fichiers *167.xml......
        Local $selement, $sfreq, $aenum

        $aenum = _FileListToArray(@ScriptDir, '*167.xml', 1, 0)
        $aenum = DeleteBlankLine($aenum)
        If @error Then
                ErreurNonFatale('(Menu) Commencer par chercher les Multiplex (15-20mn)', $g_hGui)
                Return SetError(1, 0, '')
        EndIf

        For $selement In $aenum
                $sfreq = Frequenz($selement)
                Kanal($selement, $sfreq)
        Next
        ControlCommand($g_hGui, '', $g_idComboFernsehKanal, "SetCurrentSelection", 0)
EndFunc   ;==>ComboFernsehKanal

Func Frequenz($selement)
        ;a priori l'UDF XML ne sait pas lire des 'nodes' tel que
        ;programs date="20161118003625 +0000" generator-info-name="DVPiper" networkType="DVB-T" frequency="522167" bandwidth="8"
        ;donc je fais des RegExp

        Local $sfreq, $snode = "/programs"
        Local $T = SelectNodes($selement, $snode)
        If @error Then Return SetError(1, 0, '')

        ;<programs date="20161120040859 +0000" generator-info-name="DVPiper" networkType="DVB-T" frequency="594167" bandwidth="8">
        ;<program id="1537" name="TF1" provider="SMR6" access="FTA" originalNetworkId="8442" transportStreamId="6">
        ;       <packet pid="100" type="PMT"/>
        ;.....

        ;ad($T)

        $sfreq = $T[1][5]
        $sfreq = StringRegExpReplace($sfreq, '(.*)\s.*', '${1}') ; ne garde que la premiere ligne
        ;<programs date="20161118003625 +0000" generator-info-name="DVPiper" networkType="DVB-T" frequency="522167" bandwidth="8">

        $sfreq = StringRegExpReplace($sfreq, '.*DVPiper"(.*)>', '${1}')
        $sfreq = StringRegExpReplace($sfreq, '="', ' ')
        $sfreq = StringRegExpReplace($sfreq, '"', '')
        $sfreq = StringRegExpReplace($sfreq, 'networkType', '-type')
        $sfreq = StringRegExpReplace($sfreq, 'frequency', '-frequency')
        $sfreq = StringRegExpReplace($sfreq, 'bandwidth', '-bandwidth')
        ;cw($sfreq)

        Return $sfreq
EndFunc   ;==>Frequenz

Func Kanal($selement, $sfreq) ; rempli le combo chaines
        Local $T, $sKanal, $spattern

        Local $snode = "/programs/program"
        $T = SelectNodes($selement, $snode)
        If @error Then Return SetError(1, 0, '')

        ;ad($T)
        For $i = 1 To UBound($T) - 1
                ;<program id="1025" name="M6" provider="Multi4"......
                $sKanal = $T[$i][5]
                $sKanal = StringRegExpReplace($sKanal, '(.*)\s.*', '${1}')
                $spattern = '<program id="(.*)" name="(.*)" provider.*'
                $sKanal = StringRegExpReplace($sKanal, $spattern, '${1} ${2}')
                $sKanal = $sfreq & ' ' & $sKanal
                GUICtrlSetData($g_idComboFernsehKanal, $sKanal)
        Next
EndFunc   ;==>Kanal

Func DeviceXml() ;DVPiper.exe -listdevicexml
        Local $scmd, $i, $T

        GUICtrlSetData($g_idComboDevice, '')

        FileDelete($g_sdevicexml)
        $scmd = $g_sDVPiper & ' -log .\log\Device.log -input BDA -type dvb-t -listdevicexml -emptyexit '

        $T = StdoutR($scmd)
        If Not IsArray($T) Then
                ErreurFatale('ne trouve pas de clé tnt')
        EndIf

        ;retour de la commande:
        ;
        ;Parameters: DVPiper.exe -log .\log\Device.log -input BDA -type dvb-t -listdevicexml -emptyexit
        ;2016/11/21 09:53:10.307: Set type: DVB-T
        ;<devices>
        ;<device><id>1</id><name>DVB-T

        For $i = 0 To UBound($T) - 1
                $T[$i] = StringRegExpReplace($T[$i], '^[^<].*', '') ; supprime tout ce qui ne commence par <
        Next

        $T = DeleteBlankLine($T)
        If Not IsArray($T) Then
                ErreurFatale('ne trouve pas de clé tnt')
        EndIf

        Local $hFileOpen = FileOpen($g_sdevicexml, 2 + 128) ; write+utf8
        _FileWriteFromArray($hFileOpen, $T)
        FileClose($hFileOpen)
        ComboDevice() ; rempli le combo device avec le fichier device.xml
EndFunc   ;==>DeviceXml

Func RechercheMultiplex()
        Local $sdevice = '-devicename ' & Cote(GUICtrlRead($g_idComboDevice)) ; avec quelle cle usb
        Local $scmd, $i, $T, $ifreq, $sxml

        GUICtrlSetData($g_idComboFernsehKanal, '') ; efface les anciens multiplex

        If _GUICtrlComboBox_GetCount($g_idComboDevice) = 0 Then
                ErreurNonFatale('Commencer par DeviceXml', $g_hGui)
                Return SetError(1, 0, '')
        EndIf

        GUICtrlSetImage($g_idani, $shorse)
        _GUICtrlButton_Enable($g_idBtnStart, False) ; empeche d'appuyer sur le button bleu

        Local $hTimer = TimerInit()

        For $i = 21 To 60
                ;http://www.tvnt.net/forum/tableau-de-conversion-des-canaux-uhf-en-frequences-t23059.html
                ;( Canal x 8 ) + 306 +0.167 = Fréquence (MHz)
                $ifreq = ((($i * 8) + 306) + 0.167) * 1000
                $sxml = $ifreq & '.xml'

                $scmd = $g_sDVPiper & ' ' & $sdevice & _
                                ' -log .\log\Multiplex.log -type dvb-t -frequency ' & _
                                $ifreq & ' -bandwidth 8 -command scan(filedec(' & _
                                Cote($sxml) & ')) -emptyexit'
                ;DVPiper.exe -devicenum 2 -type DVB-T -frequency 522167 -bandwidth 8 -command scan(filedec('522167.xml'))

                StdoutR($scmd) ;creer le fichier $sfreq.xml
                If FileGetSize($sxml) < 10 Then FileDelete($sxml) ; un fichier normal fait plus de 4000
        Next

        _GUICtrlListView_AddItem($g_hListView, Round((TimerDiff($hTimer) / 1000 / 60)) & 'mn')
        _GUICtrlListView_AddItem($g_hListView, '')

        Run('rundll32 user32.dll,MessageBeep')

        ComboFernsehKanal() ;rempli le combo FernsehKanal avec les fichiers $sfreq.xml

        GUICtrlSetImage($g_idani, "shell32.dll", 253)
        _GUICtrlButton_Enable($g_idBtnStart, True) ; on peut appuyer sur start
EndFunc   ;==>RechercheMultiplex

Func StdoutR($scmd, $sProcessClose = 1)
        ;parfois la cmd ne s'arrete jamais par ex un send(udp:168.....)
        ;c'est à moi de l'arreter avec un StdinWrite($g_iPID, 'stopany' & @CRLF)

        Local $icount, $sout, $serr, $T
        $scmd = StringStripWS($scmd, 7) ; double space
        _GUICtrlListView_AddItem($g_hListView, $scmd)
        _GUICtrlListView_AddItem($g_hListView, '')
        $icount = _GUICtrlListView_GetItemCount($g_hListView)
        _GUICtrlListView_Scroll($g_hListView, 0, $icount)

        $g_iPID = Run($scmd, "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

        Switch $sProcessClose
                Case 1
                        ProcessWaitClose($g_iPID)
                Case 0
                        Sleep(1000 * 10) ; attend un peu que la cmd envoie des infos
        EndSwitch

        While 1
                $sout = StdoutRead($g_iPID)
                If @error Then ExitLoop
                If $sout <> '' Then
                        $T = StringSplit($sout, @CRLF, 2)
                        $T = DeleteBlankLine($T)
                        Return $T
                EndIf
        WEnd

EndFunc   ;==>StdoutR

Func GUI()
        Local $T, $iStyle, $iexStyle

        $iStyle = -1
        $g_hGui = GUICreate('DVPiper --> send(udp(192.168.x.xxx,1234))', $g_iW, $g_iH, 1, 1, $iStyle)
        GUISetOnEvent($GUI_EVENT_CLOSE, "Fertig", $g_hGui)

        ;----------------------------- Menu
        Local $idFilemenu = GUICtrlCreateMenu("&Menu")
        GUICtrlCreateMenuItem("Qualité du signal", $idFilemenu)
        GUICtrlSetOnEvent(-1, "SignalQualitat")
        GUICtrlCreateMenuItem('', $idFilemenu)
        GUICtrlCreateMenuItem("Chercher le(s) Tuner TNT/DVB-T", $idFilemenu)
        GUICtrlSetOnEvent(-1, "DeviceXml")
        GUICtrlCreateMenuItem("Chercher les Multiplex (60s x 40canaux)", $idFilemenu)
        GUICtrlSetOnEvent(-1, "RechercheMultiplex")
        GUICtrlCreateMenuItem("Suivi", $idFilemenu)
        GUICtrlSetOnEvent(-1, "Mini")

        ;----------------------------- Button
        $g_idBtnStart = GUICtrlCreateButton('', 5, 5, 32, 32, BitOR($BS_DEFPUSHBUTTON, $BS_ICON))
        GUICtrlSetOnEvent($g_idBtnStart, "Starten")
        GUICtrlSetTip($g_idBtnStart, 'Envoyer le signal TV sur le poste 192.168.....')
        GUICtrlSetImage($g_idBtnStart, 'shell32.dll', 221, 1)

        $g_idBtnAnhalten = GUICtrlCreateButton('', l($g_idBtnStart), 5, 32, 32, $BS_ICON)
        GUICtrlSetOnEvent($g_idBtnAnhalten, "Anhalten")
        GUICtrlSetTip($g_idBtnAnhalten, 'Cesser le flux udp')
        GUICtrlSetImage($g_idBtnAnhalten, 'shell32.dll', 28, 1)

        ;----------------------------- icon
        $g_idani = GUICtrlCreateIcon("shell32.dll", 253, l($g_idBtnAnhalten), 5, 32, 32)

        ;----------------------------- Combo
        $g_idComboIP = GUICtrlCreateCombo('', l($g_idani), 5, $g_iW / 6, 20, 0x0003)
        GUICtrlSetData($g_idComboIP, $g_sIP)
        ControlCommand($g_hGui, '', $g_idComboIP, "SetCurrentSelection", 2) ;

        $g_idComboDevice = GUICtrlCreateCombo('', l($g_idComboIP), 5, $g_iW / 6, 20) ;, 0x0003)
        $T = ControlGetPos($g_hGui, '', $g_idComboDevice)
        $g_idComboFernsehKanal = GUICtrlCreateCombo('', l($g_idComboDevice), 5, $g_iW - ($T[0] + $T[2]) - 10, 20) ;, 0x0003)

        ;----------------------------- listview
        $T = ControlGetPos($g_hGui, '', $g_idBtnStart)

        $iStyle = -1
        $iexStyle = -1
        $g_hListView = GUICtrlCreateListView('', 5, t($g_idBtnStart), $g_iW - 10, $g_iH - ($T[1] + $T[3]) - 50, $iStyle, $iexStyle)
        ;$g_hListView = ControlGetHandle($g_hGui, '', $g_hListView)
        _GUICtrlListView_AddColumn($g_hListView, 'command:', $g_iW - 20)

        $g_hCopy = GUICtrlCreateButton("Copy Selected", 5, t($g_hListView), $g_iW - 10, 20)
        GUICtrlSetOnEvent(-1, "SuiviClip")

        GUISetState(@SW_SHOW, $g_hGui)

EndFunc   ;==>GUI

Func SuiviClip() ; copie une commande dans le presse-papier
        Local $string, $T

;~      $string=ControlListView ($g_hGUISuivi,'',$g_hListView, "GetSelected")
;~      cw(@error&@TAB&$string)

;~      $idx=_GUICtrlListView_GetHotItem ($g_hListView)
;~      $string= _GUICtrlListView_GetItemText ($g_hListView, $idx)
;~      cw($idx&@TAB&$string)

        $T = _GUICtrlListView_GetSelectedIndices($g_hListView, True)
        $string = _GUICtrlListView_GetItemText($g_hListView, $T[1])

        ClipPut($string)

EndFunc   ;==>SuiviClip

Func Mini() ;cache la listview
        Local $T = WinGetPos($g_hGui)
        cw($T[3])
        Select
                Case $T[3] > 100
                        ControlHide($g_hGui, '', $g_hListView)
                        ControlHide($g_hGui, '', $g_hCopy)
                        WinMove($g_hGui, '', Default, Default, Default, 80)
                Case Else
                        WinMove($g_hGui, '', Default, Default, Default, $g_iH)
                        ControlShow($g_hGui, '', $g_hListView)
                        ControlShow($g_hGui, '', $g_hCopy)
        EndSelect
EndFunc   ;==>Mini

Func SelectNodes($sfile, $snode)
        ;cw($sfile&@tab&$snode)
        If Not FileExists($sfile) Then Return SetError(1, 0, '')

        Local $oErrorHandler = ObjEvent("AutoIt.Error", ErrFunc_CustomUserHandler_MAIN)
        #forceref $oErrorHandler

        ; first you must create $oXmlDoc object
        Local $oXMLDoc = _XML_CreateDOMDocument(Default)
        If @error Then
                wt(XML_My_ErrorParser(@error))
                Return SetError(1, 0, '')
        EndIf

        ; now you can add EVENT Handler
        Local $oXMLDOM_EventsHandler = ObjEvent($oXMLDoc, "XML_DOM_EVENT_")
        #forceref $oXMLDOM_EventsHandler

        ; Load file to $oXmlDoc
        Local $sXmlFile = $sfile
        _XML_Load($oXMLDoc, $sXmlFile)
        If @error Then
                wt(XML_My_ErrorParser(@error))
                Return SetError(1, 0, '')
        EndIf

        ;simple display $oXmlDoc - for checking only
        _XML_TIDY($oXMLDoc)
        If @error Then
                wt(XML_My_ErrorParser(@error))
                Return SetError(1, 0, '')
        EndIf

        Local $oNodesColl = _XML_SelectNodes($oXMLDoc, $snode)
        If @error Then
                wt(XML_My_ErrorParser(@error))
                Return SetError(1, 0, '')
        EndIf

        Local $aNodesColl = _XML_Array_GetNodesProperties($oNodesColl)
        If @error Then
                wt(XML_My_ErrorParser(@error))
                Return SetError(1, 0, '')
        EndIf

        ;ad($aNodesColl)
        Return $aNodesColl
EndFunc   ;==>SelectNodes

; #FUNCTION# ====================================================================================================================
; Name ..........: XML_My_ErrorParser
; Description ...: Changing $XML_ERR_ ... to human readable description
; Syntax ........: XML_My_ErrorParser($iXMLWrapper_Error, $iXMLWrapper_Extended)
; Parameters ....: $iXMLWrapper_Error   - an integer value.
;                  $iXMLWrapper_Extended           - an integer value.
; Return values .: description as string
; Author ........: mLipok
; Modified ......:
; Remarks .......: This function is only example of how user can parse @error and @extended to human readable description
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func XML_My_ErrorParser($iXMLWrapper_Error, $iXMLWrapper_Extended = 0)
        Local $XML_ERR_OK, $sErrorInfo = ''
        Switch $iXMLWrapper_Error
                Case $XML_ERR_OK
                        $sErrorInfo = '$XML_ERR_OK=' & $XML_ERR_OK & @CRLF & 'All is ok.'
                Case $XML_ERR_GENERAL
                        $sErrorInfo = '$XML_ERR_GENERAL=' & $XML_ERR_GENERAL & @CRLF & 'The error which is not specifically defined.'
                Case $XML_ERR_COMERROR
                        $sErrorInfo = '$XML_ERR_COMERROR=' & $XML_ERR_COMERROR & @CRLF & 'COM ERROR OCCURED. Check @extended and your own error handler function for details.'
                Case $XML_ERR_ISNOTOBJECT
                        $sErrorInfo = '$XML_ERR_ISNOTOBJECT=' & $XML_ERR_ISNOTOBJECT & @CRLF & 'No object passed to function'
                Case $XML_ERR_INVALIDDOMDOC
                        $sErrorInfo = '$XML_ERR_INVALIDDOMDOC=' & $XML_ERR_INVALIDDOMDOC & @CRLF & 'Invalid object passed to function'
                Case $XML_ERR_INVALIDATTRIB
                        $sErrorInfo = '$XML_ERR_INVALIDATTRIB=' & $XML_ERR_INVALIDATTRIB & @CRLF & 'Invalid object passed to function.'
                Case $XML_ERR_INVALIDNODETYPE
                        $sErrorInfo = '$XML_ERR_INVALIDNODETYPE=' & $XML_ERR_INVALIDNODETYPE & @CRLF & 'Invalid object passed to function.'
                Case $XML_ERR_OBJCREATE
                        $sErrorInfo = '$XML_ERR_OBJCREATE=' & $XML_ERR_OBJCREATE & @CRLF & 'Object can not be created.'
                Case $XML_ERR_NODECREATE
                        $sErrorInfo = '$XML_ERR_NODECREATE=' & $XML_ERR_NODECREATE & @CRLF & 'Can not create Node - check also COM Error Handler'
                Case $XML_ERR_NODEAPPEND
                        $sErrorInfo = '$XML_ERR_NODEAPPEND=' & $XML_ERR_NODEAPPEND & @CRLF & 'Can not append Node - check also COM Error Handler'
                Case $XML_ERR_PARSE
                        $sErrorInfo = '$XML_ERR_PARSE=' & $XML_ERR_PARSE & @CRLF & 'Error: with Parsing objects, .parseError.errorCode=' & $iXMLWrapper_Extended & ' Use _XML_ErrorParser_GetDescription() for get details.'
                Case $XML_ERR_PARSE_XSL
                        $sErrorInfo = '$XML_ERR_PARSE_XSL=' & $XML_ERR_PARSE_XSL & @CRLF & 'Error with Parsing XSL objects .parseError.errorCode=' & $iXMLWrapper_Extended & ' Use _XML_ErrorParser_GetDescription() for get details.'
                Case $XML_ERR_LOAD
                        $sErrorInfo = '$XML_ERR_LOAD=' & $XML_ERR_LOAD & @CRLF & 'Error opening specified file.'
                Case $XML_ERR_SAVE
                        $sErrorInfo = '$XML_ERR_SAVE=' & $XML_ERR_SAVE & @CRLF & 'Error saving file.'
                Case $XML_ERR_PARAMETER
                        $sErrorInfo = '$XML_ERR_PARAMETER=' & $XML_ERR_PARAMETER & @CRLF & 'Wrong parameter passed to function.'
                Case $XML_ERR_ARRAY
                        $sErrorInfo = '$XML_ERR_ARRAY=' & $XML_ERR_ARRAY & @CRLF & 'Wrong array parameter passed to function. Check array dimension and conent.'
                Case $XML_ERR_XPATH
                        $sErrorInfo = '$XML_ERR_XPATH=' & $XML_ERR_XPATH & @CRLF & 'XPath syntax error - check also COM Error Handler.'
                Case $XML_ERR_NONODESMATCH
                        $sErrorInfo = '$XML_ERR_NONODESMATCH=' & $XML_ERR_NONODESMATCH & @CRLF & 'No nodes match the XPath expression'
                Case $XML_ERR_NOCHILDMATCH
                        $sErrorInfo = '$XML_ERR_NOCHILDMATCH=' & $XML_ERR_NOCHILDMATCH & @CRLF & 'There is no Child in nodes matched by XPath expression.'
                Case $XML_ERR_NOATTRMATCH
                        $sErrorInfo = '$XML_ERR_NOATTRMATCH=' & $XML_ERR_NOATTRMATCH & @CRLF & 'There is no such attribute in selected node.'
                Case $XML_ERR_DOMVERSION
                        $sErrorInfo = '$XML_ERR_DOMVERSION=' & $XML_ERR_DOMVERSION & @CRLF & 'DOM Version: ' & 'MSXML Version ' & $iXMLWrapper_Extended & ' or greater required for this function'
                Case $XML_ERR_EMPTYCOLLECTION
                        $sErrorInfo = '$XML_ERR_EMPTYCOLLECTION=' & $XML_ERR_EMPTYCOLLECTION & @CRLF & 'Collections of objects was empty'
                Case $XML_ERR_EMPTYOBJECT
                        $sErrorInfo = '$XML_ERR_EMPTYOBJECT=' & $XML_ERR_EMPTYOBJECT & @CRLF & 'Object is empty'
                Case Else
                        $sErrorInfo = '=' & $iXMLWrapper_Error & @CRLF & 'NO ERROR DESCRIPTION FOR THIS @error'
        EndSwitch

        Local $sExtendedInfo = ''
        Switch $iXMLWrapper_Error
                Case $XML_ERR_COMERROR, $XML_ERR_NODEAPPEND, $XML_ERR_NODECREATE
                        $sExtendedInfo = 'COM ERROR NUMBER (@error returned via @extended) =' & $iXMLWrapper_Extended
                Case $XML_ERR_PARAMETER
                        $sExtendedInfo = 'This @error was fired by parameter: #' & $iXMLWrapper_Extended
                Case Else
                        Switch $iXMLWrapper_Extended
                                Case $XML_EXT_DEFAULT
                                        $sExtendedInfo = '$XML_EXT_DEFAULT=' & $XML_EXT_DEFAULT & @CRLF & 'Default - Do not return any additional information'
                                Case $XML_EXT_XMLDOM
                                        $sExtendedInfo = '$XML_EXT_XMLDOM=' & $XML_EXT_XMLDOM & @CRLF & '"Microsoft.XMLDOM" related Error'
                                Case $XML_EXT_DOMDOCUMENT
                                        $sExtendedInfo = '$XML_EXT_DOMDOCUMENT=' & $XML_EXT_DOMDOCUMENT & @CRLF & '"Msxml2.DOMDocument" related Error'
                                Case $XML_EXT_XSLTEMPLATE
                                        $sExtendedInfo = '$XML_EXT_XSLTEMPLATE=' & $XML_EXT_XSLTEMPLATE & @CRLF & '"Msxml2.XSLTemplate" related Error'
                                Case $XML_EXT_SAXXMLREADER
                                        $sExtendedInfo = '$XML_EXT_SAXXMLREADER=' & $XML_EXT_SAXXMLREADER & @CRLF & '"MSXML2.SAXXMLReader" related Error'
                                Case $XML_EXT_MXXMLWRITER
                                        $sExtendedInfo = '$XML_EXT_MXXMLWRITER=' & $XML_EXT_MXXMLWRITER & @CRLF & '"MSXML2.MXXMLWriter" related Error'
                                Case $XML_EXT_FREETHREADEDDOMDOCUMENT
                                        $sExtendedInfo = '$XML_EXT_FREETHREADEDDOMDOCUMENT=' & $XML_EXT_FREETHREADEDDOMDOCUMENT & @CRLF & '"Msxml2.FreeThreadedDOMDocument" related Error'
                                Case $XML_EXT_XMLSCHEMACACHE
                                        $sExtendedInfo = '$XML_EXT_XMLSCHEMACACHE=' & $XML_EXT_XMLSCHEMACACHE & @CRLF & '"Msxml2.XMLSchemaCache." related Error'
                                Case $XML_EXT_STREAM
                                        $sExtendedInfo = '$XML_EXT_STREAM=' & $XML_EXT_STREAM & @CRLF & '"ADODB.STREAM" related Error'
                                Case $XML_EXT_ENCODING
                                        $sExtendedInfo = '$XML_EXT_ENCODING=' & $XML_EXT_ENCODING & @CRLF & 'Encoding related Error'
                                Case Else
                                        $sExtendedInfo = '$iXMLWrapper_Extended=' & $iXMLWrapper_Extended & @CRLF & 'NO ERROR DESCRIPTION FOR THIS @extened'
                        EndSwitch
        EndSwitch
        ; return back @error and @extended for further debuging
        Return SetError($iXMLWrapper_Error, $iXMLWrapper_Extended, _
                        '@error description:' & @CRLF & _
                        $sErrorInfo & @CRLF & _
                        @CRLF & _
                        '@extended description:' & @CRLF & _
                        $sExtendedInfo & @CRLF & _
                        '')

EndFunc   ;==>XML_My_ErrorParser
#EndRegion  XMLWrapperEx__Examples.au3 - XML DOM Error/Event Handling

Func ErrFunc_CustomUserHandler_MAIN($oError)
        cw(@ScriptName & " (" & $oError.scriptline & ") : MainScript ==> COM Error intercepted !" & @CRLF & _
                        @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
                        @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
                        @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
                        @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
                        @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
                        @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
                        @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
                        @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
                        @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>ErrFunc_CustomUserHandler_MAIN

Func Fertig()
        Local $T = WinGetPos($g_hGui)
        GUISetState(@SW_HIDE, $g_hGui)

        If ProcessExists('DVPiper.exe') Then
                Run('rundll32 user32.dll,MessageBeep')
                ToolTip('le prg stoppe dans 10s', $T[0], $T[1] + 100, '', 3, 4 + 1)
                StdinWrite($g_iPID, 'stopany' & @CRLF)
                Sleep(1000 * 3)
                StdinWrite($g_iPID, 'exit' & @CRLF)
                Sleep(1000 * 2)
        EndIf

        If ProcessExists('DVPiper.exe') Then
                ProcessClose('DVPiper.exe')
        EndIf
        Exit
EndFunc   ;==>Fertig

Func Aide()
        MsgBox($MB_SYSTEMMODAL, "", "But: envoyer le signal TV sur le poste 192.168.x.xxx (en udp) pour le lire avec un player type Vlc,SMplayer,MPC-HD..." & @CRLF & _
                        "Dans le player: ouvrir url(ou fichier) 'udp://192.168.x.xxx:1234' " & @CRLF & _
                        "--------------------------------------" & @CRLF & _
                        "La 1° fois (Menu):" & @CRLF & @CRLF & _
                        "1 Chercher le(s) Tuner TNT/DVB-T" & @CRLF & @CRLF & _
                        "2 Chercher les canaux de votre région (40 canaux 15-20 mn)" & @CRLF & @CRLF & _
                        "3 Vérifier la qualité du signal du multiplex" & @CRLF & _
                        "--------------------------------------" & @CRLF & @CRLF & _
                        "Bouton bleu: envoyer le signal TV sur l'adresse IP du poste client" & @CRLF & @CRLF & _
                        "Bouton Rouge: cesser le flux udp" & @CRLF & @CRLF & _
                        "Cheval au galop --> le process dvpiper est lancé (regarder dans le gestionnaire de tache)" & @CRLF & _
                        "--------------------------------------" & @CRLF & @CRLF & _
                        "Fenêtre suivi(Show/Hide): copier la ligne de commande dans le presse-papier" & @CRLF & @CRLF & _
                        "Clic sur l'icône de la barre de tâches --> tout cacher")

EndFunc   ;==>Aide

Func TrayEvent()
        ;cw('TrayEvent'&@TAB&@TRAY_ID)
        Local $iState
        Switch @TRAY_ID
                Case $TRAY_EVENT_PRIMARYDOWN
                        $iState = WinGetState($g_hGui, '')
                        ;cw('WinGetState'&@TAB&$iState)
                        Switch BitAND($iState, 2)
                                Case False
                                        GUISetState(@SW_SHOW, $g_hGui)
                                        TraySetState($TRAY_ICONSTATE_STOPFLASH)
                                Case True
                                        GUISetState(@SW_HIDE, $g_hGui)
                                        TraySetState($TRAY_ICONSTATE_FLASH)
                        EndSwitch
        EndSwitch
EndFunc   ;==>TrayEvent

Func Tray()
        TraySetClick(8) ;8 = Pressing secondary mouse button  mouseclicks will display the tray menu
        TrayCreateItem("Aide")
        TrayItemSetOnEvent(-1, "Aide")
        TrayCreateItem("")
        TrayCreateItem("Quitter")
        TrayItemSetOnEvent(-1, "Fertig")
        TraySetIcon("kangaroo bleu 32.ico")
        TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN, "TrayEvent")
        TraySetState($TRAY_ICONSTATE_SHOW)
EndFunc   ;==>Tray

Func l($id) ;place le prochain crtl a droite+5
        Local $P = ControlGetPos($g_hGui, '', $id)
        Return $P[0] + $P[2] + 5
EndFunc   ;==>l

Func t($id) ;place le prochain crtl en bas+5
        Local $P = ControlGetPos($g_hGui, '', $id)
        Return $P[1] + $P[3] + 5
EndFunc   ;==>t

Func Cote($value, $delim = '"')
        Return $delim & $value & $delim
EndFunc   ;==>Cote

Func ErreurFatale($message)
        ToolTip($message, 1, 1, '', 1, 1)
        Run('rundll32 user32.dll,MessageBeep')
        Sleep(10 * 1000)
        ToolTip('')
        Fertig()
EndFunc   ;==>ErreurFatale

Func ErreurNonFatale($message, $hWnd) ; attache a la fenetre
        Local $T = WinGetPos($hWnd)
        Run('rundll32 user32.dll,MessageBeep')
        ToolTip($message, $T[0], $T[1] + 100, '', 3, 4 + 1)
        Sleep(1000 * 7)
        ToolTip('')
EndFunc   ;==>ErreurNonFatale

Func DeleteBlankLine($T)
        If Not IsArray($T) Then Return SetError(1, 0, '')
        Local $i, $Count = 0
        If $T[0] = UBound($T) - 1 Then _ArrayDelete($T, 0) ;delete l'index de la 1° ligne
        For $i = 0 To UBound($T) - 1
                If StringRegExp($T[$i], '\w') = 1 Then ;Match any "word" character: a-z, A-Z, 0-9 or underscore (_).
                        $T[$Count] = $T[$i]
                        $Count += 1
                EndIf
        Next
        If $Count = 0 Then Return SetError(1, 0, '')
        ReDim $T[$Count]
        Return $T
EndFunc   ;==>DeleteBlankLine

Func srch($T, $value, $iForward = 1)
        Local $i = -1
        Local $iStart = 0, $iEnd = 0, $iCase = 0, $iCompare = 1
        If Not IsArray($T) Then Return $i
        $i = _ArraySearch($T, $value, $iStart, $iEnd, $iCase, $iCompare, $iForward)
        Return SetError(@error, 0, $i)
EndFunc   ;==>srch

Func AD($T, $line = @ScriptLineNumber)
        If Not IsArray($T) Then Return
        _ArrayDisplay($T, $line)
EndFunc   ;==>AD

Func cw($text = @ScriptLineNumber, $line = @ScriptLineNumber)
        ConsoleWrite(StringFormat("%04d", $line) & @TAB & '|')
        ConsoleWrite($text)
        ConsoleWrite('|' & @LF)
EndFunc   ;==>cw

Func wt($texte = @ScriptLineNumber, $titre = @ScriptLineNumber)
        If MsgBox(1, $titre, '|' & $texte & '|') <> 1 Then Exit
EndFunc   ;==>wt
bureau distant+dvpiper+smplayer.jpg

OlivierNeniMaFoi
Niveau 1
Niveau 1
Messages : 1
Enregistré le : lun. 30 janv. 2017 10:32
Status : Hors ligne

Re: [Ex] Regarder la télé avec DVPiper

#2

Message par OlivierNeniMaFoi » lun. 30 janv. 2017 10:55

Bonjour,

Je suis incapable de programmer mais je souhaite néanmoins répondre à votre post. J'utilise Dvpiper depuis fort longtemps et je déplore comme vs la faiblesse de la communauté autour de ce projet assez ancien.
Le béotien que je suis, a parfaitement pu utilisé les commandes de codes que vs listez.
Par curiosité j'ai tenté de lancer votre création, mais sans adapter quoique ce soit, je n'ai pas retrouvé vos captures d'écran
la prochaine étape sera de programmer des enregistrements histoire de concurrencer PoutchinTV
Ma question est : avez-vs vu la déclinaison DV Scheduler développé par l'auteur pirayen lui-même, de DVpiper ? Elle est incroyablement puissante. Je l'utilise pour les mêmes raisons que vs décrivez : bien plus légères que ts les softs livrés avec les clés TNT. Présentation en cache : http://web.archive.org/web/201512192140 ... tml#syntax
J'aimerais bien savoir ce que vs avez pensé de ce soft, et éventuellement pouvoir discuter d'un point très précis.

J'ai trouvé bcp d'aide auprès de l'auteur qui est très disponible. Malheureusement depuis 1 mois le site de pirayen a disparu. Je peux éventuellement vs adresser une copie de la dernière version 6.05

Merci de m'avoir lu

illwind33
Niveau 1
Niveau 1
Messages : 12
Enregistré le : sam. 27 févr. 2016 18:42
Localisation : toulouse
Status : Hors ligne

Re: [Ex] Regarder la télé avec DVPiper

#3

Message par illwind33 » dim. 05 févr. 2017 09:36

Bonjour,

Excusez le retard mais j'ai des problèmes perso
avez-vs vu la déclinaison DV Scheduler
trop lourd à base de navigateur html
mes clés USB sont sur un petit serveur sans écran/clavier allumé 24h/24h, que je pilote en RDP (bureau distant) avec une connexion Wifi à partir d'un Pc portable (2011) situé un étage plus haut.
Par exemple pour programmer (des émissions) PouchinTV, je dois supprimer les drivers vidéo

la prochaine étape sera de programmer des enregistrements histoire de concurrencer PoutchinTV
c'est remis aux calendes grecques: je dois prendre ma retraite / vendre mon grand appart / trouver un petit appart etc..

Si vous avez une connexion internet il y a:
- Molotov https://www.molotov.tv/ permet regarder la télé de n'importe où
- captvty http://captvty.fr/ permet d'enregistrer sur son disque le replay de presque tous les prg de la TNT (pas les films sauf ARTE)

j'ai tenté de lancer votre création, mais sans adapter quoique ce soit, je n'ai pas retrouvé vos captures d'écran
Si vous lancé le programme à partir de l'éditeur Scite (tools/go ou F5), vous devez avoir dans la fenêtre du bas (la console) des erreurs genre:
C:\player\DVPiperUdp\DVPiperUDP.au3"(59,10) : error: can't open include file <XML.au3>
C:\player\DVPiperUdp\DVPiperUDP.au3"(545,28) : warning: $XML_ERR_ISNOTOBJECT: possibly used before declaration
il faut se plonger dans le code pour:

telecharger l'include (https://www.autoitscript.com/forum/file ... pperexau3/)
la copier dans le repertoire include de autoit dans mon cas c'est "C:\opt\AutoIt3\Include"

soit le renommer en rajoutant un souligne devant:
soit en changeant la ligne #include <_XML.au3> en #include <XML.au3> (enlever le souligner)
#include <_XML.au3> ;https://www.autoitscript.com/forum/files/file/358-xmlau3-formerly-xmlwrapperexau3/
changer les adresses IP de vos PC
copier tous les prg et horse.ani dans le même repertoire
horse.ani se trouve dans C:\opt\AutoIt3\Examples\Helpfile\Extras dans mon cas
Global Const $shorse = @ScriptDir & '\horse.ani' ;l'icone horse anime ....\AutoIt3\Examples\Helpfile\Extras\horse.ani
Global Const $g_sDVPiper = @ScriptDir & '\DVPiper.exe'
Global Const $g_sIP = '192.168.1.100|192.168.1.101|192.168.1.102' ; mes 3 PC (win7 pro)
Global Const $g_sdevicexml = @ScriptDir & '\device.xml' ; fichier xml des tuner TNT a creer dans le menu de la GUI

Si vous arrivez à avoir une fenêtre avec le titre ('DVPiper --> send(udp(192.168.x.xxx,1234))
il faut:
Func Aide()
        MsgBox($MB_SYSTEMMODAL, "", "But: envoyer le signal TV sur le poste 192.168.x.xxx (en udp) pour le lire avec un player type Vlc,SMplayer,MPC-HD..." & @CRLF & _
                        "Dans le player: ouvrir url(ou fichier) 'udp://192.168.x.xxx:1234' " & @CRLF & _
                        "--------------------------------------" & @CRLF & _
                        "La 1° fois (Menu):" & @CRLF & @CRLF & _
                        "1 Chercher le(s) Tuner TNT/DVB-T" & @CRLF & @CRLF & _
                        "2 Chercher les canaux de votre région (40 canaux 15-20 mn)" & @CRLF & @CRLF & _
                        "3 Vérifier la qualité du signal du multiplex" & @CRLF & _
                        "--------------------------------------" & @CRLF & @CRLF & _
                        "Bouton bleu: envoyer le signal TV sur l'adresse IP du poste client" & @CRLF & @CRLF & _
                        "Bouton Rouge: cesser le flux udp" & @CRLF & @CRLF & _
                        "Cheval au galop --> le process dvpiper est lancé (regarder dans le gestionnaire de tache)" & @CRLF & _
                        "--------------------------------------" & @CRLF & @CRLF & _
                        "Fenêtre suivi(Show/Hide): copier la ligne de commande dans le presse-papier" & @CRLF & @CRLF & _
                        "Clic sur l'icône de la barre de tâches --> tout cacher")

EndFunc   ;==>Aide
Je suis incapable de programmer
Malheureusement:

1 je fais un usage effréné des expressions régulières
https://fr.wikipedia.org/wiki/Expression_rationnelle

2 DVPiper nous sort du XML, donc j'utilise une UDF qui transforme du XML en tableau et utilise des "Objets"
https://www.autoitscript.com/forum/topi ... ort-topic/
Local $oNode = $oXmlDoc.createNode($XML_NODE_ELEMENT, $sNode, $sNameSpace)
3 je suis un "programmeur du dimanche" qui s'est arrêté de "programmer" en 1990 (turbo pascal 4) les pointeurs les objets tout ça c'est trop compliqué.
j'ai découvert autoit quand j'ai voulu créer une interface graphique à VirtualVCR pour programmer des enregistrement TV analogique (à l'époque du chipset Bt848).
http://virtualvcr.sourceforge.net/html/ ... eneral.php
http://www.doom9.org/index.html?/captur ... alVCR.html

4 avant la publication de mon code en le révisant, je suis tombé sur la fonction QualiteSignal qui m'a fait pensé à "deutsche qualitat", donc j'ai entrepris de tout traduire en allemand de chez google, ça n'arrange pas les choses.

A+

Répondre