IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Détection ouverture fenêtre OS


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut Détection ouverture fenêtre OS
    Bonjour à tous, je cherche à savoir s'il est possible de récupérer un évènement lorsqu'une fenêtre quelconque est ouverte sur l'OS ?

    Pour être plus précis, est-il possible d'exécuter un programme JAVA qui fonctionnerait comme un monitor et qui capterai toutes les ouvertures de fenêtres de l'OS (notepad, WLM, media player, firefox, etc...) ?

    Je pensais essayer avec ToolKit mais je ne trouve pas comment faire et aucun sujet ici ne semble correspondre à ma demande...

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 576
    Par défaut
    Pas en pur Java. Il devrait être possible, en théorie, de faire une bibliothèque JNI qui permettrait ça, mais je n'ai pas entendu parler d'une telle chose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Java n'est pas le langage le plus indiqué pour ce genre d'operation. Du c/c++ conviendrait mieux.

    Ensuite, tu peux faire du JNI si tu veux vraiment avoir une interface java.

    a+

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut
    Je suis ok pour changer de langage mais dans ce cas étant beaucoup plus habitué à faire du java il me faudrai un exemple... quelqu'un as-t-il un lien ?

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Oui mais il a été supprimé. Je t'envoie le lien d'un programme en C (que je n'ai pas testé) mais qui devrait t'aider a avancer par MP.
    Si tu veux vraiment faire une IHM en java, tu peux passer par JNI pour faire le pont.

    a+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 185
    Par défaut
    J'ai finalement réussi à bidouiller un truc en rassemblant plusieurs bouts de code trouvé ici et là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
     
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
     
     
    public class NewProcessNotifier extends Thread {
     
    	List<String> lastProcesses=new ArrayList<String>();
     
    	/* (non-Javadoc)
    	 * @see java.lang.Thread#run()
    	 */
    	@Override
    	public void run() {
    		while(true){
    			try {
    				synchronized (this) {
    					wait(500);
    				}
    				List<String> processes=listRunningProcesses();
    				compareWithOld(processes);
    				lastProcesses=processes;
    			} catch (IOException e) {
    				e.printStackTrace();
    				System.exit(-1);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    				System.exit(-1);
    			}
    			super.run();
    		}
    	}
     
    	public void compareWithOld(List<String> gettedList){
    		if(!lastProcesses.isEmpty()){
    			for(final String str:gettedList){
    				if(!lastProcesses.contains(str)){
    					System.out.println("New one name "+str);
    				}
    			}
    		}
    	}
     
    	public List<String> listRunningProcesses() throws IOException {
    		List<String> processes = new ArrayList<String>();
    		String line=null;
    		Process p = Runtime.getRuntime().exec("tasklist.exe /fo csv /nh");
    		Scanner sc=new Scanner(p.getInputStream());
    		while (sc.hasNextLine()) {
    			line=sc.nextLine().split(",")[0];
    			if (!line.trim().isEmpty()) {
    				processes.add(line);
    			}
    		}
    		sc.close();
    		return processes;
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		NewProcessNotifier thred=new NewProcessNotifier();
    		thred.start();
    	}
     
    }
    Certes ca liste les processus mais pas les fenetres et oui ca reste ciblé windows pour le moment mais l'on peut faire une sorte de portabilité en détectant l'os pour router le process de listing vers une méthode ou une autre.
    Je testerai aussi la soluction en C pour m'amuser un peut^^

    En tout cas merci à tous, je clos cette discussion qui est pour moi pratiquement résolue.

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Disons que ce n'est pas la meme approche. Ta technique revient a faire du pull pour verifier si un nouveau processus est apparu. Mettre un hook sur une ouverture fenetre permet d'etre notifié en cas d'ouverture donc d'attendre passivement. Mais bon, si le pull suffit, pas besoin d'aller plus loin

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VB6 Détection de fenêtres modales
    Par Vortal dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/11/2006, 15h55
  2. Réponses: 7
    Dernier message: 22/11/2005, 12h43
  3. [JFrame] Ouverture fenêtre autre part que dans coin haut gauche
    Par tooney dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 28/05/2005, 20h36
  4. Détection ouverture de session Windows
    Par Atao_29 dans le forum MFC
    Réponses: 9
    Dernier message: 18/03/2005, 16h49
  5. Détecter ouverture fenêtre
    Par goutbouyo dans le forum Windows
    Réponses: 2
    Dernier message: 28/10/2004, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo