Differenze tra le versioni di "Conoscere in tempo reale il numero dell´ultimo processo appena aperto"

Da Gambas-it.org - Wikipedia.
Riga 20: Riga 20:
 
  ' ''Se il contenuto letto è una cartella, allora vuol dire che si tratta di un processo.''
 
  ' ''Se il contenuto letto è una cartella, allora vuol dire che si tratta di un processo.''
 
  ' ''Risulterà visibile, come effetto, l'ultimo processo in ordine di tempo aperto:''</font>
 
  ' ''Risulterà visibile, come effetto, l'ultimo processo in ordine di tempo aperto:''</font>
    For Each s In Dir("/proc", "", gb.Directory)
+
  For Each s In Dir("/proc", "", gb.Directory)
      TextEdit1.RichText = "Processo:  &lt;BR>&lt;FONT color=#FF0000>" & s
+
    TextEdit1.RichText = "Processo:  &lt;BR>&lt;FONT color=#FF0000>" & s
    Next
+
  Next
 
          
 
          
    Try ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
+
  If Exist("/proc" &/ s &/ "cmdline") Then
+
    ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
    Try TextEdit1.RichText &= "&lt;BR>&lt;FONT color=#000000>File eseguito:  &lt;BR>&lt;FONT color=#FF0000>" &
+
    TextEdit1.RichText &= "&lt;BR>&lt;FONT color=#000000>File eseguito:  &lt;BR>&lt;FONT color=#FF0000>" &
 
     Replace(ss[ss.Max], Chr(0), "&lt;p>&lt;FONT color=#000000>Esecutore:  &lt;BR>&lt;FONT color=#FF0000>") &
 
     Replace(ss[ss.Max], Chr(0), "&lt;p>&lt;FONT color=#000000>Esecutore:  &lt;BR>&lt;FONT color=#FF0000>") &
 
     Replace(ss[0], Chr(0), "")
 
     Replace(ss[0], Chr(0), "")
 +
  Endif
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 05:06, 10 ott 2014

Per conoscere l'ultimo processo aperto bisognerà interrogare la cartella proc del File System, la quale contiene - fra l'altro - le sub-cartelle dei processi aperti.

Nell'esempio, che segue, si andrà a leggere nella cartella proc ogni 150 millesimi di secondo mediante l'attivazione di un Timer, per conoscere in tempo reale il numero dell'ultimo processo appena aperto, nonché il file lanciato ed il suo programma esecutore.

Public Sub Form_Open()

  With Timer1
    .delay = 150
    .Start
  End With
 
End


Public Sub Timer1_Timer()  

 Dim s As String
 Dim ss As String[]

' Ogni ms 150 si legge tutto il contenuto della cartella "proc".
' Se il contenuto letto è una cartella, allora vuol dire che si tratta di un processo.
' Risulterà visibile, come effetto, l'ultimo processo in ordine di tempo aperto:
  For Each s In Dir("/proc", "", gb.Directory)
    TextEdit1.RichText = "Processo:  <BR><FONT color=#FF0000>" & s
  Next
       
  If Exist("/proc" &/ s &/ "cmdline") Then
    ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
    TextEdit1.RichText &= "<BR><FONT color=#000000>File eseguito:  <BR><FONT color=#FF0000>" &
   Replace(ss[ss.Max], Chr(0), "<p><FONT color=#000000>Esecutore:  <BR><FONT color=#FF0000>") &
   Replace(ss[0], Chr(0), "")
  Endif

End


con un'applicazione 'a riga di comando'

Se l'applicazione Gambas è 'a riga di comando', potremo servirci di un ciclo:

Public Sub Main()

 Dim b As Byte
 Dim s As String
 Dim ss As String[]

' Verifichiamo inizialmente quante cartelle sono presenti in "/proc":
  b = Dir("/proc", Null, gb.Directory).Count

  Do
    Wait 0.3
  Loop Until b < Dir("/proc", Null, gb.Directory).Count

' L'ultima cartella dell'indice del vettore generato dalla funzione "Dir()" è l'ultimo processo appena aperto:
  s = Dir("/proc", Null, gb.Directory)[Dir("/proc", Null, gb.Directory).Max]

' Oppure anche così:
  For Each s In Dir("/proc", Null, gb.Directory)
    If IsDigit(s) Then s = s
  Next
      
  Print "Processo: "; s

  If Exist("/proc" &/ s &/ "cmdline") Then
    ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
    Print "File eseguito:  "; Replace(ss[ss.Max], Chr(0), "\nEsecutore:  "); Replace(ss[0], Chr(0), Null)
  Endif
 
End