Autore Topic: mouse e desktop  (Letto 1946 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #15 il: 09 Maggio 2021, 05:29:17 »
Dunque... ti do questa prima informazione:
in via generale per ottenere informazioni inerenti alle icone sul desktop bisogna usare il comando da Terminale
  ~$ gio info '/percorso/del/file'
l'attributo " metadata::nemo-icon-position: ", riportato dal risultato nel Terminale, restituisce le coordinate x,y dell'angolo in alto a sinistra dell'icona sullo schermo.

In Gambas un comando bash o un programma va lanciato con la risorsa "Shell", e il risultato immediato viene raccolto usando la parola-chiave "To", come segue:

Codice: [Seleziona]
Dim nomefile, s As String

nomefile = "il_nome_del_file"

Shell "gio info " & User.Home &/ "Scrivania" &/ nomefile To s

Print s

Se vuoi ottenere dell'icona soltanto l'attributo della sua posizione sullo schermo, imposterai l'opzione "-a" specificando anche l'attributo da mostrare:
 
Codice: [Seleziona]
Shell "gio info -a metadata::nemo-icon-position " & User.Home &/ "Scrivania" &/ nomefile To s


...'sta "Shell", non si può guardare...  :-X


« Ultima modifica: 10 Maggio 2021, 09:09:26 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re:mouse e desktop
« Risposta #16 il: 09 Maggio 2021, 10:36:00 »
Per prima cosa un Saluto a tutti.
Un caro saluto anche da parte mia  :ciao:
Citazione

Il mio obbiettivo e creare una specie di desktop-spy, in pratica, cio' che vorrei ottenere e' questo:

Sorvolando col mouse un'icona sul desktop, avere in un form le informazioni su quell'icona, ad esempio
il suo nome, il percorso a cui punta, i diritti, fino ad ora sono arrivato a capire e stampare la
posizione del mouse sul desktop (lo so' sono scarso!)...

Io non direi affatto scarso visto che sei partito da un problema che danno ai corsi di specializzazione post laurea  ;D

quando eseguo mi risponde: component not found: gb.desktop.x11
con questa cosa mi ci sono gia' scontrato diverse volte
Uno fra coloro che possono aiutarti su questo è Gianluigi.

Insomma... intanto mi scuso con te perché oggi ho poco tempo, ma se nel frattempo mi dai i tuoi dati incollandoli fra i cancelletti di "inserisci codice"...
I dati li ottieni dalla IDE menu Help (quello con il punto interrogativo) > Informazioni di sistema... si apre una finestra da cui copi i tuoi dati e li incolli come detto.

 :ciao:

P.S. Dimenticavo: se ricordo bene, fsurfing aveva fatto qualcosa per il desktop, per ottenere delle informazioni di sistema, se fai una ricerca magari trovi ispirazione, credo fosse ancora Gambas2
« Ultima modifica: 09 Maggio 2021, 10:39:19 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #17 il: 10 Maggio 2021, 02:15:50 »
Va bene........
propongo questo codice commentato.
E' necessario attivare anche il Componente "gb.desktop" .
Codice: [Seleziona]
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 T 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 a malincuore la funzione "Shell" per lanciare il comando "GIO":
    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
 
  T = New Timer As "Tmr"
  T.Delay = 50
  T.Start

End

Public Sub Tmr_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


« Ultima modifica: 10 Maggio 2021, 02:21:47 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline mondo

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:mouse e desktop
« Risposta #18 il: 10 Maggio 2021, 17:32:43 »
ero gia' passato da qui:
gvfs-info -a metadata::annotation nomefile
ma gvfs-info e' deprecato, quindi ero passato a:
gio info nomefile | grep metadata::annotation
in questo caso leggo solo le note (una prova)

ho gia' usato comandi bash via Shell ""

tipo .... notify-send $(gio info NomeFile | grep metadata::annotation | cut -f 4 -d : )

per inviare le note associate ad un'icona al popup di notifiche del sistema

mi scuso per l'assenza, sto combattendo con un'altro problema, probabilmente la mia installazione di gambas e' 'bacata'
mi succede che pur selezionando alcuni components (presenti nella lista ProjectsProperties/components) ottengo in esecuzione un errore di Component not found: bla bla bla

ovviamente quelli in errore sono anche gli stessi su cui vorrei concentrare i miei sforzi

gb.desktop
gb.desktop.x11
gb.AlcuniAltri .......

ho cercato in rete se esistono altre soluzioni a questo problema, ma, o non le ho trovate o non le ho riconosciute
tentero' (bovinamente) una disinstallazione pulita a cui seguira' una re-installazione, spero che questo possa risolvere.

naturalmente accetto consigli e torno a ringraziarvi per la vostra disponibilita'

Codice: [Seleziona]
[System]
Gambas=3.16.90
OperatingSystem=Linux
Kernel=4.15.0-142-generic
Architecture=x86_64
Distribution=Linux Mint 19.3 Tricia
Desktop=MATE
Font=Noto Sans,9
Scale=7
Theme=mint-x-teal
Language=en_US.UTF-8
Memory=7683M

[Libraries]
Cairo=libcairo.so.2.11510.0
Curl=libcurl.so.4.5.0
DBus=libdbus-1.so.3.19.4
GDK2=libgdk-x11-2.0.so.0.2400.32
GDK3=libgdk-3.so.0.2200.30
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.1405.0
GTK+2=libgtk-x11-2.0.so.0.2400.32
GTK+3=libgtk-3.so.0.2200.30
OpenGL=libGL.so.1.0.0
Poppler=libpoppler.so.73.0.0
QT4=libQtCore.so.4.8.7
QT5=libQt5Core.so.5.9.5
SDL=libSDL-1.2.so.0.11.4
SQLite=libsqlite3.so.0.8.6

[Environment]
CLUTTER_BACKEND=x11
COMPIZ_CONFIG_PROFILE=mate
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-xh0Ojda4Lj,guid=422db3b7c329df6c84aafa30609949fd
DEFAULTS_PATH=/usr/share/gconf/mate.default.path
DESKTOP_AUTOSTART_ID=10827bdb02312e4c04162065868797671400000035670005
DESKTOP_SESSION=mate
DISPLAY=:0
GB_GUI=gb.gtk3
GDMSESSION=mate
GDM_LANG=en_US
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GTK_MODULES=gail:atk-bridge
GTK_OVERLAY_SCROLLING=0
HOME=<home>
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ADDRESS=it_IT.UTF-8
LC_ALL=en_US.UTF-8
LC_IDENTIFICATION=it_IT.UTF-8
LC_MEASUREMENT=it_IT.UTF-8
LC_MONETARY=it_IT.UTF-8
LC_NAME=it_IT.UTF-8
LC_NUMERIC=it_IT.UTF-8
LC_PAPER=it_IT.UTF-8
LC_TELEPHONE=it_IT.UTF-8
LOGNAME=<user>
MANDATORY_PATH=/usr/share/gconf/mate.mandatory.path
MATE_DESKTOP_SESSION_ID=this-is-deprecated
PATH=<home>/bin:<home>/.local/bin:<home>/Scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PWD=<home>
QT_ACCESSIBILITY=1
QT_AUTO_SCREEN_SCALE_FACTOR=0
QT_LOGGING_RULES=*.debug=false
QT_SCALE_FACTOR=1
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/3567,unix/<hostname>:/tmp/.ICE-unix/3567
SHELL=/bin/bash
SHLVL=0
SSH_AGENT_PID=3682
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
TZ=:/etc/localtime
USER=<user>
XAUTHORITY=<home>/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg
XDG_CURRENT_DESKTOP=MATE
XDG_DATA_DIRS=<home>/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share/:/usr/share/mate:<home>/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/<user>
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_DESKTOP=mate
XDG_SESSION_ID=c2
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE=x11
XDG_VTNR=7


dopo aver soddisfatto questa richiesta mi viene il sospetto che sia meglio attendere prima di fare l'ennesima cavolata

( incollandoli fra i cancelletti di "inserisci codice"..)
perdona questo poveruomo col cervello fossile, ammetto di non aver capito come farlo.

« Ultima modifica: 10 Maggio 2021, 18:18:53 da Gianluigi »
"Le mezze misure e le mezze  soluzioni le preferisco a coppie" (Io)

"Meglio pochi CHE buoni" (M. Garbo)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re:mouse e desktop
« Risposta #19 il: 10 Maggio 2021, 18:24:16 »
Questa volta l'ho fatto io (ho evidenziato lo scritto e premuto sul pulsante con disegnato il cancelletto).

Allora sembrerebbe tutto in ordine, prima di fare altre prove, dovresti spiegare come lanci l'IDE di Gambas lo fai con le librerie QT4, le QT5 oppure GTK?


nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline mondo

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:mouse e desktop
« Risposta #20 il: 10 Maggio 2021, 21:35:48 »
lo avvio con un launcher del menu che punta a /usr/bin/gambas3

onestamente non so come rispondere alla seconda parte della domanda, lo lancio cosi' come parte
default ?

si puo' essere degradati da gamberetto ?  :o

forse prima di correre e' meglio che imparo a camminare, devo prima conoscere il mezzo, poi potro' guidarlo
« Ultima modifica: 10 Maggio 2021, 21:51:30 da mondo »
"Le mezze misure e le mezze  soluzioni le preferisco a coppie" (Io)

"Meglio pochi CHE buoni" (M. Garbo)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re:mouse e desktop
« Risposta #21 il: 10 Maggio 2021, 22:47:35 »
lo avvio con un launcher del menu che punta a /usr/bin/gambas3

onestamente non so come rispondere alla seconda parte della domanda, lo lancio cosi' come parte
default ?
Io non ho Mint ma se ricordo bene tu per avviare usi un menu Sviluppo e da li clicchi su Gambas.
Gambas adesso di default (prima era diverso) si avvia in base alle librerie del desktop che per Mint (come per Ubuntu) sono le GTK o almeno credo.
Dovresti poter scegliere di avviare Gambas con le librerie che desideri se, al posto di cliccare col tasto sinistro sul menu Gambas, clicassi col tasto destro.
Non è detto ma, se lo fai e scegli le librerie QT4 potrebbe essere che il tuo Gambas si metta a funzionare bene.
Dovresti anche fare una ricerca su QT Configuration.

Però se fossi in te aggiornerei all'ultimo Mint che non usa più le QT4 ma le QT5 e forse vuott che ha l'ultimo Mint può consigliarti su come configurarlo al meglio.
Citazione

si puo' essere degradati da gamberetto ?  :o
:rotfl:
Citazione
forse prima di correre e' meglio che imparo a camminare, devo prima conoscere il mezzo, poi potro' guidarlo

Beh sicuramente non sarebbe una cattiva idea, puoi fare entrambe le cose l'una non esclude l'altra solo sappi, che come è normale con un nuovo linguaggio, avrai difficoltà e andrai a sbattere, per rimanere in metafora.

Ricordati bene questo, anche se sembra VB non lo è affatto e Linux non è Windows.

nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #22 il: 10 Maggio 2021, 23:56:52 »
.... forse vuott che ha l'ultimo Mint può consigliarti su come configurarlo al meglio.




Ricordati bene questo, anche se sembra VB non lo è affatto e Linux non è Windows.
Sante parole ! 
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #23 il: 11 Maggio 2021, 02:37:01 »
Codice: [Seleziona]
' Usa a malincuore la funzione "Shell" per lanciare il comando "GIO":
    Shell "gio info '" & PERCORSO &/ nomefile & "'" To s

...e rapidamente abbandono quella vergognosa e indegna chiamata del programma "GIO" con il comando "Shell", sostituendola con una beeeen più accettabile chiamata delle funzioni esterne della libreria "libgio-2.0" mediante la parola-chiave "Extern":  :)

Codice: [Seleziona]
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 = Desktop.GetDirectory("DESKTOP")
Private T 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 con "Extern" alcune funzioni esterne della libreria "libgio-2.0":
    s = EstraeInfo(PERCORSO &/ nomefile)
    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, "*,*")[0])
      .y = Val(Scan(s, "*,*")[1])
