Newsgroup: it.comp.lang.visual-basic
Titolo: [II Parte]Permettere l'esecuzione di un solo programma prefissato

Grazie ai vostri suggerimenti ho quasi terminato le modifiche al mio 
applicativo.
Prima di porvi ancora qualche domanda vi sintetizzo come funziona la 
procedura.
1. Login utente Windows
1.1 Parte l'applicativo A (memorizzato nel registry livello Local_Machine)
1.2 Prima di visualizzare la finestra di login dell'applicativo A viene 
verificato la disponibilità del database server (in caso negativo nessuna 
azione "di forzatura")
1.3 Viene verificato se l'utente Windows è anche un utente dell'applicativo 
A e in caso affermativo viene controllato lo stato di compilazione.
1.4 Se l'utente è "in regola" nessuna forzatura
1.5 Se l'utente non è in regola con la compilazione:
1.5.1. L'applicativo disabilita il Task Manager.
1.5.2. La finestra di Login dell'applicativo A viene visualizzata in forma 
massima e tramite SetWindowsPos è bloccata sempre in primo piano, non è 
minimizzabile e non è spostabile. Qualsiasi applicativo lanciato di seguito 
rimane quindi al di sotto della Login di A e pertanto è inutilizzabile.
1.5.3. Ogni 60 secondi A verifica se sono stati lanciati programmi presenti 
nella lista del DB non ammessi e in caso affermativo vengono chiusi
1.5.3. Nel momento di Login in A è la Mdi di A ad essere la finestra 
Top_Most sempre con SetWindowsPos.
1.5.4 Mediante QueyUnload viene impedito che l'utente possa uscire 
dall'applicazione A.
1.5.4. Ad ogni inserimento di ore A verifica se l'utente si è messo in 
pari:in caso affermativo vengono eliminati i vari vincoli (No Task Manager, 
primo piano forzato, chiusura forzata applicativi non premessi).
1.5.5. Per evitare blocchi "catastrofici" ho inserito sempre in A la 
possibilità (protetta chiaramente da Password) di riattivare Task Manager e 
togliere primo piano forzato
E' chiaro che se l'utente del PC ha i permessi di amministratore può 
eliminare la chiave Run dal registry e anche settarsi di nuovo il permesso 
al Task Manager ma questo meno male non preoccupa il committente (anche 
perchè l'applicativo A ad ogni esecuzione ripristina le chiavi eventualmente 
rimosse).
Ho ancora qualche dubbio:
1) L'antivirus (McAfee) intercetta l'abilitazione/disabilitazione del Task 
Manager (CreateIntegerKey 
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskmgr", 
"1")
Soluzione:
A) Il sistemista e non l'applicativo A toglie a tutti gli utenti l'accesso a 
Task Manager mediante le Policies (mi sembra rischioso)
B) Cambio metodo e intercetto ctrl+alt+canc con Hook (anche se da una prima 
veloce ricerca su google sembra che su XP sia possibile solamente 
riscrivendo il driver della tastiera).
C) ????
2) Se minimizzo la Mdi di A è possibile utilizzare nuovamente il PC senza 
avere in primo piano A. E' possibile intercettare l'evento "minimizzazione" 
oppure togliere il pulsante di minimizzazione da un Mdi? Con blocco 
solamente il ridimensionamento ma non la minimizzazione)
3) L'applicativo A parte quando parte Windows oppure quando si logga 
l'utente Windows (come detto la partenza di A è memorizzato nel registry a 
livello local_Machine)
5) 
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskmgr", 
"1") è accessibile da ogni utente windows (nel senso dipende dai privilegi 
del profilo?)
Grazie
Hubert

 ha scritto nel messaggio news:PGPCe.4881$B6.1...@twister1.libero.it...

Anch'io ho un'esigenza analoga, sembra che si possa fare con una
"injection" a una libreria di sistema ma sto ancora indagando; un hook permetterebbe solo
di disattivare la tastiera (tutte le combinazioni tranne ctrl+alt+canc)
Hai considerato che se l'utente tiene premuto il tasto SHIFT durante l'avvio
di Windows il tuo applicativo non parte??
Buon lavoro
 ciao


 1.5.1. L'applicativo disabilita il Task Manager.
Che succede se il tuo sistema va in loop o altro?
Non puoi più bloccarlo?
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it


No, ho provato su XP Professional ma mi parte lo stesso. 

 ha scritto nel messaggio news:QT3De.6621$a5.9...@twister2.libero.it...

in effetti hai ragione, blocca solo i programmi
in "esecuzione automatica"

 del profilo?)
un saluto a tutti

 del profilo?)
un saluto a tutti 

 riscrivendo il driver della tastiera).
Per chi fosse interessato, vi dico la soluzione che ho adottato in merito
alla disattivazione della combinazione dei tasti ctrl+alt+canc (Win2k/WinXP)
La soluzione più pulita e indolore è un hook di GINA, e cioè
con qualche opportuna modifica dell'esempio GinaHook della Platform SDK
nella routine WlxLoggedOnSAS, e inserendo il nuovo valore nel registro:
1) Copy GinaHook.dll to %SystemRoot%\System32 directory.
2) Run RegEdit
3) Create the following value under
   HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon.
   Value Name: GinaDLL
   Value Type: REG_SZ
   Value Data: "GinaHook.dll"
4) Exit RegEdit.
5) Reboot.
Nel mio caso era sufficiente modificare il valore restituito dalla funzione
in modo che l'effetto di ctrl+alt+canc fosse il blocco della tastiera.
Facendo invece return WLX_SAS_ACTION_NONE; si disabilita del
tutto la combinazione:
   /* return pfWlxLoggedOnSAS(pWlxContext,
                           dwSasType,
                           pReserved);
   */
   return WLX_SAS_ACTION_LOCK_WKSTA;
Ciao


Grazie, io ho preso spunto da 
http://vb.mvps.org/samples/project.asp?id=tasklist
 e ho inserito un elenco 
di programmi da terminare fra cui anche il Task Manager. In questo modo il 
blocco al Task Manager č solamente attivo per utenti "non" in regola e cosě 
spero di essere meno invasivo con il mio applicativo: usciti 
dall'applicativo il sistema funziona come prima (si spera)
Hubert