Newsgroup: it.comp.lang.delphi
Titolo: Oltre a ShowModal ?

Esiste oltre a showmodal un comando che paralizzi tutto l'o.s. nel senso
non permetta l'accesso a nessuna delle task attive se rpima non si verifica
una daterminata condizione sulla form in rilievo?
Grazie

 si verifica una daterminata condizione sulla form in rilievo?
Scusa la domanda, ma perché avresti bisogno di un "alternativa" a ShowModal?
Comunque, capisco (non molto) fermare la tua applicazione, ma paralizzare
*tutto* il s.o. non mi sembra una gran cosa...
--
Jax
====
Pochi vizi impediscono ad un uomo di avere tanti amici quanto l'avere
troppe virtů.

"MarcoCantonata" ha scritto nel messaggio

Qual'č l'obiettivo di una cosa del genere?
Gianluca.



Lo scopo non č "malefico" come sicuramente state pensando!
Devo realizzare un gioco/questionario a tempo, e vorrei paralizzare tutto
per impedire l'accesso a qualsiasi altra applicazione o documentazione per
avere risposte.

> Esiste oltre a showmodal un comando che paralizzi tutto l'o.s.
da WinNT in su no, o almeno non ho mai visto niente del genere, a parte le
(rarissime) schermate blu. Nei vecchi kernel W9x, invece, c'erano delle form
modali che inchiodavano il sistema (es. gli errori di kernel), ma niente che
si potesse gestire in modo diretto da programma.

 avere risposte.
Io lavoro in ambito in ambito industriale e ho una necessità simile alla tua
che ho risolto sostituendo la shell di windows con la mia applicazione, in
modo che gli utenti non abbiano alcuna interfaccia per eseguire altre
applicazioni.
Per fare questo in maniera semplice e veloce basta modificare System.ini
[boot]
shell=Explorer.exe
con il percorso completo dell'eseguibile.
Con un poche righe di codice dovresti riuscire a fare un programmino che
permetta di attivare la tua applicazione o Windows Explorer.
Ti faccio un esempio tratto dal mio:
procedure TfrmMain.btOkClick(Sender: TObject);
var
 SystemIni: TIniFile;
begin
 try
  try
   { Verifica il codice di autorizzazione }
   if edCode.Text <> AUT_KEY then
    raise Exception.Create('Codice Autorizzazione non valido. Non è
possibile effettuare l''Operazione.');
   { Aggiorna il file di sistema }
   SystemIni := TIniFile.Create('system.ini');
   try
    case cboShell.ItemIndex of
     0: SystemIni.WriteString('boot', 'shell', 'C:\Programmi\ABC\App.exe');
     1: SystemIni.WriteString('boot', 'shell', 'Explorer.exe');
    end;
   finally
    SystemIni.Free;
   end;
  except
   on E: Exception do begin
    MessageBeep(0);
    MessageDlg(E.Message, mtError, [mbOk], 0);
   end;
  end;
 finally
  Self.Close;
 end;
end;
In questo modo al prossimo riavvio (anche i successivi, finchè non
ripristini la situazione normale) sarà caricato App.exe invece di Explorer.
In realtà nei sistemi di famiglia NT dovresti scrivere la modifica nel
registry, ma, in relazione al fatto che SYSTEM.INI viene copiato nel
registry ad ogni avvio, facendo in questo modo ti garantisci la
compatibilità con ogni Sistema Operativo da Windows XP all'indietro (anche
Win 3.11 volendo ;-) ).
Questo, a mio avviso, è il metodo piu sicuro... oltre sinceramente non
saprei.
Ciao,
Gianluca.

 documentazione per avere risposte.
uhm...... potresti creare la tua applicazione come uno screen saver; è
l'unico modo che conosco per far girare un'applicazione in modo veramente
esclusivo.
E' solo un'idea.
--
Jax
====
Io non faccio tutto quello che è giusto. Tutto quello che faccio è
giusto.