begin process at 2010 03 18 04:06:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Détection de lancement d'applications


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Détection de lancement d'applications

mercredi 14 janvier 2009 à 11:59:28 | Détection de lancement d'applications

buno

Ami(e)s de la communauté, bonjour!
J'aimerais avoir votre avis sur une question qui me préoccupe en ce moment. Je dois développer un petit composant natif qui retourne, parmi les applications ouvertes sur ma machine, celles qui sont, par exemple, dans une certaine liste blanche, du style:
- Microsoft Excel - MaFiche.xls
- Internet Explorer - CPPFrance.com
...
L'objectif final étant de récupérer le handle des fenêtres des appli "autorisées".

 Mon souci concerne la récupération des applications, ou fenêtres. D'après mes recherches sur le sujet, 2 possibilités s'offrent à moi:
- faire un timer qui récupère la liste des applications ouvertes (par exemple à partir de la source de BruNews) qui m'oblige à faire une différence de liste pour voir les changements
- faire un service, ou driver, qui est notifié à chaque lancement de processus mais qui ne détecte pas les différentes "applications" au sens gestionnaire de tâches

Est-ce quelqu'un s'est déjà confronté à ce problème? Avez-vous des informations à me donner?

Merci d'avance de vos retours.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 14 janvier 2009 à 13:27:18 | Re : Détection de lancement d'applications

darunia

Avec cette clé registre tu peux charger une dll maison à chaque lancement de process ... A toi de jouer !

D@runia
mercredi 14 janvier 2009 à 16:56:01 | Re : Détection de lancement d'applications

buno

Salut Darunia,
Si je comprends bien, ce que tu veux me dire c'est que je peux créer une dll qui envoie un message à mon appli à chaque démarrage de process utilisant User32.dll, c'est ça?
2 questions:
- peu importe les droits utilisateur?
- c'est au niveau process ou application? Je m'explique. Tu ouvre IE. Sur un lien, tu fais "clic droit > ouvrir dans une nouvelle fenetre". Une autre fenetre se lance. Dans le gestionnaire des tâches, j'ai bien 2 entrées dans l'onglet "Application" mais un seul processus dans l'onglet "Processus".

Ce que je cherche, c'est pouvoir détecter les 2 "applis IE". Est-ce que ta solution répond à cette question?

NB: Pour tous ceux qui lisent ce poste, attention quand vous utilisez cette clé de registre!! Risque de reboot automatique. Oui, je parle par expérience...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 14 janvier 2009 à 22:03:01 | Re : Détection de lancement d'applications

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
Tu peux essayer les fonctions RegisterShellHookWindow(), RegisterWindowMessage() et DeregisterShellHookWindow(). Tu pourras récupérer le message de création de toute nouvelle fenêtre dans la procédure de ta fenêtre ou boite de dialogue qui pourrait être invisible. Exemple:
case WM_INITDIALOG:
    //...
    RegisterShellHookWindow(hwnd);
    break;
case WM_CLOSE:
    //...
    DeregisterShellHookWindow(hwnd);
    break;
default:
    if(message==RegisterWindowMessage("SHELLHOOK"))
    {
       if(wParam==HSHELL_WINDOWCREATED)
       {
          GetWindowText((HWND)lParam,buffer,MAX_PATH);
          MessageBox(hwnd,buffer,"Fenêtre créée",0);
        }
    }
    break;

jeudi 15 janvier 2009 à 17:30:04 | Re : Détection de lancement d'applications

buno

