|
|
(2 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | 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.
| + | #REDIRECT [[Conoscere_in_tempo_reale_il_numero_dell'ultimo_processo_appena_aperto]] |
− | | |
− | Nell'esempio, che segue, si andrà a leggere nella cartella ''proc'' ogni 200 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.
| |
− | | |
− | In sostanza si dovrà prima lanciare il codice Gambas, sotto descritto, e successivamente aprire un qualsiasi programma.
| |
− | '''Public''' Sub Form_Open()
| |
− |
| |
− | With Timer1
| |
− | .delay = 200
| |
− | .Start
| |
− | End With
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | '''Public''' Sub Timer1_Timer()
| |
− |
| |
− | Dim s As String
| |
− | Dim ss As String[]
| |
− |
| |
− | <FONT color=gray>' ''Ogni ms 200 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:''</font>
| |
− | For Each s In Dir("/proc", Null, gb.Directory)
| |
− | TextEdit1.RichText = "Processo: " & s
| |
− | Next
| |
− |
| |
− | If Exist("/proc" &/ s &/ "cmdline") Then
| |
− | ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
| |
− | TextEdit1.RichText &= "Programma esecutore:<BR>" & String@(Pointer@(ss.Data)) &
| |
− | "<P>File eseguito:<BR>" & String@(Pointer@(ss.Data + 32))
| |
− | Endif
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | | |
− | ===con un'applicazione 'a riga di comando'===
| |
− | Se l'applicazione Gambas è 'a riga di comando', potremo servirci di un ciclo, dal quale si uscirà soltanto quando sarà stato aperto un nuovo processo:
| |
− | '''Public''' Sub Main()
| |
− |
| |
− | Dim b As Byte
| |
− | Dim s As String
| |
− | Dim ss As String[]
| |
− |
| |
− | <FONT color=gray>' ''Verifichiamo inizialmente quante cartelle sono presenti in "/proc":''</font>
| |
− | b = Dir("/proc", Null, gb.Directory).Count
| |
− |
| |
− | Do
| |
− | Wait 0.3
| |
− | Loop Until b < Dir("/proc", Null, gb.Directory).Count
| |
− |
| |
− | <FONT color=gray>' ''L'ultima cartella dell'indice del vettore generato dalla funzione "Dir()" è l'ultimo processo appena aperto:''</font>
| |
− | s = Dir("/proc", Null, gb.Directory)[Dir("/proc", Null, gb.Directory).Max]
| |
− |
| |
− | <FONT color=gray>' ''Oppure anche così:''
| |
− | For Each s In Dir("/proc", Null, gb.Directory)
| |
− | If IsDigit(s) Then s = s
| |
− | Next</font>
| |
− |
| |
− | Print "Processo: "; s
| |
− |
| |
− | If Exist("/proc" &/ s &/ "cmdline") Then
| |
− | ss = Split(File.Load("/proc" &/ s &/ "cmdline"), "/")
| |
− | Print "Esecutore: "; String@(Pointer@(ss.Data))
| |
− | Print "File eseguito: "; String@(Pointer@(ss.Data + (8 * ss.Max)))
| |
− | Endif
| |
− |
| |
− | '''End'''
| |