OVH Cloud OVH Cloud

interruption clavier

5 réponses
Avatar
marcpirat
salut

j'ai un programme qui roule, l'usager ne peut avoir accès au bureau
sous windows, linux.... j'ai un autre programme (java cette fois si)

est-t'il possible que si l'usager appuie sur les touches ctrl shif f1
dans la premier programme (non java) qu'une action se déclenche dans
mon programme java....

faudrait avoir accès au interruption clavier je crois pour faire ça...
il y a peut-être une solution pour java?

merci

5 réponses

Avatar
jlp
salut

j'ai un programme qui roule, l'usager ne peut avoir accès au bureau
sous windows, linux.... j'ai un autre programme (java cette fois si)

est-t'il possible que si l'usager appuie sur les touches ctrl shif f1
dans la premier programme (non java) qu'une action se déclenche dans
mon programme java....

faudrait avoir accès au interruption clavier je crois pour faire ça...
il y a peut-être une solution pour java?

merci
Peux-tu modifier tes sources Java ?

Si oui, il te faut écrire un genre de keylogger pour ton programme java
en JNI ( Java Native Interface : donc OS dépendant )qui va te permettre
de connaitre les touches claviers pressées. J'ai réalisé cela pour créer
un outil d'enregistrement de scénarios et de rejeu pour toute application.
Pour Windows regarde du coté de la fonction GetAsyncKeyState sur MSDN.
Pour linux ( serveur X11 ),c'est un peu plus compliqué, il faut réécrire
une fonction identique et mapper en fonction du clavier ( AZERTY,
QWERTY, portable ...).

Avatar
marcpirat
jlp wrote in message news:<41977cdf$0$22060$...
salut

j'ai un programme qui roule, l'usager ne peut avoir accès au bureau
sous windows, linux.... j'ai un autre programme (java cette fois si)

est-t'il possible que si l'usager appuie sur les touches ctrl shif f1
dans la premier programme (non java) qu'une action se déclenche dans
mon programme java....

faudrait avoir accès au interruption clavier je crois pour faire ça...
il y a peut-être une solution pour java?

merci
Peux-tu modifier tes sources Java ?

Si oui, il te faut écrire un genre de keylogger pour ton programme java
en JNI ( Java Native Interface : donc OS dépendant )qui va te permettre
de connaitre les touches claviers pressées. J'ai réalisé cela pour créer
un outil d'enregistrement de scénarios et de rejeu pour toute application.
Pour Windows regarde du coté de la fonction GetAsyncKeyState sur MSDN.
Pour linux ( serveur X11 ),c'est un peu plus compliqué, il faut réécrire
une fonction identique et mapper en fonction du clavier ( AZERTY,
QWERTY, portable ...).


pourrais-tu me donner tes sources?


Avatar
jlp
jlp wrote in message news:<41977cdf$0$22060$...


salut

j'ai un programme qui roule, l'usager ne peut avoir accès au bureau
sous windows, linux.... j'ai un autre programme (java cette fois si)

est-t'il possible que si l'usager appuie sur les touches ctrl shif f1
dans la premier programme (non java) qu'une action se déclenche dans
mon programme java....

faudrait avoir accès au interruption clavier je crois pour faire ça...
il y a peut-être une solution pour java?

merci


Peux-tu modifier tes sources Java ?
Si oui, il te faut écrire un genre de keylogger pour ton programme java
en JNI ( Java Native Interface : donc OS dépendant )qui va te permettre
de connaitre les touches claviers pressées. J'ai réalisé cela pour créer
un outil d'enregistrement de scénarios et de rejeu pour toute application.
Pour Windows regarde du coté de la fonction GetAsyncKeyState sur MSDN.
Pour linux ( serveur X11 ),c'est un peu plus compliqué, il faut réécrire
une fonction identique et mapper en fonction du clavier ( AZERTY,
QWERTY, portable ...).



pourrais-tu me donner tes sources?
l'as-tu reçu dans ton mail ?

est-ce que ton adresse mail est valide ?
A ta disposition
A+
JL PASTUREL



Avatar
marcpirat
jlp wrote in message
l'as-tu reçu dans ton mail ?
est-ce que ton adresse mail est valide ?
A ta disposition
A+
JL PASTUREL



oui je l'ai bien reçu merci

dans notre source java que doit-je inclure pour pouvoir utiliser la
fonction en question?

Avatar
jlp
jlp wrote in message

l'as-tu reçu dans ton mail ?
est-ce que ton adresse mail est valide ?
A ta disposition
A+
JL PASTUREL




oui je l'ai bien reçu merci

dans notre source java que doit-je inclure pour pouvoir utiliser la
fonction en question?
Il faut utiliser le mécanisme de compil de JNI :

Exemple réalisé sous windows avec Cygwin

Créer la classe java avec les methodes natives :
ex dans le fichier java KeyLogJava.java
...
public class KeyLogJava {
...
public native long keytyped();
...
}

Generation de la classe
$JAVA_HOME/bin/javac -classpath .:$CLASSPATH
RobotSaisieJLPV4/KeyLogJava.java

Génération du fichier d'entête
$JAVA_HOME/bin/javah -jni -classpath . RobotSaisieJLPV4.KeyLogJava
extrait du fichier :
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class RobotSaisieJLPV4_KeyLogJava */

#ifndef _Included_RobotSaisieJLPV4_KeyLogJava
#define _Included_RobotSaisieJLPV4_KeyLogJava
#ifdef __cplusplus
extern "C" {
#endif
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOW
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOW 0L
#undef RobotSaisieJLPV4_KeyLogJava_SW_HIDE
#define RobotSaisieJLPV4_KeyLogJava_SW_HIDE 1L
#undef RobotSaisieJLPV4_KeyLogJava_SW_MAXIMIZE
#define RobotSaisieJLPV4_KeyLogJava_SW_MAXIMIZE 2L
#undef RobotSaisieJLPV4_KeyLogJava_SW_MINIMIZE
#define RobotSaisieJLPV4_KeyLogJava_SW_MINIMIZE 3L
#undef RobotSaisieJLPV4_KeyLogJava_SW_RESTORE
#define RobotSaisieJLPV4_KeyLogJava_SW_RESTORE 4L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWNA
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWNA 5L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWMAXIMIZED
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWMAXIMIZED 6L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWNORMAL
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWNORMAL 7L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWNOACTIVATE
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWNOACTIVATE 8L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWMINNOACTIVE
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWMINNOACTIVE 9L
#undef RobotSaisieJLPV4_KeyLogJava_SW_SHOWMAXNOACTIVE
#define RobotSaisieJLPV4_KeyLogJava_SW_SHOWMAXNOACTIVE 10L
/* Inaccessible static: JIDC_ARROW */
/* Inaccessible static: JIDC_APPSTARTING */
/* Inaccessible static: JIDC_HAND */
/* Inaccessible static: JIDC_IBEAM */
/* Inaccessible static: JIDC_WAIT */
/* Inaccessible static: verrou */
/* Inaccessible static: nbChange */
/* Inaccessible static: rep */
/* Inaccessible static: cursorRef */
/* Inaccessible static: cursorRefBis */
/* Inaccessible static: cursorCurrent */
/* Inaccessible static: hWndRef */
/* Inaccessible static: hCursorRefArrow */
/* Inaccessible static: hCursorRefTexte */
/* Inaccessible static: hCursorRefWait */
/* Inaccessible static: hCursorRefHand */
/* Inaccessible static: hCursorRefArrowSablier */
/* Inaccessible static: hWndCurrent */
/* Inaccessible static: hCursorCurrent */
/* Inaccessible static: keyBoucle */
/*
* Class: RobotSaisieJLPV4_KeyLogJava
* Method: initCursor
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_RobotSaisieJLPV4_KeyLogJava_initCursor
(JNIEnv *, jobject);

/*
* Class: RobotSaisieJLPV4_KeyLogJava
* Method: keytyped
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_RobotSaisieJLPV4_KeyLogJava_keytyped
(JNIEnv *, jobject);


Codage C de la fonction :
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <string.h>
#include <psapi.h>
// Modification du windws.h stanadard en supprimant l include de winsock

#include "RobotSaisieJLPV4_KeyLogJava.h"

....
JNIEXPORT jlong JNICALL Java_RobotSaisieJLPV4_KeyLogJava_keytyped
(JNIEnv *env, jobject obj)
{
int isShift=0;
int isAlt=0;
int isControl=0;
int i;
int vrai=1;
short retour;
int keyiter;
jint keyBoucle;
jclass cls = (*env)->GetObjectClass(env, obj);
jfieldID fid;

/* Recuperation de la variable keyBoucle pour le reglage
de la capture des touches du claviers valeur de 1000 à 1000000
*/

fid = (*env)->GetStaticFieldID(env, cls, "keyBoucle", "I");
if (fid == 0)
{
return 0;
}
keyBoucle = (*env)->GetStaticIntField(env, cls, fid);
// printf(" FieldAccess.retKey = %dn", keyBoucle);

//while(vrai==1)
//{
//for(keyiter=0;key<keyBoucle;key++);


for(i = 0;nlist[i] != 0;i++)
{
if (GetAsyncKeyState(nlist[i])== -32767)

{
break;
}
}


//if(nlist[i] == 0)
// continue;
//else
key=nlist[i];
if ( key == 1)
{
printf("appuye sur bouton gauchen");
}
if ( key == 2)
{
printf("appuye sur bouton droitn");
}
if ( key == 4)
{
printf("appuye sur bouton milieun");
}
//vrai=0;
//}
//printf("Sortie de boucle key= %d ; retour=%dn",key,retour);
// on retourne si aucune touche n'est detectee appuyee
if (key == 0) return 0;

// test si la touche shift est appuyee
if (key == 0) return 0;
if ( GetAsyncKeyState(16) == -32767 || GetAsyncKeyState(16) == -32768)

{
isShift=1;
}
//test si la touche control est appuyee
if ( GetAsyncKeyState(17) == -32767 || GetAsyncKeyState(17) == -32768)

{
isControl=1;
}
//test si la touche Alt est appuyee
if ( GetAsyncKeyState(18) == -32767 || GetAsyncKeyState(18) == -32768)

{
isAlt=1;
}
//construction du code retour
key00000+ ((jlong)(isShift)) * ((jlong)100000)+((jlong)
(isControl))*((jlong) 10000)+((jlong)(isAlt))*((jlong) 1000) +((jlong)
nlist[i]);

printf("key= %ldn",key);

return ((jlong) key) ;
}


Il y a un excellent tutorial JNI fourni sur le site de SUN.

Bon courage...
JLP