"Verrouiller" l'ordinateur en java

Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007 - 21 août 2006 à 01:13
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 18 mai 2007 à 14:50
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

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 août 2006 à 09:17
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
0
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
21 août 2006 à 12:20
ok, je vais fouiner de ce côté là, merci.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
27 août 2006 à 21:14
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.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
27 août 2006 à 21:21
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 août 2006 à 00:10
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
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
28 août 2006 à 00:18
Salut :

Ma réponse répondait conformément à la question vu que le système d'exploitation mentioné ici est Windows.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 août 2006 à 00:26
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
0
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
28 août 2006 à 00:50
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.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 août 2006 à 01:02
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
0
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
28 août 2006 à 01:10
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.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 août 2006 à 09:16
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
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
28 août 2006 à 12:26
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é.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 août 2006 à 13:08
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
0
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
28 août 2006 à 13:55
ok, merci beaucoup, je vais fouiner tout çà et je vous tiens au courant !
0
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
18 mai 2007 à 11:15
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à çà ;)
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
18 mai 2007 à 14:50
Salut:

merci. comme tu l'avais dit ça était vraimant une bataille.
0
Rejoignez-nous