Conoscere quale file audio un programma sta eseguendo

Da Gambas-it.org - Wikipedia.

Mostriamo il seguente codice, adeguatamente commentato, per sapere quale file audio un apposito programma sta eseguendo.

Private Const GLOBS As String = "/usr/share/mime/globs"


Public Sub Main()

 Dim prog, cartella, s, percfd, lnk As String
 Dim bo As Boolean

' Indichiamo il programma specifico (ad esempio "vlc") che sta eseguendo il file mediale:
 prog = "vlc"
 Print

' Inserisce l'identificativo di ciascuna cartella presente in "/proc":
 For Each cartella In Dir("/proc", Null, gb.Directory)
' Verifica se la cartella contiene il file "comm":
   If Not Exist("/proc" &/ cartella &/ "comm") Then Continue
' Carica il contenuto del file "comm":
   s = File.Load("/proc" &/ cartella &/ "comm")
' Verifica se il testo contenuto nel file "comm" è affine a quello presente nella variabile "prog".; ossia se la cartella corrente è relativa al processo del programma indicato nella variabile "prog":
   If s Not Like "*" & prog & "*" Then Continue
   percfd = "/proc" &/ cartella &/ "fd"
' Inserisce il nome di ciascun file di tipo "Collegamento simbolico" nella variabile "s":
   For Each s In Dir(percfd, Null, gb.Link)
' Verifica se il file individuato di tipo "Collegamento simbolico" è accessibile:
     If Not Access(percfd &/ s) Then Continue
     lnk = Stat(percfd &/ s).Link
' Verifica se il file collegato è accessibile:
     If Not Access(lnk) Then Continue
' Invoca la Procedura "CercaMime":
     bo = CercaMime(lnk)
' Mostra il percorso del file collegato ed attualmente eseguito dal programma audio/video utilizzato:
     If bo Then Print "Il programma '" & prog & "' sta eseguendo il file: \e[1m\e[31m"; lnk, "\e[0m"; Stat(lnk).Size; " byte"
   Next
 Next

 If Not bo Then Print "Il programma '" & prog & "' non sta eseguendo alcun file";
 If percfd = Null Then Print ", poiché non è attualmente aperto !"

End


Private Function CercaMime(audvid As String) As Boolean

 Dim s As String

' Verifica se la dimensione del file collegato è maggiore di 0:
 If Stat(audvid).Size == 0 Then Return
' Verifica se l'estensione del file collegato è presente nel file "/usr/share/mime/globs":
 If InStr(File.Load(GLOBS &/ s), "." & LCase(File.Ext(audvid))) Then Return True

End