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

Windows Discussion :

Recupérer un HWND a partir d'un HINSTANCE


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 11
    Points
    11
    Par défaut Recupérer un HWND a partir d'un HINSTANCE
    Bonjour,

    J'ai fait une appli qui permet de lancer des progs par un ShellExecute
    Avez vous une idée pour récuperer le HWND de la main window des
    progs lancés, sachant qu'on a le HINSTANCE que retourne ShellExecute ?

    Le but est de faire des ShowWindow par la suite (HIDE, RESTORE, etc)

    merci
    - yotasse -

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    bonjour les gens...

    je vois que ma question a passionné les foules... bon, ca fait rien, j'ai trouvé une solution et je vous la livre.

    En fait le hinstance renvoyé n'est pas utilisable dixit la doc de shellexecute sur la microsoft library.

    Donc j'ai fait un petit hack. le but est d'enumerer toutes les fenetres et de verifer a quel executable elles correspondent. Dès qu'on trouve une top window visible et qui correspond au chemin utilisé pour le shellexecute, c'est ok.

    la façon de retourner la valeur du HWND est quelque peu discutable, mais je n'aime pas les var globales.

    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
    bool __stdcall EnumWindowsCallBack(HWND hWnd, LPARAM lParam) {
      if(!hWnd) return false;
      if(GetWindowLong(hWnd, GWL_HWNDPARENT)) return true ;
      if(!IsWindowVisible(hWnd)) return true ;
      DWORD pid ;
      if(!GetWindowThreadProcessId(hWnd,&pid)) return true ;
    
      PROCESSENTRY32 processEntry32 ;
      processEntry32.dwSize = sizeof(PROCESSENTRY32);
      HANDLE toolhelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      char szExeFile[MAX_PATH];
      bool finished = Process32First(toolhelp32Snapshot, &processEntry32) ;
      while(finished) {
        if(processEntry32.th32ProcessID==pid) {
          strcpy(szExeFile,processEntry32.szExeFile);
          break ;
        }
        finished = Process32Next(toolhelp32Snapshot, &processEntry32);
      }
      CloseHandle(toolhelp32Snapshot);
    
      AnsiString lastring((char*)(((void**)lParam)[0])) ;
      if(lastring.AnsiCompareIC(AnsiString(szExeFile))) return true;
      ((void**)lParam)[1] = hWnd ;
      return false ;
    }
    
    void lanceAppli(AnsiString chemin) {
       ShellExecute(0, NULL, chemin.c_str(), NULL, NULL, SW_SHOWNORMAL);
    }
    
    void chercheWin(AnsiString chemin) {
      void* pReturn[2] ;
      pReturn[0] = (void*) chemin.c_str() ;
      pReturn[1] = NULL ;
      EnumWindows((WNDENUMPROC)EnumWindowsCallBack, (LPARAM)pReturn);
       if(IsWindow(pReturn[1])) {
        // YES !!! (HWND)pReturn[1] est la bonne window !!
      }
    }
    - yotasse -

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 944
    Points : 59 431
    Points
    59 431
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par yotasse
    je vois que ma question a passionné les foules...
    Ben c'est pas tellement ça : personnellement, j'ai cherché pendant un certain temps et j'ai pas trouvé... C'était une bonne question !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

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

Discussions similaires

  1. [AC-2003] Recupérer un taux a partir d'un indice d'une autre table
    Par Shikam dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/05/2010, 16h22
  2. [MySQL] recupérer des données a partir de mysql
    Par hichamdeb dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 12/05/2009, 13h52
  3. recupération de parametres a partir d'une page JSP
    Par walido dans le forum Struts 1
    Réponses: 8
    Dernier message: 08/03/2008, 11h09
  4. recupration des donnees a partir de fichier EXCEL
    Par inessahal dans le forum Documents
    Réponses: 1
    Dernier message: 29/05/2007, 13h03
  5. Réponses: 2
    Dernier message: 09/06/2006, 15h10

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