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

Langage Delphi Discussion :

Handle


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut Handle
    Meilleurs voeux à tous !

    En ce moment, je commence à rentrer un peu dans les handles et je n'ai pas encore tout saisir...

    A priori c'est juste une question de vocabulaire à moins que je sois passé encore à coté de quelque chose...

    Je trouve facilement la fenetre au premier plan avec GetForegroundWindow

    J'essaie de la fermer avec sendmessage(Handle,wm_close,0,0)

    Mais soucis ca ne ferme pas tout le temps la fenêtre (par exemple internet explorer)

    alors j'utilise un truc plus violent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure Tueur(Handle: hwnd);
    var dwProcessId: DWORD;
        HandleProcess:THandle;
    begin
      GetWindowThreadProcessId(Handle,@dwProcessId);//Obtention de l'identifiant du thread (dans la variable dwProcessId) qui a créé la fenêtre. La fenêtre est désignée par son Handle
      if dwProcessId<>0
        then begin
          HandleProcess := OpenProcess(PROCESS_TERMINATE,False,dwProcessId); //Obtention du Handle du process à partir de l'identifiant du thread (dwProcessId)
          TerminateProcess(HandleProcess,0);//Arrêt du process désigné par HandleProcess. Tous ses threads sont également arrétés.
        end;
    end;
    Mon soucis est de savoir si apres le sendmessage ma fenetre existe toujours et si c'est la cas j'utilise le "tueur".

    Je sais je pourrais chercher le handle avant et apres le sendmessage et faire la comparaison mais je prefere savoir si le handle de la fenetre est toujours valide.

    C'est quoi la synthaxe ?

    ou peut etre j'ai un "mauvais" handle de la fenetre.

    Merci, David

    PS : comment on enleve le beep sur le sendmessage ?

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Bonsoir,

    Je ne sais pas si ça peut t'aider mais moi j'utilise les fonctions FindWindowA et PostMessage pour détruire une fenêtre externe à l'application comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wndHandle:=FindWindowA(nil, nom_application);
    PostMessage(wndHandle, 16, 0, 0);
    16 correspond à wm_close!!!

    A plus

    Christopher

  3. #3
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut
    Je ne connais pas le nom de l'application !
    Ca peut être très variable !

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Ce que je ferais:
    - Chercher le handle de l'application qu'on veut fermer
    - Essayer de la fermer proprement avec WM_Close
    - Rechercher le Handle de la même façon qu'au début
    - Si le Handle trouvé est différent de 0 alors appeler la fonction Tueuse dessus...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut
    C'est ce que je fais pour l'instant...

    J'essaie de faire quelque chose de plus propre !

    Pour cela, en connaissant déjà le handle de ma fenetre, comment je fais pour savoir si elle existe toujours ?
    Il existe pas une fonction (surement api) qui fait ca ?

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Salut Yoghisan,

    Reprends moi si je me trompe, mais la fonction renvoie le handle du process si la fonction openProcess s'est bien déroulée (donc ta fenêtre existe???), et NULL dans le cas contraire. Donc tu pourrais essayer de tester la valeur de retour de ta fonction...

    A plus,

    Christopher

  7. #7
    Membre régulier Avatar de yoghisan
    Profil pro
    Inscrit en
    Février 2004
    Messages
    172
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 172
    Points : 113
    Points
    113
    Par défaut
    Je cherhce le handle la fenetre ok
    je ferme la fenetre avec un sendmessage wm_close

    Soucis : la fenetre ne se ferme pas toujours.

    Je veux tester si le fenetre existe toujours en utilisant son handle !

    C'est plus clair ?

  8. #8
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    Dans l'aide MSDN, ils disent qu'il vaut mieux utiliser la fonction CloseHandle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CloseHandle(HandleProcess);
    As-tu essayé????

    A plus,

    Christopher

  9. #9
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Tu peux utiliser "IsWindow" pour savoir si la fenetre existe toujours.
    Toutefois, il faut quand même penser à faire un petit "sleep" pour lui laisser le temps de se fermer.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 258
    Points : 558
    Points
    558
    Par défaut
    tu as aussi la fonction IsWindowVisible, avec celà normalement tu as tout ce qu'il te faut pour tester l'existence de ta fenêtre et la fermer..


    A plus,

    Christopher

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 82
    Points : 85
    Points
    85
    Par défaut
    FindWindow sinon...

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/07/2003, 11h52
  2. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29
  5. pb de handle en C
    Par deedje dans le forum C
    Réponses: 3
    Dernier message: 21/06/2002, 16h19

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