' Stabilisce un'area quadrata standard di 48x48 pixel per ciascuna icona di file individuato:
      .rt = New Rect(.x, .y, 48, 48)
    End With
    icone.Push(ifd)
  Next
 
  T = New Timer As "Tmr"
  T.Delay = 50
  T.Start

End

Public Sub Tmr_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


Library "libgio-2.0"

' GFile * g_file_new_for_commandline_arg (const char *arg)
' Creates a GFile with the given argument from the command line.
Private Extern g_file_new_for_commandline_arg(arg As String) As Pointer

' GFileInfo * g_file_query_info (GFile *file, const char *attributes, GFileQueryInfoFlags flags, GCancellable *cancellable, GError **error )
' Gets the requested information about specified file.
Private Extern g_file_query_info(gfile As Pointer, attributes As String, flags As Integer, cancellable As Pointer, gerror As Pointer) As Pointer

' char ** g_file_info_list_attributes (GFileInfo *info, const char *name_space)
' Lists the file info structure's attributes.
Private Extern g_file_info_list_attributes(info As Pointer, name_space As String) As Pointer

' char * g_file_info_get_attribute_as_string (GFileInfo *info, const char *attribute)
' Gets the value of a attribute, formatted as a string.
Private Extern g_file_info_get_attribute_as_string(info As Pointer, attribute As String) As Pointer

' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)


Private Function EstraeInfo(percfile As String) As String
 
  Dim fl, info As Pointer
 
  fl = g_file_new_for_commandline_arg(percfile)
  If fl == 0 Then Error.Raise("Errore !")
   
  info = g_file_query_info(fl, "*", 0, Null, Null)
  If info == 0 Then Error.Raise("Errore !")
   
  percfile = EstraeAttributi(info)
   
  g_object_unref(info)
  g_object_unref(fl)
 
  Return percfile

End


Private Function EstraeAttributi(inf As Pointer) As String
 
  Dim attr, p As Pointer
  Dim i As Integer = -1
  Dim s As String
 
  attr = g_file_info_list_attributes(inf, Null)

  Repeat
    Inc i
    s = String@(Pointer@(attr + (i * SizeOf(gb.Pointer))))
    p = g_file_info_get_attribute_as_string(inf, s)
  Until s == Trim("metadata::nemo-icon-position")

  Return String@(p)
 
End
« Ultima modifica: 17 Maggio 2021, 00:24:34 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline mondo

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:mouse e desktop
« Risposta #24 il: 22 Maggio 2021, 00:24:39 »
mi scuso per la lunga assenza, ho dovuto trovare il tempo per rinnovare il pc
la nuova situazione e' ora questa:
Codice: [Seleziona]
[System]
Gambas=3.16
OperatingSystem=Linux
Kernel=5.4.0-73-generic
Architecture=x86_64
Distribution=Linux Mint 20.1 Ulyssa
Desktop=MATE
Font=Ubuntu,10
Scale=7
Theme=mint-x-orange
Language=en_US.UTF-8
Memory=7668M