Salut,
Je pense que j'ai pas dû bien comprendre le principe. Je te dis ce que j'ai compris, dis moi où je me trompe:
Le code que tu me donnes en exemple est à mettre dans mon appli d'écoute.
hwnd est le handle sur ma fenêtre
RegisterShellHookWindow(hwnd) --> me permet d'inscrire ma fenêtre sur la notification de "certains" messages
DeregisterShellWindow(hwnd) --> désabonne ma fenêtre
if (message==RegisterWindowMessage("SHELLHOOK") --> si le message "est" SHELLHOOK

Voici maintenant ma question:
- "certains" messages, "SHELLHOOK" --> il faut que la fenêtre créée envoie un message SHELLHOOK, non? Mais ça, je n'ai pas la main dessus

Je pense que j'ai zappé une étape. Peux-tu m'éclaircir un peu plus, s'il te plaît?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
jeudi 15 janvier 2009 à 18:56:04 | Re : Détection de lancement d'applications

racpp

Administrateur CodeS-SourceS
Tu as bien compris. Pour répondre à ta question: la fenêtre qui vient d'être créée n'a rien à envoyer. C'est le Shell, disons le système qui s'en occupe. C'est lui qui envoie ce message à ta fenêtre en lui signalant la création, la réduction, la restauration etc d'une fenêtre. A rappeler que tu peux mettre le code dans un service qui interagit avec le bureau.
vendredi 16 janvier 2009 à 16:41:57 | Re : Détection de lancement d'applications

buno

Ok merci, je pense avoir saisi le truc. Du coup, le code que tu m'a filé fait boucler le programme, non?
Je lance mon prog --> OK
Je lance IE --> hop! je catche la création de la fenêtre donc MessageBox
MessageBox --> hop! je catche sa création également
etc...

Le principe du service me plait également... ça t'embêterait de développer un peu cette idée?
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 16 janvier 2009 à 16:56:28 | Re : Détection de lancement d'applications

buno

Au temps pour moi! Mauvaise bidouille de ma part: j'avais passé NULL au lieu de hwnd dans la MessageBox.
Par contre, je suis toujours intéressé par l'explication du dev sur le service.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 16 janvier 2009 à 20:18:03 | Re : Détection de lancement d'applications

racpp

Administrateur CodeS-SourceS
Il y'a beaucoup d'exemples de services sur le site. Pour faire interagir un service avec le bureau, le 5ème paramètre de la fonction CreateService() doit être:
SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS
Au démarage du service, une boite de dialogue ou une fenêtre invisible sera créée. Sa procédure captera la notification comme mentionné dans le code plus haut.

vendredi 16 janvier 2009 à 21:44:35 | Re : Détection de lancement d'applications

buno

Effectivement, j'ai eu le temps de trouver des exemples comme celui d'Arnotic ou encore celui de BruNews.
Merci encore racpp de m'avoir aidé.
Dès que j'ai terminé, je posterais ma source: ça pourra ptet aider d'autres personnes.

@+ pour de nouvelles aventures!!
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...


Cette discussion est classée dans : liste, applications, lancement, détection, ouvertes


Répondre à ce message

Sujets en rapport avec ce message

Détection de Windows par les applications MS-Dos [ par grandvizir ] Bonjour, Dans les propriétés avancées des raccourcis PIF, il y a une case à cocher «Empêcher la détection de Windows par les applications MS-Dos».<FON récupérer la liste des applications visibles dans la barre de tâches [ par dgueul ] Bonjour, Je souhaite créer un gadget vista/seven ayant pour but de remplacer la barre "Démarrer". Là où je bloque, c'est au moment de récupérer la l héritage & template [ par rolm ] Bonjour, J'aurai besoin d'un peu avec des tempates. En fait je voudrais créer une class qui hérite d'une class template mais d'un type donné. par e Récupérer les infos sur les services Windows [ par sen25000 ] Bonjour. Comment afficher dans un fichier/tableau la liste des services Windows de façon à savoir quand ils ont démarré et quand ils se sont arrêtés. Liste des PCs sur un réseaux [ par mohdaef ] Bonjour à tous Cela fait un certain temps que je cherche comment je peux lister les ordinateurs se trouvant sur mon réseau. J'ai jeter un ½il aux fon Crée une liste chainé dans une fonction [ par carton99 ] Bonjour, j'ai un probleme sur les listes , je doit absolument régler ce probleme car je doit faire une fonction récursive. voila le code Population Récupérer et modifier une liste [ par jnbrunet ] Bonjour, Il y a une application faite en cpp donc j'aimerais récupérer les données à l'intérieur d'une liste de données (multi colonne). La liste est les liste chainée [ par korimatsu ] bonjour a tous je voulais vous demander de me donner un code source pour un programme qui représente un polynôme avec les liste chainée et calcule la les liste chainée [ par korimatsu ] bonjour a tous je voulé juste savoir une chose si j'écris mon maillon de cette façon typedef struct maillon {int v; struct maillon *suiv; }maillo


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales