Processus

Signaler
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
-
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
-
Bonjour a tous,



Desoler si je pose une question deja poser et deja repondu, mais ce que
je cherche n'est pas facile a "trouver" avec l'outil de recherche du
forum.



J'aurais besoin de lister tout les processus qui tourne sur la machine,
mais en obtenir des information plus detailler que ce que donne la
classe System.Diagnostic.Process



J'ai besoin de savoir pour chaque processus, si c'est un process de
tache de fond, s'il tourne en SysTray ou en barre des taches....
Windows le fait donc c'est faisable, le probleme c'est que je n'ai pas
trouver grand chose d'utile sur le net, j'ai tenter d'utiliser l'API
Win32 mais en vain, je pense de toute facon que l'API Win32 est le seul
moyen de parvenir a obtenir ce resultat.



Si quelqu'un a une idee, merci d'avance :)

14 réponses

Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
Salut,
avec Coq nous avions travaillé ensemble sur une routine qui permettait de tester les conditions pour qu'une fenetre sois affichée dans la taskbar ( ou apparaisse dans le alt-tab, c'est les mêmes critères )
c'est donc au niveau des styles de la fenetre que les critères s'inscrivent, je m'explique :
en gros en passant des heures sur spy++, on est arrivé à certaines conditions, que je retranscri ici ( dsl c du vb.net :( )

http://www.vbfrance.com/code.aspx?ID=30543

cette classe permet aussi de recup de les icones des fenetres en question ( de n'importe quelle fenetre d'ailleurs )

voilà j'espère que ca peut t'aider.
pour le systray je n'avais pas eu le temps de me pencher sur le sujet mais ca m'interesse !
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
merci beaucoup, je vais jeter un coup d'oeil (t'inquiete pas pour le VB, je gere :p) et peut-etre que ca me donnera une piste pour avancer d'avantage et trouver quelque chose pour le systray.


Merci d'avance :)
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
Excuse moi s'il te plais, j'ai longtemps coder en VB4, 5 et 6 mais je ne connais pas les nouvelles syntaxes de VB.NET

Peut-tu s'il te plait m'expliquer ceci :

Return ((wStyles And enWindowStyles.WS_EX_APPWINDOW) = enWindowStyles.WS_EX_APPWINDOW) OrElse _
((wStyles And enWindowStyles.WS_POPUP) = enWindowStyles.WS_POPUP)

je n'ai pas compris le OrElse
Merci d'avance

PS : Sinon j'ai fini de la "porter" en C# mais ca fonctionne tres mal, je pense que tout est du a cette ligne
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
En C# tu remplaces le OrElse par || (et le AndAlso par &&) :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
orelse permet de ne pas evaluer la deuxieme partie de l'expression si la première est déjà vraie et c le même principe pour andalso :

y a les analogies avec c# ici :

http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
par contre si ca marche toujours pas ce soir dis le moi et je retravaillerais dessus.
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
Ouais c'est bien ce que je pensais, mais ton algo semble renvoyer toujours false :S a moins que je ne m'y prenne mal



Process[] ps = Process.GetProcesses();

foreach (Process p in ps)

{

if (p.Id == 0)

continue;

clsHwndInfo cls = new clsHwndInfo(p.Handle);

if (cls.ShownInTaskBar)

listBox1.Items.Add("[" + p.ProcessName + "] -> " + cls.WindowText);

else

listBox1.Items.Add("[" + p.ProcessName + "]");

}



Le code va toujours dans le else
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
ce sont pas les process qu'il faut tester mais les fenetres. Les fenetres mères car les childs ne sont jamais dans la taskbar.
j'ai publié une autre source sur vbfrance qui affiche les fenetres liées à un process tu n'as qu'à cliquer sur mon profil. ( c'est aussi du vb.net )
si c'est pas clair ou si tu t'en sors pas rappelle nous.
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
ok, j'ai donc iterer sur les fentres, mais la proprieter ShowInTaskBar continue a renvoyer tout le temps false.



Par contre j'ai essayer uniquement avec la prop Visible, et j'obtient
toutes les fentres qui sont lister dans la barre des taches + certaines
du systray, mais pour le moment je ne distingue toujours pas les
fenetres de la taskbar et du systray
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
normallement la classe fonction mais j'ai pas retesté
on verra ca demain aprem si tu veux bien.
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008

J'ai beau lister les process comme sebseb42 mais en AUCUN cas j'arrive a recuperer TOUTES les fenetres ouvertes par l'explorateur (ou le poste de travail).
Je n'arrive pas non plus a recuperer les fenetres minimizées dans le TrayIcon !!!

La classe de Patrice / Coq est super pratique en tout cas ! (conversion en C# tres simple malgré quelques problemes au niveau des types Int et Uint)

Alors si quelqu'un avait une idée pour recuperer toutes les application lancées et leur fenetre ca serait cool (comme l'onglet application (pas processus mais application) du gestionnaire des taches) !

Merci par avance.

Bouyaka !
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
ben voir mes sources sous vbfrance, ca recup dans une arborescences avec enunwindows et ca fait le tour des process (en vb.net)
pour larborescence je ne détruits pas les doublons (à fiare)
Messages postés
564
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
7 novembre 2008

Bon j'ai utilisé l'API EnumWindows et la c'est bon !
Il ne me reste plus qu'a completer ta Class clsHwndInfos pour savoir si ce sont des toolwindows , des popup et etc et ca roulera.

Etant en train de realiser un soft pour CyberCafé, je recrée une taskbar qui s'occupera de gérer les processus, de bloquer des logiciels et sites internets ainsi que les popup.
J'essai aussi de regroupper les fenetres d'un meme processus au sein d'un meme bouton (comme la fonctionnalité de XP que je trouve exelente).

Il est vrai que c'est assez complexe de bosser avec les processus.

Par contre avec ta class, des fois ca me recup la small icone et d'autre fois non ..... faut que je regarde aussi ca car pourtant le Handle de l'icon est correct !

Merci en tout cas pour cette classe vraiment pratique !

Bouyaka !
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
oui c fait expres, parce les 2 méthodes ne marchent pas toujours, mais quand une marche pas, l'autre marche, ceci explique cela.