[Libraries]
Cairo=libcairo.so.2.11600.0
Curl=libcurl.so.4.6.0
DBus=libdbus-1.so.3.19.11
GDK2=libgdk-x11-2.0.so.0.2400.32
GDK3=libgdk-3.so.0.2404.16
GStreamer=libgstreamer-1.0.so.0.1602.0
GTK+2=libgtk-x11-2.0.so.0.2400.32
GTK+3=libgtk-3.so.0.2404.16
OpenGL=libGL.so.1.7.0
Poppler=libpoppler.so.97.0.0
QT5=libQt5Core.so.5.12.8
SDL=libSDL-1.2.so.0.11.4
SQLite=libsqlite3.so.0.8.6

[Environment]
CLUTTER_BACKEND=x11
COMPIZ_CONFIG_PROFILE=mint
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus,guid=0cd8a38795f2ab50a3b8d10c60a8fcc6
DBUS_STARTER_ADDRESS=unix:path=/run/user/1000/bus,guid=0cd8a38795f2ab50a3b8d10c60a8fcc6
DBUS_STARTER_BUS_TYPE=session
DEFAULTS_PATH=/usr/share/gconf/mate.default.path
DESKTOP_SESSION=mate
DISPLAY=:0
GB_GUI=gb.gtk3
GDMSESSION=mate
GDM_LANG=en_US
GIO_LAUNCHED_DESKTOP_FILE=<home>/.local/share/applications/gambas3.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=26088
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GTK3_MODULES=xapp-gtk3-module
GTK_MODULES=gail:atk-bridge
GTK_OVERLAY_SCROLLING=0
HOME=<home>
IM_CONFIG_PHASE=1
INVOCATION_ID=eab5bf71ff4443fe9729371ca01967a2
JOURNAL_STREAM=9:31678
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_ADDRESS=it_IT.UTF-8
LC_ALL=en_US.UTF-8
LC_IDENTIFICATION=it_IT.UTF-8
LC_MEASUREMENT=it_IT.UTF-8
LC_MONETARY=it_IT.UTF-8
LC_NAME=it_IT.UTF-8
LC_NUMERIC=it_IT.UTF-8
LC_PAPER=it_IT.UTF-8
LC_TELEPHONE=it_IT.UTF-8
LOGNAME=<user>
MANAGERPID=1058
MANDATORY_PATH=/usr/share/gconf/mate.mandatory.path
MATE_DESKTOP_SESSION_ID=this-is-deprecated
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
PWD=<home>
QT_ACCESSIBILITY=1
QT_AUTO_SCREEN_SCALE_FACTOR=0
QT_LOGGING_RULES=*.debug=false
QT_QPA_PLATFORMTHEME=qt5ct
QT_SCALE_FACTOR=1
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/1092,unix/<hostname>:/tmp/.ICE-unix/1092
SHELL=/bin/bash
SHLVL=0
SSH_AGENT_PID=1288
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
TZ=:/etc/localtime
USER=<user>
XAUTHORITY=<home>/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg
XDG_CURRENT_DESKTOP=MATE
XDG_DATA_DIRS=/usr/share/mate:<home>/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/<user>
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_CLASS=user
XDG_SESSION_DESKTOP=mate
XDG_SESSION_ID=c2
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE=x11
XDG_VTNR=7
_=/usr/bin/dbus-update-activation-environment
Spero che tutto funzioni ma ho appena finito le installazioni e devo ancora provare.

ho visto che nel frattempo avete lasciato esempi ed informazioni, di cui vi ringrazio
appena collaudato il sistema mi metto a studiare e provare quanto mi avete fornito
« Ultima modifica: 22 Maggio 2021, 16:37:00 da mondo »
"Le mezze misure e le mezze  soluzioni le preferisco a coppie" (Io)

"Meglio pochi CHE buoni" (M. Garbo)

Offline mondo

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:mouse e desktop
« Risposta #25 il: 22 Maggio 2021, 23:37:11 »
Ciao Vuott e un saluto a tutti quanti

Sembra che dopo aver aggiornato il sistema alla mint 20.1 e installato nuovamente gambas3 tutto abbia ricominciato a funzionare come si deve, finalmente. :D

Ho immediatamente cominciato a studiare il codice di esempio che mi hai gentilmente fornito (Rif. Risposta #17 il: 10 Maggio 2021, 02:15:50)

Ho dovuto adattare qualche cosa, marginale, in relazione al fatto che usiamo strumenti differenti, io uso il sistema in inglese e Mate, Tu per quanto ho potuto capire lo usi in italiano con Cinnamon, quindi per me cambia il percorso del Desktop ed invece di Nemo uso Caja
 
La logica del codice mi e' chiara, anche se mi sono scontrato con alcune cose, non legate alla logica ma alla mia scarsa confidenza con gli strumenti.

Inizialmente non capivo  ???  l'utilizzo dell'istruzione SCAN, guardando l'help mi pare di intendere che questa istruzione 'inscatola' in una sorta di array parti di una stringa in base ad un pattern specificato, la sua utilita' l'ho compresa in seguito, analizzando l'output dell'istruzione SHELL con GIO INFO, l'output in questione e' una variabile contenente una lunghissima stringa intervallata da numerosi "\n", difficilmente trattabile con altri mezzi

Approfondiro' in seguito la questione relativa all'utilizzo di SCAN

         .x = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[1])
         
Qui tratto la stringa s, dalla quale estraggo "::nemo-icon-position: " ignorando cio' che la precede (il primo *), prelevando qualsiasi cosa seguente che contenga una virgola preceduta e seguita da qualsiasi stringa (secondo e terzo *) fino al NewLine, poi nuovamente ignorando cio' che segue (quarto *), l'indice [1] preleva la stringa che precede la virgola (quindi la coordinata x)
       
         .y = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[2])
         
