Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1327 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  Fermeture d'application par mon programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fermeture d'application par mon programme

n°1895176
gofio79
A l'aide...
Posté le 15-06-2009 à 14:34:55  profilanswer
 

Bonjour,
Je cherche à fermer les applications que l'on peut voir dans la barre de tâche en bas à partir de mon programme Windows (je ne programme pas en C++ mais en C). Je ne sais pas trop comment faire pour trouver les applications ouvertes et ainsi les fermer. J'ai essayé avec EnumWindow() mais je n'arrive pas trop à le faire fonctionner correctement.
J'espère pouvoir trouver de l'aide ici. :)

mood
Publicité
Posté le 15-06-2009 à 14:34:55  profilanswer
 

n°1895225
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 15:37:30  profilanswer
 

Il faut effectivement utiliser EnumWindows, dont la callback appellera la fonction IsIconic() pour détecter si la fenêtre est iconifiée ou pas, et la fermera le cas échéant.
 
Un exemple à l'arrache

Code :
  1. // ton code
  2. EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
  3.  
  4. // callback qui va passer toutes les fenêtres ouvertes en revue, et qui va fermer celles qui sont iconifiées
  5. BOOL EnumWindowsProc(HWND hWnd, long lParam)
  6. {
  7.      if (IsIconic(hWnd))
  8.      {
  9.         SendMessage(hWnd, WM_QUIT, 0, 0);
  10.      }
  11.      return TRUE;
  12. }


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895246
gofio79
A l'aide...
Posté le 15-06-2009 à 15:50:04  profilanswer
 

Ok mais je veu le faire que pour les applications qui sont dans la barre de tache (il me semble bien que ca s'appelle comme ça). Des application du genre Mozilla, Dev C++, Visual C++ etc...
J'ai réussi a avoir le nom qu'il y a marqué en bas parmi beaucoup d'autre applications qui sont lancées et qui ne sont pas en bas surement des processus mais je veux faire le tri dedans.


---------------
Enfin un PC digne de ce nom!
n°1895252
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 15:52:37  profilanswer
 

gofio79 a écrit :

Ok mais je veu le faire que pour les applications qui sont dans la barre de tache (il me semble bien que ca s'appelle comme ça). Des application du genre Mozilla, Dev C++, Visual C++ etc...
J'ai réussi a avoir le nom qu'il y a marqué en bas parmi beaucoup d'autre applications qui sont lancées et qui ne sont pas en bas surement des processus mais je veux faire le tri dedans.


Tu peux clarifier ce point stp ? Pour moi, une 'application qui est dans la barre des taches", c'est une application iconifiée dans la barre des taches (donc non visible ailleurs que dans cette fameuse barre).


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895274
gofio79
A l'aide...
Posté le 15-06-2009 à 16:08:17  profilanswer
 

C'est bien la barre de tache que ça s'appelle à coté de démarrer? Et une fenêtre iconifier c'est une fenêtre qui est à coté de l'heure.
J'ai remplacer IsIconic() par IsWindowVisible() et je retrouve les bon programme mai maintenant faut que je les ferme car ca ne marche pas avec SendMessage().


---------------
Enfin un PC digne de ce nom!
n°1895322
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 16:37:48  profilanswer
 

gofio79 a écrit :

C'est bien la barre de tache que ça s'appelle à coté de démarrer? Et une fenêtre iconifier c'est une fenêtre qui est à coté de l'heure.
J'ai remplacer IsIconic() par IsWindowVisible() et je retrouve les bon programme mai maintenant faut que je les ferme car ca ne marche pas avec SendMessage().


Au temps pour moi, c'est pas WM_QUIT qu'il faut envoyer, mais WM_CLOSE

Code :
  1. BOOL EnumWindowsProc(HWND hWnd, long lParam)
  2. {
  3.      if (!IsWindowVisible(hWnd))
  4.      {
  5.         SendMessage(hWnd, WM_CLOSE, 0, 0);
  6.      }
  7.      return TRUE;
  8. }


Message édité par Harkonnen le 15-06-2009 à 16:39:28

---------------
J'ai un string dans l'array (Paris Hilton)
n°1895334
gofio79
A l'aide...
Posté le 15-06-2009 à 16:53:55  profilanswer
 

Oui j'ai trouvé!
Merci beaucoup pour ton aide!
J'ai fait un mélange d'un autre truc que j'avais trouvé pour ne pas fermer tous les truc. Car j'en ai des importants.

Code :
  1. BOOL CALLBACK fonctionEnumerationFenetre(HWND hwnd, LPARAM lParam)
  2. {
  3. if(hwnd!=Dlg)
  4. {
  5.  if (IsWindowVisible(hwnd))
  6.   {
  7.   int taille = GetWindowTextLength(hwnd);
  8.   if (taille)
  9.   {
  10.    char *texte = new char[taille+1];
  11.    char comp[] = "Acquisition Data MDM";
  12.    int siz = GetWindowText(hwnd,texte,taille+1);
  13.    if (strstr(texte,comp)==NULL)
  14.    { if(strstr(texte,"Program Manager" )==NULL)
  15.     { if(strstr(texte,"RocketDock" )==NULL)
  16.       SendMessage(hwnd, WM_CLOSE, 0, 0);
  17.     }
  18.    }
  19.   }
  20.  }
  21. }
  22.      return TRUE;
  23. }


Merci d'avoir répondu aussi rapidement.


---------------
Enfin un PC digne de ce nom!
n°1895351
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-06-2009 à 17:16:00  profilanswer
 

Euh... j'espère que tu ne comptes pas mettre ce code en production, à moins que tu aies envie de vider toute la mémoire de ton utilisateur [:heink]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1895600
gofio79
A l'aide...
Posté le 16-06-2009 à 11:17:01  profilanswer
 

Pourquoi qu'est ce qu'il à ce code?


---------------
Enfin un PC digne de ce nom!
n°1895617
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-06-2009 à 11:53:02  profilanswer
 

- Les lignes 13, 14 et 15 pourraient être réduites à une seule ligne via l'opérateur &&
- La mémoire que tu alloues à la ligne 10 n'est jamais libérée.
- Toujours à cette ligne 10, pourquoi faire une allocation dynamique au lieu de déclarer tout simplement un tableau statique ?
- L'opérateur "new" est un opérateur du C++, toi tu fais apparemment du C, donc il faut utiliser malloc(). Mais je le répète, un tableau déclaré sur la pile est amplement suffisant
- La ligne 11 est inutile, pourquoi ne pas la supprimer et mettre la chaine "Acquisition Data MDM" directement à la place de ta variable "comp" à la ligne 13 ?


---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 16-06-2009 à 11:53:02  profilanswer
 

n°1895677
gofio79
A l'aide...
Posté le 16-06-2009 à 13:06:22  profilanswer
 

Oui c'est vrai je n'avais pas encore optimisé mon code c'est pour ca.
Je te remercie de toutes les info que tu m'as donné.


---------------
Enfin un PC digne de ce nom!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  Fermeture d'application par mon programme

 

Sujets relatifs
Projet d'application: quel langage utiliser ?VBA Access! Pbm déclaration application Excel
[Résolu] Utilisation d'une application winform en réseauExecution d'un programme Java sur un autre support
demmande d'un programmeMémoire partagée pour programme Windows
Developpement d'une application de gestion de logsPortail application Java
Besoin d'aide pour comprendre un programme et pour faire un programme 
Plus de sujets relatifs à : Fermeture d'application par mon programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR