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

Threads & Processus C++ Discussion :

Trouver le handle d'un processus


Sujet :

Threads & Processus C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut Trouver le handle d'un processus
    Je m'essaye au C++ en essayant d'apprendre sur le tas, je sais que ce n'est pas ce qu'il y a de mieux mais je fais avec ^^ .

    J'essaye des bout de code si ca fonctionne j'essaye de les modifier en faite j'apprends mieux comme ca ( même si je reconnais qu'il faut quelque base .)

    Sur un site j'ai trouvé un code qui permettrait de trouvé le handle d'une fenetre au premier plan grace à un : GetForegroundWindow() .

    Petite question de débutant ( je vais me faire lyncher ^^ ) a quoi servent les () à la fin de la commande ? J'ai cru comprendre que c'est pour mettre des paramètres mais sachant que cette commande n'en nécessite pas je ne vois pas pourquoi les mettre .

    Avoir le handle d'une fenetre en premier temps c'est bien mais avoir le handle d'une fenetre donné c'est mieux !

    J'ai donc trouvé ce code qui permet d'avoir le Handle de windows media player

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <windows.h>
    #include <stdio.h>
    int main(int argc, char * argv[])
    {
         HWND hMediaplayer = FindWindow("Media Player 2",NULL);
         printf("le handle de la fenêtre de media player 2 est : 0x%X",hMediaplayer);
         return 0;
    }
    Bien sur ce code fonctionne .

    La ou le probléme réside c'est que j'ai voulu qu'il me donne le Handle de Firefox

    Le deuxieme parametre permet apparement de chercher le handle en spécifiant une partie du nom de la fenetre .

    J'ai donc modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <windows.h>
    #include <stdio.h>
    int main(int argc, char * argv[])
    {
         HWND hFF = FindWindow("Firefox","Firefox");
         printf("le handle de la fenêtre de Firefox est : 0x%X",hFF);
         return 0;
    }
    Le programe s'éxécute mais ne me donne pas l'handle .

    Pourriez vous m'aider ?

    Je vous remercie d'avance je sais que ca fait apprentit sorcier mais disons que je m'occupe la soirée comme ca

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,
    Citation Envoyé par geek-59600 Voir le message
    Petite question de débutant ( je vais me faire lyncher ^^ ) a quoi servent les () à la fin de la commande ?
    C'est pour indiquer que tu fais appel à une fonction.

    Pour ce que tu cherches à faire, c'est le premier paramètre de FindWindow() qui doit être NULL, et le deuxième sera le titre de la fenêtre que tu chercher à récupérer.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Pour obtenir l'id de processus à partir d'une fenêtre, on utilise la fonction GetWindowThreadProcessId().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Salut,C'est pour indiquer que tu fais appel à une fonction.

    Pour ce que tu cherches à faire, c'est le premier paramètre de FindWindow() qui doit être NULL, et le deuxième sera le titre de la fenêtre que tu chercher à récupérer.
    Donc j'avais bien interprété .

    Mais il se trouve que même comme ca, ca ne fonctionne pas

    J'ai essayé avec firefox en métant dans le deuxième paramètre "firefox" "Firefox" et même "Mozilla Firefox" sans résultat .

    J'ai ouvert notepad et j'ai mis en deuxième paramètre "Sans titre - Bloc-notes" ca ne fonctionne pas non plus .

    Auriez vous une idée ?

    Merci d'avance .

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    La classe de fenêtre de Notepad s'appelle simplement "notpad".
    Celle de Firefox s'appelle "MozillaUIWindowClass" pour les fenêtres principales, et "MozillaWindowClass" pour leurs sous-fenêtres.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    J'ai trouvé .

    Erreur de débutant ^^ le premier paramettre NULL je l'avais laissé entre guillemet ^^ .

    Non pas le fouet ^^

    Maintenant je voudrais juste que le caractére a s'ajoute dans notepad :

    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
    #include <iostream>
    #include <windows.h>
    #include <stdio.h>
    int main(int argc, char * argv[])
    {
         HWND hNTP = FindWindow(NULL,"Sans titre - Bloc-notes");
         printf("le handle de la fenêtre de notepad est : 0x%X \n",hNTP);
         system("pause");
         SetForegroundWindow(hNTP);
         Sleep(100);
         PostMessage(hNTP,WM_KEYDOWN,VK_A,0);
         Sleep(5000);
         PostMessage(hNTP,WM_KEYUP,VK_A,0);
         return 0;
    }
    Mais j'ai droit à : `VK_A' was not declared in this scope| et meme en remplacant VK_A par A meme erreur :s

    En warning j'ai ca aussi mais apparement ca géne pas la compilation : warning: unsigned int format, HWND arg (arg 2)|

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Citation Envoyé par geek-59600
    Je m'essaye au C++ en essayant d'apprendre sur le tas, je sais que ce n'est pas ce qu'il y a de mieux mais je fais avec ^^ .
    J'essaye des bout de code si ca fonctionne j'essaye de les modifier en faite j'apprends mieux comme ca
    En gise de C++ tu n'as pas choisi le meilleur exemple !

    Citation Envoyé par geek-59600
    ( même si je reconnais qu'il faut quelque base .)
    Je pense que tu devrais commencer pas là.

    Citation Envoyé par geek-59600
    Petite question de débutant ( je vais me faire lyncher ^^ ) a quoi servent les () à la fin de la commande ?
    Ce referer à ma remarque precedente.
    entre parentaises(Ce n'est pas une commande mais une fonction.)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    J'ai déja fais un peu de Basic sur MO5 ( on rigole pas j'avais 8 ans à l'époque ! ) un peu de VBS aussi disons que ca m'occupe les soirée pour ca que je fais ca sur le tas quand j'en aurais marre je passerai a autre chose ^^

    La je viens de me reseigner sur la librairie OpenCV qui à l'air de proposé des truc sympa mais rien que pour l'installation avec code block je misére ^^

    M'enfin ca m'occupe ...

  9. #9
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Malheureusement il n'est pas aisé (euphémisme) de devenir fonctionnel en C++ en dilettante. Par curiosité, tu as déjà utilisé du C ou des langages de scripts ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    J'ai survoler deux trois fois .

    Mais bon je reconnais que je pars mal des le départ j'vais laisser la programation au programmeur ...

  11. #11
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Tu n'es pas obligé d'abandonner,
    je connais plusieurs personne qui ont appris le c++ comme ça.
    Le truc c'est que tu ne débute pas correctement, il faut d'abord apprendre les base du langage plutôt que de se lancer tête baissé dans une fonctionnalité avancé.
    Tu ne connaitra peut-être pas toutes les subtilité du langage mais ça viendra en codant.

  12. #12
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 940
    Par défaut
    Citation Envoyé par geek-59600 Voir le message
    Mais bon je reconnais que je pars mal des le départ j'vais laisser la programation au programmeur ...
    Oulah ! Je ne te dis pas d'abandonner, au contraire ! Je mettais simplement en avant la complexité de la tâche, pour que tu en sois conscient, mais nullement pour te décourager La programmation est un art complexe, mais gratifiant (et même parfois utile ).

    Le C++ en particulier est très exigeant en temps et en concentration, l'apprentissage peut-être assez long ; ça fait un peu plus d'un an que je pratique, et depuis que je suis sur le forum je constate chaque jour l'étendue de mes lacunes ). Mais le C++ est un langage très formateur, qui combine des aspects de bas niveau (pointeurs, gestion de la mémoire) et de haut niveau (POO, généricité), que n'abordent pas d'autres langages.

    Mais pour en profiter, il vaut sans doute mieux aborder les choses de façon plus méthodique, de commencer par des bases, comme le suggère pottiez, et d'aborder ensuite des concepts plus complexes. Le site possède des cours magistraux pour le C++ qui sont très bien fait, et la FAQ (http://cpp.developpez.com/faq/cpp) est également très enrichissante ; Davidbrcz donne quelques conseils de bon sens, mais qu'il est quand même bon d'avoir en tête en travaillant : http://come-david.developpez.com/tutoriels/vraccpp/ .

    Et si le C++ ne te convient finalement pas, il y a beaucoup d'autres langages, l'un d'eux te satisfera sûrement : sur Python, j'ai notamment commencé hier à parcourir ce guide de formation que j'ai trouvé simple, clair et abordable :http://python.developpez.com/cours/T...?page=sommaire

    Donc aucune raison de lâcher l'affaire

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    Mon plus gros défaut c'est que je supporte trés mal l'échec ^^ .

    J'vais recommencé depuis le début voir acheté un bouquin ou deux .

    j'aime pas perdre

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Il n'y a pas de VK_A.
    Les touches A à Z sont représentées par le caractère ASCII correspondant (majuscule)

    Code winuser.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /*
     * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
     * 0x40 : unassigned
     * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
     */
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    En mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PostMessage(hNTP,WM_KEYDOWN,A,0);
    Ca ne fonctionne pas non plus : |20|error: `A' was not declared in this scope|

  16. #16
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    A est une variable, 'A' est le caractère ASCII.
    Il faut croire que tu ne tires pas les bonnes conclusions de ta précédente erreur avec le NULL...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    J'ai confondu guillemet et apostrophe

    Je touche bientot quel livre me conseilleriez vous d'acquérir pour débuter ? Si possible avec des exercices .

    En attendant je vous donne mon code qui ne marche toujours pas :'(

    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
    #include <iostream>
    #include <windows.h>
    #include <stdio.h>
    int main(int argc, char * argv[])
    {
         system("start notepad");
         Sleep (100);
         HWND hNTP = FindWindow("notepad",NULL);
         printf("le handle de la fenêtre de notepad est : 0x%X \n",hNTP);
         Sleep (1000);
         SetForegroundWindow(hNTP);
         Sleep (1000);
         PostMessage(hNTP,WM_KEYDOWN,'A',0);
         Sleep (1000);
         PostMessage(hNTP,WM_KEYUP,'A',0);
         return 0;
    }

  18. #18
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par geek-59600 Voir le message
    En attendant je vous donne mon code qui ne marche toujours pas :'(
    Mais encore?
    Moins tu donnes de détails quand à ton problème, moins il y aura de gens aptes à t'aider ou qui auraient le temps de creuser. Car plus on a de clés, de pistes, plus vite on trouve un problème.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 154
    Par défaut
    C'est vrai excusé moi j'ai pas l'habitude de posé des questions sur un code donc j'oublie de précisé ce qui cloche .

    Le code se compile bien aucun souci notepad s'ouvre mais aucun caractères s'affiche comme si le PostMessage ne s'éxécuté pas .

  20. #20
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 454
    Par défaut
    Citation Envoyé par geek-59600 Voir le message
    Je touche bientot quel livre me conseilleriez vous d'acquérir pour débuter ? Si possible avec des exercices .[/CODE]
    Je suis fan du cours C/C++ de Christian Casteyde.

    Tu affirmes avoir commencé en faisant du BASIC sur MO5. J'ai moi même énormément travaillé sur Thomson, à l'époque (il y a toujours un forum annuel de deux jours en octobre et à Paris, d'ailleurs). Il est vrai que le Basic de l'époque permettait l'ellipse des paramètres lorsqu'ils étaient optionnels. En C et C++, la syntaxe est plus rigoureuse pour deux raisons : d'abord, les parenthèses permettent de montrer que l'on invoque bien une fonction à zéro paramètre, mais en plus, lorsque tu utilises un mot qui n'est pas un mot-clé, c'est toujours un symbole associé à une valeur.

    La plupart du temps, il s'agit de variables. Si tu tapes le nom de la fonction sans les parenthèses, tu te réfères à la fonction proprement dite. Autrement dit, tu obtiens un pointeur vers l'emplacement du code de la fonction en mémoire (ou, tout du moins, son point d'entrée).

    C'est utile non seulement pour débuguer, mais aussi pour faire des tableaux de fonctions, ou pour permettre à l'utilisateur de spécifier la fonction de son choix dans le cadre de quelque chose de plus large. Le cas le plus spécifique est le tri (sort()), lors duquel tu spécifies deux tableaux d'éléments mais également la fonction qui sert à les comparer.

    En C++, on peut redéfinir les opérateurs, ce qui rend cet exemple sans objet, mais ça t'impose quand même d'utiliser des classes.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2010, 10h55
  2. Réponses: 6
    Dernier message: 01/10/2009, 17h46
  3. Trouver le Pid d'un processus qui appelle un programme
    Par samlecas dans le forum Débuter
    Réponses: 3
    Dernier message: 14/01/2009, 14h10
  4. [VB.NET] Trouver un handle, simuler clic sur bouton
    Par 6su7 dans le forum Windows Forms
    Réponses: 33
    Dernier message: 21/08/2006, 09h38

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