Nella seconda istruzione succedono le stesse cose ma prelevando, indice [2], quello che segue la virgola  (quindi la coordinata y)

Spero di aver compreso correttamente come funziona, anche se la mia esposizione e' piuttosto contorta, nel caso cosi' non fosse, abbi la bonta' di correggermi, sappi comunque che Hannibal Lecter e' diventato cannibale dopo aver ascoltato tre mie spiegazioni.

Mi si presenta un ulteriore disagio, alla prima SCAN, mi becco un bel OUT OF BOUNDS, sembra che io cerchi di puntare ad un elemento inesistente di un array, da stamattina remo intorno a questa cosa ma non ne vengo fuori, per me ,vecchio VB6-ers, gli array intesi come oggetti appaiono ancora come cose soprannaturali



Noto comunque, che in uscita da ogni ciclo viene aggiunto un elemento all'oggetto array con "icone.Push(ifd)", quindi al ciclo successivo dovrebbe essere disponibile il nuovo indice a cui puntare

Ho letto con attenzione:
https://www.gambas-it.org/wiki/index.php?title=Array:_creazione,_modifica_e_riempimento

Allego il codice da me massacrato:

Codice: [Seleziona]
' Gambas class file

Public Struct IconaFileDesktop                                             ' Struttura per l'icona
   nome As String                                                          ' Nome dell'icona
   x As Short                                                              ' Per posizione x
   y As Short                                                              ' Per posizione y
   rt As Rect                                                              ' Rettangolo per icona
End Struct

Private icone As New IconaFileDesktop[]                                    ' Array (tipo definito dall'utente) per le le informazioni delle icone
''Private PERCORSO As String = User.home &/ "Scrivania"                    ' Uso il sistema in inglese USA, questo non va' bene per me
Private PERCORSO As String = User.home &/ "Desktop"                        ' Il percorso da analizzare
Private T As Timer                                                         ' Per timer


Public Sub Form_Open()
   Dim nomefile As String                                                 ' Temporanea per i nomi file
   Dim s As String                                                         ' Temporanea per l'output shell
   Dim ifd As IconaFileDesktop

   For Each nomefile In Dir(PERCORSO, "*", gb.File)                        ' Ciclo per tutti i file corrispondenti alle icone presenti sulla Scrivania:
      Shell "gio info '" & PERCORSO &/ nomefile & "'" To s                 ' Usa a malincuore la funzione "Shell" per lanciare il comando "GIO":

      If IsNull(s) Then Continue                                           ' Se s non contiene qualcosa salta il ciclo, altrimenti ...

      With ifd = New IconaFileDesktop                                      ' ... Carica nella "Struttura" i dati utili del file individuato dalla
                                                                           ' funzione "Dir()":
         .nome = nomefile
         ''.x = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[1])           ' Uso Mate, quindi Caja, questo non va' bene per me
         ''.y = Val(Scan(s, "*::nemo-icon-position: *,*\n*")[2])           ' Uso Mate, quindi Caja, questo non va' bene per me

         ''.x = Val(Scan(s, "*-icon-position: *,*\n*")[1])                 ' Forse potrei arrangiare cosi' per generalizzare, poi provero'
         ''.y = Val(Scan(s, "*-icon-position: *,*\n*")[2])                 ' se non mi esplode la cabesa

         .x = Val(Scan(s, "*::caja-icon-position: *,*\n*")[1])             '' Qui mi pianto come in un crash-test
         .y = Val(Scan(s, "*::caja-icon-position: *,*\n*")[2])
         .rt = New Rect(.x, .y, 48, 48)                                    ' Stabilisce un'area standard di 48x48 pixel per ciascuna icona di file
      End With

      icone.Push(ifd)                                                      ' Incrementa gli elementi del vettore
   Next

   T = New Timer As "Tmr"                                                  ' Crea il Timer
   T.Delay = 50                                                            ' Imposta il ritardo dell'evento
   T.Start                                                                 ' Lo avvia
 End

''-------------------------------------------------------------------------------------------------------------------------------------------------------
'' EVENTO del timer
''-------------------------------------------------------------------------------------------------------------------------------------------------------
Public Sub Tmr_Timer()
   Dim c As Short                                                           ' Per scorrere il vettore delle icone

   TextArea1.Clear                                                          ' Pulisce la TextArea

   For c = 0 To icone.Max                                                   ' Scorre il vettore
      ''-----------------------------------------------------------------------------------------'
      '' 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


