Ottenere informazioni sulle icone presenti sulla Scrivania

Da Gambas-it.org - Wikipedia.
Versione del 10 mag 2021 alle 01:27 di Vuott (Discussione | contributi) (Creata pagina con "Per ottenere informazioni sulle icone presenti sulla Scrivania (Desktop) e a quali file sono afferenti, si potrà utilizzare il programma "GIO" facendolo seguire dall'opzione...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Per ottenere informazioni sulle icone presenti sulla Scrivania (Desktop) e a quali file sono afferenti, si potrà utilizzare il programma "GIO" facendolo seguire dall'opzione "info".
Ovviamente nel codice Gambas il programma "GIO" sarà lanciato con la risorsa "Shell":

Shell gio info /percorso/del/file

Individuare le icone poste sulla Scrivania passandoci sopra con il puntatore del mouse

Mostriamo di seguito un possibile codice che, utilizzando il programma "GIO", permette di individuare le icone poste sulla Scrivania, mentre si sorvola su di esse con il puntatore del mouse, e di ottenere informazioni sui file ai quali esse sono collegate.

Public Struct IconaFileDesktop
  nome As String
  x As Short
  y As Short
  rt As Rect
End Struct
Private icone As New IconaFileDesktop[]
Private PERCORSO As String = User.home &/ "Scrivania"
Private TImer1 As Timer


Public Sub Form_Open()
 
 Dim nomefile, s As String
 Dim ifd As IconaFileDesktop
 
' Carica tutti i file corrispondenti alle icone presenti sulla Scrivania:
 For Each nomefile In Dir(PERCORSO, "*", gb.File)
' Usa la funzione "Shell" per lanciare il comando "GIO" (è necessario inserire il percorso del file fra la singola virgoletta):
   Shell "gio info '" & PERCORSO &/ nomefile & "'" To s
   If IsNull(s) Then Continue 
' Carica nella "Struttura" i dati utili del file individuato dalla funzione "Dir()":
   With ifd = New IconaFileDesktop
     .nome = nomefile
     .x = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[1])
     .y = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[2])
' Stabilisce un'area quadrata standard di 48 pixel per ciascuna icona di file individuato:
     .rt = New Rect(.x, .y, 48, 48)
   End With
   icone.Push(ifd)
 Next
 
 With timer1 = New Timer As "Timer1"
   .Delay = 50
   .Start
 End With
 
End


Public Sub Timer1_Timer()
 
 Dim c As Short
 
 TextArea1.Clear
 
 For c = 0 To icone.Max
' Se le coordinate x,y in pixel correnti in cui si trova il puntatore del mouse rientrano in un'area quadrata caricata, va a vedere a quale icona e file appartiene:
   If icone[c].rt.Contains(Mouse.ScreenX, Mouse.ScreenY) Then 
' Mostra alcune caratteristiche del file al quale corrisponde l'icona sorvolata dal puntatore del mouse:
     TextArea1.Text = "== Caratteristiche del file ==\n" &
                      "\nPercorso:        " & Stat(PERCORSO &/ icone[c].nome).Path &
                      "\nDimensione:      " & Stat(PERCORSO &/ icone[c].nome).Size & " Byte" &
                      "\nUltimo Accesso:  " & Stat(PERCORSO &/ icone[c].nome).LastAccess &
                      "\nUltima modifica: " & Stat(PERCORSO &/ icone[c].nome).LastModified &
                      "\nPermessi:        " & Stat(PERCORSO &/ icone[c].nome).Auth &
                      "\nUtente:          " & Stat(PERCORSO &/ icone[c].nome).User &
                      "\nGruppo:          " & Stat(PERCORSO &/ icone[c].nome).Group &
                      "\nMimetype icona:  " & DesktopMime.FromFile(Stat(PERCORSO &/ icone[c].nome).Path).Type
   Endif
 Next
 
End