Salve, sembra una domanda banale..
Non lo sembra, lo è
Scrivo il seuqnte codice:
Dim name As String
name = InputBox("Inserisci nome")
print name
Potrsti per cortesia inserire il codice fra i giusti tag che ottieni evidenziando il codice e agendo sul pulsante # come ho appena fatto qui sopra?
Qui puoi trovare una guida al nostro forum : https://www.gambas-it.org/smf/index.php?topic=7397.msg47179#msg47179 che spiega come usarlo correttamente.
quindi se si inserisce una parole cioè il nome tramite print riporta la parola scritta in inputbox..
E se si preme annulla come si fà ad intercettare se si è premuto annulla o ok ?
Sei incredibile, sai solo fare domande e tra l'altro di tipo opposto fra loro.
Quelle tipo questa qui fanno intravvedere che non hai idea di cosa significa programmare.
Se le cose stanno così, prima dovresti studiare la programmazione in generale, se lo vuoi fare con noi allora occorre che tu spiega meglio cosa vai cercando...
Ritornando alla tua domanda ti basta guardare la variabile stringa di ritorno, se è valorizzata allora controlli se è stato risposto correttamente alla richiesta di input altrimenti la variabile è vuota
If name Then
'...
Else
' variabile vuota (null)
Endif
Allora, spiego meglio
Dim root As String
root = InputBox("Immetti password di root")
Shell "echo " & root & " | sudo -S apt-get autoclean"
il problema è
se la password di root (root) è giusta allora esegue il comando shell altrimenti no
come faccio a far capire da gambas che la password di root inserita nell' inputbox è giusta ?
Potresti usare una soluzione troppo "sporca", facendogli davvero provare ad eliminare la protezione di un file-device.
No... meglio usare l'istruzione "Desktop.RunAsRoot()" attivando il Componente "gb.desktop".
Desktop.RunAsRoot("sudo apt-get autoclean")
Questa istruzione farà apparire un InputBox, nel quale l'utente dovrà inserire la sua password.
Questo InputBox gestirà esso direttamente la faccenda della password immessa dall'utente.
Una soluzione pulitissima e coerente con quanto chiedi.
Una possibile alternativa potrebbe essere questa riga:
Shell "x-terminal-emulator -e sudo 'apt-get autoclean'"
Viene aperto il Terminale, nel quale viene chiesta l'immissione della propria password di sistema.
Anche in questo caso, se la password non è corretta, verrà di nuovo chiesta automaticamente.
Per te puoi provare ad inserire "mate-terminal":
Shell "mate-terminal -e sudo 'apt-get autoclean'"
...però interessava che mi faceva inserire la password prima solo una volta e poi seguire i comandi
Capisco.
Ad ogni modo, se io lancio quel tuo codice:
dim root as string
root = InputBox("Immetti password di root")
ProgressBar1.Value = 0 / 10
Shell "echo " & root & " | sudo -S apt-get autoclean"
...etc....
e immetto una password errata, nello standard output vengo doviziosamente e ampiamente avvisato che la parola-chiave da me immessa è appunto sbagliata.
Insomma il sistema provvede a fare automaticamente la verifica della password immessa ed eventualmente ad avvisare l'utente dell'errore.
Non devi preoccuparti di farlo fare a Gambas.
Pertanto, problemi non ne vedo: mi pare :-\ che la tua richiesta venga così esaudita: se la password è corretta, la prima riga di comando con "apt-get" procede e così via le successive, che ovviamente utilizzeranno la password immessa dall'utente e in tal caso verificata corretta dal "sistema".
[System]
Gambas=3.15.2
OperatingSystem=Linux
Kernel=5.10.0-10-amd64
Architecture=x86_64
Distribution=Debian
Desktop=MATE
Theme=fusion
Language=it_IT.UTF-8
Memory=3801M
[Libraries]
Cairo=libcairo.so.2.11600.0
Curl=libcurl.so.4.7.0
DBus=libdbus-1.so.3.19.13
GDK2=libgdk-x11-2.0.so.0.2400.33
GDK3=libgdk-3.so.0.2404.20
GStreamer=libgstreamer-1.0.so.0.1804.0
GTK+2=libgtk-x11-2.0.so.0.2400.33
GTK+3=libgtk-3.so.0.2404.20
OpenGL=libGL.so.1.7.0
Poppler=libpoppler.so.102.0.0
QT5=libQt5Core.so.5.15.2
SDL=libSDL-1.2.so.0.11.4
SQLite=libsqlite3.so.0.8.6
[Environment]
CLUTTER_IM_MODULE=ibus
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DESKTOP_SESSION=lightdm-xsession
DISPLAY=:0
GB_GUI=gb.qt5
GDMSESSION=lightdm-xsession
GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/gambas3.desktop
GIO_LAUNCHED_DESKTOP_FILE_PID=154545
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GTK3_MODULES=xapp-gtk3-module
GTK_IM_MODULE=ibus
GTK_MODULES=gail:atk-bridge
GTK_OVERLAY_SCROLLING=0
HOME=/home/<hostname>
LANG=it_IT.UTF-8
LC_ALL=it_IT.UTF-8
LOGNAME=<hostname>
MATE_DESKTOP_SESSION_ID=this-is-deprecated
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/<hostname>
QT_ACCESSIBILITY=1
QT_AUTO_SCREEN_SCALE_FACTOR=0
QT_IM_MODULE=ibus
QT_LOGGING_RULES=*.debug=false
QT_SCALE_FACTOR=1
SESSION_MANAGER=local/<hostname>:@/tmp/.ICE-unix/3866,unix/<hostname>:/tmp/.ICE-unix/3866
SHELL=/bin/bash
SSH_AGENT_PID=4034
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
TZ=:/etc/localtime
USER=<hostname>
XAUTHORITY=/home/<hostname>/.Xauthority
XDG_CURRENT_DESKTOP=MATE
XDG_DATA_DIRS=/usr/share/mate:/home/<hostname>/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
XDG_GREETER_DATA_DIR=/var/lib/lightdm/data/<hostname>
XDG_RUNTIME_DIR=/run/user/1000
XDG_SEAT=seat0
XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
XDG_SESSION_CLASS=user
XDG_SESSION_DESKTOP=lightdm-xsession
XDG_SESSION_ID=1
XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0
XDG_SESSION_TYPE=x11
XDG_VTNR=7
XMODIFIERS=@im=ibus
Bruce Steers suggerisce di provare a installare MATE polkit:
sudo apt-get install mate-polkit