Noterai sicuramente che a parte le modifiche precedentemente descritte ed i commenti non ho modificato altro, ho passato il mio tempo a leggerlo e comprenderlo, prendedolo come spunto per orientarmi nella ricerca degli help e della documentazione relativa, poi ore di esecuzioni step to step per vedere in funzione ogni singola parte, riusciro' a districarmi anche dal problema dell'array


« Ultima modifica: 23 Maggio 2021, 00:04:19 da mondo »
"Le mezze misure e le mezze  soluzioni le preferisco a coppie" (Io)

"Meglio pochi CHE buoni" (M. Garbo)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #26 il: 23 Maggio 2021, 02:24:42 »
La logica, che sottende i due miei programmi, si deduce agevolmente dai commenti al codice.
Ad ogni modo, se riscontri dei problemi, è meglio che ne poni uno alla volta in modo chiaro, affinché i membri di questo forum possano aiutarti.

Ad esempio questa riga:
 
Codice: [Seleziona]
Private PERCORSO As String = User.home &/ "Scrivania"
che effettivamente - come tu stesso hai rilevato - può dare problemi, nel secondo mio codice (quello con le chiamate a funzioni esterne della libreria "libgio-2.0") l'ho sostituito con il più preciso ed elegante:
 
Codice: [Seleziona]
Desktop.GetDirectory("DESKTOP")
« Ultima modifica: 23 Maggio 2021, 02:30:53 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline mondo

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:mouse e desktop
« Risposta #27 il: 30 Maggio 2021, 16:58:00 »
Sono riuscito a fare un piccolo passo avanti, nel tuo primo esempio, quello che utilizza
l'istruzione shell, il problema era causato dal fatto che non tutte le icone presenti sul desktop
hanno gli stessi metadata, il programma si inceppava in caso di assenza dell'informazione da me cercata

Con la gestione errori (Try) ed una IF per controllare lo stato di errore, sono stato in grado di vederlo
in funzione, quindi posso considerare questa parte del problema risolta.

Ora mi trovo in difficolta' con la versione che usa le funzioni esterne di libgio-2.0.so
L'esempio si pianta nella funzione utente 'EstraeInfo'

Codice: [Seleziona]
Private Function EstraeInfo(percfile As String) As String
 
  Dim fl, info As Pointer
 
  fl = g_file_new_for_commandline_arg(percfile)    <- si blocca qui con questo errore:
 
  Cannot find dynamic library 'libgio-2.0.so': Cannot open shared object file: No such file or directory (FMain:93)


Sembra che sul mio sistema non sia presente questa libreria, ho provato ad cercarla nel mio filesystem, poi nei
repository, sia con Synaptic che con con apt-get, per poterla installare, ma non sono riuscito a trovarla.

Potrebbe essere una parte contenuta in un pacchetto con un nome diverso ?

potete aiutarmi a risolvere questo problema ?
"Le mezze misure e le mezze  soluzioni le preferisco a coppie" (Io)

"Meglio pochi CHE buoni" (M. Garbo)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.159
  • Tonno verde
    • Mostra profilo
Re:mouse e desktop
« Risposta #28 il: 30 Maggio 2021, 17:34:29 »

...


Sembra che sul mio sistema non sia presente questa libreria, ho provato ad cercarla nel mio filesystem, poi nei
repository, sia con Synaptic che con con apt-get, per poterla installare, ma non sono riuscito a trovarla.

Potrebbe essere una parte contenuta in un pacchetto con un nome diverso ?

potete aiutarmi a risolvere questo problema ?

E cercando in Ubuntu Packages search?:
https://packages.ubuntu.com/
https://packages.ubuntu.com/search?searchon=contents&keywords=libgio-2.0.so&mode=exactfilename&suite=hirsute&arch=any

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.334
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:mouse e desktop
« Risposta #29 il: 30 Maggio 2021, 20:39:16 »
Prova anche richiamando GLIB, dato che fanno parte della medesima famiglia.

( https://developer.gnome.org/references )
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »