Newsgroup: it.comp.lang.c++
Titolo: modalita' esclusiva

Salve a tutti.
Sto cercando di eseguire un programma in modalita' esclusiva.
Mi spiego meglio: quando questo programma gira, dovrebbe automaticamente
chiudere tutti gli altri tasks di windows e diventare l'unico programma
attivo.
Grazie in advance per qualsiasi aiuto
Flavia

, 
safe...@galactica.it
 says...

Compreso Windows Explorer? Hmmm. Io non ci proverei. Al limite puoi tentare
di impedire che l'utente lasci la tua applicazione (intercettando le 
combinazioni di tasti di sistema, creando una finestra topmost grande quanto 
l'intero schermo, ecc). Temo pero' che incontrerai qualche problema a 
disabilitare il ctrl-alt-del impedendo cosi' all'utente di attivare il task 
manager.
Come alternativa, se la tua applicazione deve girare su un PC dedicato, 
puoi impostare W95 in "kiosk mode". Nel system.ini sostituisci le 
applicazioni progman e taskman con kiosk.exe:
 shell=kiosk.exe
 taskman.exe=kiosk.exe
(naturalmente dovresti anche fare in modo che il tuo programma parta allo 
startup ;).
Antonello
Attenzione: l'indirizzo nella testata del messaggio non e' valido. 
Rispondete all'indirizzo sottostante.
-- 
// ------------------------------------------------------------
// Antonello Salvatucci
// Software Developer, Technical Writer
// LEGO A/S SPU-Darwin, Kloevermarken 120, 7190 Billund DENMARK
// 
// 
+45 75 33 22 33 ext. 5186
       antonello at digi. lego. com


Cosa intendi per "esecuzione in modalità escusiva"?
Se il tuo programma gira sotto MS-Dos è sufficiente impostare l'apposita
opzione nelle properties della shortcut da cui viene eseguito (credo sia
possibile farlo anche in fase di creazione della shortcut stessa, dal
programma di installazione).
Se si tratta di un programma Windows la situazione si complica parecchio.
Per chiudere tutti i processi dovresti ottenere dal sistema una lista dei
task attivi; sotto windows '95 devi utilizzare ToolHelp32 (se vuoi posso
mandarti i sorgenti di una mia utility che lo utilizza), sotto NT puoi
scegliere tra PSAPI (più semplice) o performance registry.
Una volta ottenuto l'elenco dei processi, devi trovare un modo di chuderli;
per i processi che hanno una finestra, il modo migliore è ricavare un handle
alla finestra stessa (con EnumWindows e GetWindowThreadProcessId) e quindi
postargli un messaggio che simuli la chiusura da parte dell'utente
(WM_SYSCOMMAND - SC_CLOSE) o del sistema (WM_ENDSESSION). Per i programmi
che non hanno finestre (e per quelli che hanno una finestra ma nessuna
intenzione di chiudersi!) puoi ricorrere alla funzione TerminateProcess;
tutti i dati non salvati nei processi chiusi verranno persi e, soprattutto
sotto windows '95, alcune risorse potrebbero non essere rilasciate (ex: se
era attiva una connessione modem, la linea non viene chiusa...).
Non ho mai sperimentato la chiusura di tutti i processi (non faccio
programmi così violenti!!) e non posso quindi garantirne il funzionamento al
100%.
Potresti avere qualche problemino con explorer.exe (la shell di '95 o NT
4.0); pare che il sistema riesegua la shell se questa viene terminata da
qualche applicativo o fatal error (GPF).
Potresti cercare di nascondere la Taskbar (ha un nome di classe univoco;
FindWindow o EnumWindow dovrebbero essere sufficienti a ricavarne l'HWND) e
di impostare la tua finestra principale a tutto schermo e topmost
(WS_EX_TOPMOST) per prevenire l'esecuzione di altri programmi tramite le
icone del desktop.
---
Valter Minute
min...@fortech.it
 (the reply address of this message is invalid)
www.fortech.it/english
---
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://www.winsite.com/info/pc/win95/desktop/foyd1295.zip/
if you want, I can send you the (free) C++ source code.

attivo.
bruttissima cosa da fare in windows, comunque se proprio devi puoi
fare un'EnumWindows() per cercare tutte le top-level windows e quindi
inviare loro un messaggio di WM_CLOSE o WM_QUIT. E' chiaro che non e'
obbligatorio che tutti i programmi si chiudano in risposta a quei
messaggi, volendo ci sono sistemi piu' "violenti" pero' te li
sconsiglio caldamente, non e' bello lanciare un programma che ti
uccide tutti i programmi in esecuzione senza neppure chiedere di
salvare i dati...
Gianpaolo Bottin
- Live Long and Prosper -

chiudere tutti gli altri tasks di windows e diventare l'unico programma
attivo.
Se il pc non é adibito ad altri usi (SE cu gira sempre e solo questo soft)
puoi impostare il tuo programma come nuova shell
e cio' e fattibile con qualsiasi sistema operativo win (3.x 95 o NT io lo
uso con quest'ultimo e va benissimo per quelle
applicazioni che devono sempre essere attive...)
Ciao
Roberto Corti
Network Administrator
rco...@LEVAREtinet.ch



 
Una precisazione visto che gia' una persona mi ha scritto perplessa:
non esiste nessun "kiosk.exe" tra i files di Windows, quello sopra 
e' solo un esempio ;)  
In compenso non e' difficile scrivere una "kiosk shell" di tipo generale
che lanci solo determinati programmi (ad esempio quelli inclusi in 
un file di configurazione o in una certa directory). 


 Flavia
Sono perfettamente daccordo con gli sltri post.
Attenta però, che nel caso di NT la maggior parte (Praticamente quasi tutti)
i
servizi utilizzano finestre nascoste (Una zozzeria ma molto funzionale)...
non credo che tu lo voglia ....comunque se vuoi essere così violenta,
un'altra alternativa potrebbe essere (Sempre sotto NT) quella di settare la
priorità del tuo
processo "Real-Time" (Comunque sempre molto pericoloso)
    Saluti
    Lure
--
********************************************
*       <<Misura Anti Spam>>               *
*    Se l'indirizzo vuoi calcolare,        *
* un punto fra dgsp e tesoro devi piazzare *
********************************************

 chiudere tutti gli altri tasks di windows e diventare l'unico programma
Per curiosità perché dovresti disattivare tutti gli altri task quando
Windows è nato proprio per ovviare ai limiti stupidi del DOS?
Se hai proprio bisogno di un programma che permetta di usare al massimo le
risorse e le funzionalità di Win32, usa i thread, o meglio, più thread.
Per ogni thread puoi impostare un particolare tipo di "precedenza" chiamato
priorità.
Saluti.
Jo Parrello.
http://space.tin.it/computer/giparrel
jopa...@tin.it