Bloquer sortie de programme

Signaler
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006
-
Bonjour,



Je dois réaliser un programme qui devra tourner sur de vieux ordinateurs (33 Mhz voire moins) sans souris (milieu public).

Les systèmes d'exploitations seront très certainement Windows, de Windows 3.1 à 95.

Le programme sera accessible par plusieurs centaines de personnes qui
devront s'identifier avant d'effectuer différentes actions.



Je veux désactiver toutes les possibilités de revenir sous l'OS.

J'ai pour l'instant opté pour un programme console plein écran.

Je souhaite désactiver ALT-TAB et CTRL-ALT-SUPP (ALT-F4 semble déja désactivé).



J'ai trouvé des sources pour des OS recents mais pas pour des versions antérieures à Windows XP.



Merci

11 réponses

Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010

Il y avait un truc sur c+builder pour win95
void __fastcall TForm1::FormCreate(TObject *Sender)
{
int val;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, &val, 0);
}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
int val;
SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, &val, 0);
}
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

Pourquoi ne pas executer ça en MS-DOS ? Je veux dire sans charger windows du tout.

XbY
http://sourceforge.net/projects/printtemplate/
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
J'utilise VC++ 6.0.
Effectivement le DOS serait une solution mais les ordinateurs utilisés vont petit à petit être remplacés par des plus récent qui tourneront sous XP.
Et si je ne me trompe pas il n'y a pas de DOS sous XP.
J'utilise des fonctions windows...
Les personnes chargées de lancer le programme et de mettre à jour les fichiers textes utilisés préferent un environnement Windows.

Bref, merci mais je préfererais lancer le programme sous Windows.
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

C'est tout de suite plus embetant...

Sinon pourquoi ne pas faire un hook. Ce code a l'air tout indiqué http://msdn.microsoft.com/library/default.asp?url=/msdnmag/issues/0700/Win32/toc.asp

XbY
http://sourceforge.net/projects/printtemplate/
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Merci, cette méthode ne fonctionne pas chez moi et ralenti considérablement le temps entre l'attente entre l'appui sur une touche et l'affichage à l'écran.

Peut-etre ne recupe-je pas la bonne instance du processus. En tout cas la valeur retournée par la fonction hook de windows ne renvoie pas NULL.

HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, (HINSTANCE)GetModuleHandle(NULL), 0);

Comment récupérer l'instance du processus ?
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Alt-Tab et compagnie envoient un message WM_SYSKEYDOWN ou WM_SYSCHAR à
la fenêtre. Tab envoie en wparam VK_TAB, alt envoie VK_MENU.
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

Il me semble que ça se fait via l'API GetCurrentProcID... Ce genre de truc est facilement trouvable dans la msdn.

XbY
http://sourceforge.net/projects/printtemplate/
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

Arfff j'ai oublier de repondre a la question de depart...

L'exe fourni en exemple fonctionne ?

XbY
http://sourceforge.net/projects/printtemplate/
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Merci, effectivement, l'exe fourni fonctionne mais je n'arrive pas à faire fonctionner le hook avec la console.

Il renvoie null avec (HINSTANCE)GetCurrentProcess() en paramètre et ne fonctionne donc pas.
Par contre avec (HINSTANCE)GetModuleHandle(NULL) il fonctionne mal, cad il est initialisé, mais la fonction appelée ralenti énormement la vitesse d'acquisition des touches, sans pour autant consommer du CPU.

Je vais essayer de créer la console depuis la fonction Winmain qui me donne directement l'instance. Je garde quand même la console car ça va bien avec les PC hyper pourri sur lesquels le programme va tourner.

Merci pour ces renseignements et éclaircissements !
Messages postés
573
Date d'inscription
samedi 16 novembre 2002
Statut
Membre
Dernière intervention
9 avril 2008
1
Bon.

Quelqu'un aurait-il l'obligeance de me dire pourquoi sans cette boite de dialogue je hook ne fonctionne pas ?

Quand je la remplace par:
AllocConsole();
Sleep(10000);

Je me prend un vent magistral, 1 le alt-tab, 2 ca lague comme décrit plus haut.
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

En fait, je pense que l'ID du processus est different de son "handle". Tu dois garder en mémoire la valeur fournie dans le WinMain.

Maintenant je ne sais pas pourquoi ça ne va pas en utilisant le Sleep. Et je suis sous Linux (Et pas motivé pour redémarrer sous windows...) Donc je ne peux pas essayer de mon coté.
XbY
http://sourceforge.net/projects/printtemplate/