"Verrouiller" l'ordinateur en java

Signaler
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Auriez vous une idée pour "Verrouiller" windows via java ?

Explications : Je developpe un soft de gestion de salle pour un cyber et j'ai besoin qu'au démarrage les postes clients restent "bloqués" sur une fenetre de login/pass java. Tout autre action doit être impossible (Je recherche par exemple le même effet que lorsque vous cliquez sur "démarrer"->"arreter" : Vous ne pouvez interragir qu'avec la boite de dialogue vous demandant si vous voulez eteindre, redemarrer, annuler...). Je cherche depuis plusieurs jours et commence à me demander si c'est possible.

Existe-il une bidouille ou  une astuce me permettant d'obtenir ce résultat ?

16 réponses

Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

tu ne pourras jamais faire ce que tu veux en java pure, en effet ta demande n'es pas portable et bien trop specifique à l'OS cependant moyenant un coup de JNI tu devrais rehussir à faire ce que tu veux

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007

ok, je vais fouiner de ce côté là, merci.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Pour verrouiller Windows vous pouvez utliser l'utilitaire RUNDLL32.EXE qui permet d'exécuter des programmes à l'intérieur des fichiers DLL.

la commande à utiliser est la suivante : rundll32.exe user32.dll, LockWorkStation
Vous pouvez l'exécuter directement via l'invite de commande.

Pour la programmer en Java :

import java.io.*; // Pour IOException

try {
         Runtime run = Runtime ().getRuntime ();
         run.exec ("rundll32.exe user32.dll, LockWorkStation");
}
catch (IOException exception) {
}

Bonne chance.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

La deuxième réponse est correcte.
Dans la première réponse j'ai commis une erreure de frappe.

Runtime run = Runtime ().getRuntime (); // INCORRECTE
doit être corrigée en :

Runtime run = Runtime.getRuntime (); // CORRECTE
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

reponse trop importable et trop lourde la meilleur réponse serai un code JNI au lieu d'un vieu code d'appel à un process windaube ce qui eviterai de brider une solution à un seul OS... vu que sous linux cela ne se passe pas vraiment come ça

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Ma réponse répondait conformément à la question vu que le système d'exploitation mentioné ici est Windows.
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,
oui mais de donner une reponse portable est plus judicieuse et plus acceptable sachant que la base est java qui est portable !

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007

D'abord, merci pour cette réponse.
En fait, je me suis mal exprimé, j'ai du mal à expliquer mon problème :

Je cherche comment faire en sorte que l'utilisateur ne puisse interagir qu'avec mon programme.

En fait, je développe ce soft pour un cybercafé autonome, c'est à dire que les utilisateurs ont un compte prépayé et lorsqu'ils arrivent sur une machine, ils rentrent leurs identifiants pour pouvoir l'utiliser. Le soft est terminé hormis ce [gros] probleme.

L'utilisateur, lorsqu'il arrive devant un poste, ne doit voir que la fenetre de login du programme client et n'interagir qu'avec elle (un peu comme lorsque vous cliquez sur démarrer->arreter).

Encore merci pour vos réponses.
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
salut,

je ne pense vraiment pas que ce quetu veuxw faire soit possible en java.... commeje te le dis plus haut c'est trop spécifique à l'os.

les alternatives possible :

1 developper un robot en se basant sur java.aw.Robot qui permet de trapper et d'effectuer des actions hors fenetre java
2 rendre ton application en service windows(ou demon unix) ce qui permet de trapper des evenements en trame de fond
3 sois plus explicite sur ce que ton appli peut faire et ce que le poste sur la quel elle est permet defaire

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007

Je veux que lorsque mon appli est lancée, l'utilisateur ne puisse rien faire d'autre qu'interagir avec elle, cliquer nul part ailleurs que sur ma fenêtre java, ne pas faire d'alt+tab, ne pas pouvoir fermer l'appli...(le ctrl+alt+suppr est déjà désactivé).
L'appli en question est la fenetre de login du programme client et je veux faire en sorte que l'utilisateur ne puisse en aucun cas utiliser la machine avant d'avoir envoyé ses identifiants au prog serveur.

Je vais fouiner un peu du côté de la classe robot, merci.
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

si tu ne veux pas que le gus puisse faire d'action tu nous met une fenetre en plein ecran avec le flag setAlwaysOnTop à true et il ne pourra pas faire grand chose (pense à verouiller Alt+F4 aussi :D)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Je veux juste compléter l'idée de Twinuts  :

1. Il faut que crée une fenêtre en mode fullscreen.
(Utiliser les classes GraphicsDevice et GraphicsEnvironment)
de cette façon votre fenêtre masquera d'une façon compléte le barre de Démarrage.

2. Il faut que votre fenêtre capte les événements et les ignorer pour que le système d'exploitation ne puisse les traiter.
ALT+TAB
ALT+F4
TOUCHE WINDOWS
(Utilise la méthode registerKeyboardAction)

3. Je pense que il vaut mieux construire la squelette de votre application sur un Window que sur un JFrame car la première ne dispose pas de bouton fermé.
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

pour completer il est possible d'utiliser une JFrame et d'utiliser la methode setUndecorated(true) pour enlever les décorations du systeme (bordures, barre de titre donc bouton fermer, agrandir, ...)

sinon pour trapper Alt F4, Alt Tab et la touche windows hélas tu ne le fera pas comme ça vu que nativement sous Linux et Windows ces combinaisons de touche sont spécifique au système d'exploitation qui les trappe avant de le notifier à une application.

cependant il existe un moyen (testé sous linux) pour contourner Alt+F4 en faisant simplement :

 maJFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

concernant les autres touches tu parviendra surement à trouver une petite feinte moyenant des killo de code , mais dis toi qu'en C/C++ c'est fesable assez simplement donc il y a toujours une solution

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007

ok, merci beaucoup, je vais fouiner tout çà et je vous tiens au courant !
Messages postés
44
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
12 août 2007

Je reviens sur ce post longtemps après la bataille :

Finallement, dans une première version du programme, je me suis servi d'un hooker que j'ai developpé en C. Solution un peu lourde et pas convainquante (difficultés liées aux touches de fonctions spéciales du clavier telles que "lecteur multimedia" etc), j'ai fini par m'en passer et je kill simplement explorer apres avoir hooké taskmgr pour en empecher l'accès. Voilà, je ne sais pas si çà servira à quelqu'un mais c'est déjà çà ;)
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut:

merci. comme tu l'avais dit ça était vraimant une bataille.