[ Valerij Zajcev @ 08.01.2011. 22:48 ] @
Ima li neki nacin da postavim wpf aplikaciju u kiosk mod. Postavio sam
Code:

        WindowStyle="None"
        WindowState="Maximized"
        Topmost="True">

I ovo mi postavi aplikaciju iznad svega i sve je ok, ali alt + tab, win key, ctrl + alt + del, alt + F4... ne znam kako da disablujem. Znaci hocu da postignem da nema nacina da kada je aplikacija startovana, da korisnik vidi taskbar, start meni ili bilo sta drugo.

Probao sam ovako, ali i dalje ne sljaka :(
Code:

public partial class Shell : Window
    {        
        public Shell()
        {            
            InitializeComponent();

            IntPtr window = Interop.GetWindowHandle(this);
            IntPtr focused = Interop.GetForegroundWindow();
            if (window != focused)
            {
                Interop.SetForegroundWindow(window);
            }
        }
    }

Code:

public class Interop
    {
        [DllImport("user32.dll")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();

        public static IntPtr GetWindowHandle(Window window)
        {
            return new WindowInteropHelper(window).Handle;
        }
    }


[Ovu poruku je menjao Valerij Zajcev dana 09.01.2011. u 00:24 GMT+1]
[ Boris B. @ 11.01.2011. 10:39 ] @
Moraš da override-uješ windows shell u Windows Registry-ju (HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\Shell ili HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\
System\Shell, nisam siguran koji) tako da umesto explorer.exe piše TvojPath\Tvoj.exe. Onda će se pri startupu umesto standardnog shell-a (explorer) pokretati tvoja app.

- TopMost=True nije najbolja ideja zbog problema sa popup prozorima tvoje aplikacije i problema sa kontrolama koje se nestandardno crtaju (npr. WebBrowser). Ako je tvoja app. windows shell onda ti topmost ni ne treba.
- Alt-F4 disabluješ u Close handleru glavnog prozora (Cancel=true).
- Windows taster ne radi ništa ako je tvoja app. postavljena kao shell.
- Da disabluješ Ctrl-Alt-Del na NT-u moraš biti miljenik Sile, proguglaj malo ima nešto sigurno.

Trebaće ti i nekakav Watchdog servis koji će pokrenuti ponovo app. u slučaju crash-a, must-have ako WPF kiosk radi par dana bez prestanka.

Nemoj da zaboraviš da ako postaviš svoj shell i disabluješ Ctrl-Alt-Del onda moraš da napraviš neki backdoor u svojoj aplikaciji (samo pokreneš explorer.exe), jer inače ćeš zaključati komp da ni ti ne možeš da uđeš ponovo bez kung-fua sa rescue alatima.
[ Valerij Zajcev @ 12.01.2011. 07:18 ] @
A, ako zamenim explorer.exe sa mojom aplikacijom, da li cu onda moci da u toku upotrebe programa (mog kioska) da otvorim npr. Word i da ga prikazem u aplikaciji (odnosno ispred aplikacije) ili bilo koji drugi program igricu?
[ Shadowed @ 12.01.2011. 08:18 ] @
Naravno.
[ Valerij Zajcev @ 18.01.2011. 07:23 ] @
Naisao sam na netu na ovaj clanak na codeprojects-u. Ovim primerom mogu da se disabluju sve kombinacije alt+tab, alt+f4, win key, ctrl+esc... Jedino jos preostaje ctrl+alt+del da ubijem. Dakle ovaj code radi, samo ne razumem se u ovaj code, sa owim win32 api-em, da li je ovo dobro resenje (iz ugla performansi)?
[ Boris B. @ 18.01.2011. 10:58 ] @
Iz ugla performansi nema nikakvog impacta ako koristis key. hook, mada time resavas posledicu a ne uzrok, sto nikada nije dobra ideja.

Pretpostavljam da pravis neki cybercafe program ili slicno tako da je stvarno najbolje resenje da napravis svoj shell, u tom slucaju ti nista od hook-ova ni ne treba.

Disablovanje ctrl-alt-del-a nije dobra ideja samo da bi onemogucio korisnika da ugasi tvoj program, za taj slucaj se koriste access rights korisnika - znaci file permissions ili GPO. Na primer, ako napravis korisnika "Korisnik" i onemogucis read&execute na fajl taskmgr.exe, onda "Korisnik" ce da dobije Access Denied kada proba Ctrl-Alt-Del.

Varijanta 1. Optimalno resenje je sistemski servis-watchdog koji radi pod accountom NT_AUTHORITY\SYSTEM i kad god vidi da tvoj kiosk.exe ne radi onda ga ponovo pokrene pod credentials "Korisnik" - u tom slucaju ti ne treba cak ni disable exec na taskmgr.exe, jer u prinicipu hoces da korisniku omogucis da ubije igru/program koja je "unresponsive".

Varijanta 2. Pomenuti watchdog servis moze cak i da pokrece kiosk.exe pod svojim accountom (NT_AUTHORITY\System) ali onda sve igre/programe koje pokreces iz svog kioska pokreces kao user "Korisnik" koji ima ogranicena prava. Na taj nacin korinik nikada nece moci da ubije kiosk.exe jer ovaj radi pod sistemskim accountom, ali ce zato moci da ubije sve programe koje je on pokrenuo.
[ Valerij Zajcev @ 19.01.2011. 07:39 ] @
Citat:

...mada time resavas posledicu a ne uzrok, sto nikada nije dobra ideja.

Pa mislim da moram da resavam posledicu...evo kako:
1 - Korisnik instalira aplikaciju
2 - Aplikacija se startuje i od korisnika trazi username/pass
3 - Sada ako je korisnik administrator aplikacija treba da se ugasi i udje u windows
4 - Admin je zavrsio sta ima => startuje ponovo aplikaciju (e zbog ovoga moram da resavam posledicu, a ne uzrok) i sve one kombinacije tastera su opet iskljucene.

Adobe Flex ima opciju (always in front) mora da ima nesto i WPF.

Citat:

Disablovanje ctrl-alt-del-a nije dobra ideja samo da bi onemogucio korisnika da ugasi tvoj program, za taj slucaj se koriste access rights korisnika - znaci file permissions ili GPO. Na primer, ako napravis korisnika "Korisnik" i onemogucis read&execute na fajl taskmgr.exe, onda "Korisnik" ce da dobije Access Denied kada proba Ctrl-Alt-Del.

Da, ali krajnji korisnik nije neko ko se razume u user account i slicno. Dakle program treba da bude takav da obicna "domacica" ume da ga koristi.
[ Boris B. @ 19.01.2011. 09:13 ] @
Shell mozes da postavis i za svakog korisnika posebno (zamenis HKLM u HKU\UserXXX), tako da admin user ima explorer.exe , a korisnik da ima kiosk.exe. Prijava admina ili korisnika se vrsi preko standarnog windows login prozora.

Da ne tupim previse, kada ogranicavas admin korisnika sa stvarima kao sto je keyb. hook onda ides "uzqrac" celom sistemu, postoje sistemske osnove kako se to resava, a to su korisnicki nalozi, GPO i windows prijava/odjava. Na primer ako je korisnik admin, onda iz bilo kog OpenFile dijaloga moze da "sara" po sistemu jer zaista ima pravo jer je "admin". Da bi napravio sistem da i domacica zna da ga koristi treba ti samo dobar Setup engine i naravno Help file. Imas na netu programcice kao sto su createuser.exe i ntrights.exe koje obicno koriste setup alati da automatizuju kreiranje korisnika i postavljanje prava.

A tebi ako keyb. hook zaista vrsi posao i nije bitno za cilj programa da ce neko da sara po sistemu kao admin, onda ih koristi by all means, nece imati nikakvog uticaja na performanse.

Poz.
Boris
[ Boris B. @ 19.01.2011. 09:29 ] @
Kad smo vec kod kioska, evo sad se setih smesne situacije od pre par godina:

Napravili mi WPF kiosk za slovenacko predsedovanje EU, znaci DocumentViewer, WebBrowser, VideoPlayer, lepi dugmici, animacije itd. Touchscreen od 32'', staklena kutija, nema da nema.

Postavimo mi to u Centar Brdo jer dolaze mudonje iz EU pa ce da klikaju i da se dive. Tokom noci nocnom cuvaru u centru bilo dosadno i otvori lik radioveseljak.si, web radio sa slovenackom govedjom muzikom. JavaScript na stranici otvori stranu u novom prozoru, a posto je kiosk aplikacija bila TopMost web strana se naravno otvori ispod glavne aplikacije i krene da tresti govedina do daske (zvucnici naravno ugradjeni u zakljucanu staklenu kutiju). Rezultat je bio da je cuvar dobio nervni slom i verovatno zamalo otkaz, a celu stvar su u 9 ujutru iskljucili iz zida i nisu ni palili ceo dan. Mi smo posle ceo dan klikali i nije nam uspelo da otvorimo stranu u novom prozoru, ali eto njemu je uspelo. Od tada nijedna aplikacija ni bila TopMost.
[ wex-alpha @ 22.01.2011. 16:32 ] @
Citat:
Boris B.: Kad smo vec kod kioska, evo sad se setih smesne situacije od pre par godina:

Napravili mi WPF kiosk za slovenacko predsedovanje EU, znaci DocumentViewer, WebBrowser, VideoPlayer, lepi dugmici, animacije itd. Touchscreen od 32'', staklena kutija, nema da nema.

Postavimo mi to u Centar Brdo jer dolaze mudonje iz EU pa ce da klikaju i da se dive. Tokom noci nocnom cuvaru u centru bilo dosadno i otvori lik radioveseljak.si, web radio sa slovenackom govedjom muzikom. JavaScript na stranici otvori stranu u novom prozoru, a posto je kiosk aplikacija bila TopMost web strana se naravno otvori ispod glavne aplikacije i krene da tresti govedina do daske (zvucnici naravno ugradjeni u zakljucanu staklenu kutiju). Rezultat je bio da je cuvar dobio nervni slom i verovatno zamalo otkaz, a celu stvar su u 9 ujutru iskljucili iz zida i nisu ni palili ceo dan. Mi smo posle ceo dan klikali i nije nam uspelo da otvorimo stranu u novom prozoru, ali eto njemu je uspelo. Od tada nijedna aplikacija ni bila TopMost. :)



:)