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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Liste de process word et excel via api

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Liste de process word et excel via api

n°497095
mouff
Posté le 25-08-2003 à 16:45:56  profilanswer
 

salut  :)  
 
Avec le code suivant (utilisation d'API):

Citation :


        hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0& )
         
        If hSnapshot = 0 Then Exit Sub
             
        'parcours des process
        uProcess.dwSize = Len(uProcess)
        r = ProcessFirst(hSnapshot, uProcess)
        Do While r
            'Word
            If InStr(1, UCase(uProcess.szexeFile), "WINWORD.EXE" ) And WinWord Then
                NbWord = NbWord + 1
                ProcessManagerWindow.FGrid_Word.AddItem uProcess.th32ProcessID & Chr(9) & "nom fenetre" & Chr(9) & "00" & Chr(9) & " ", 1
            End If
            'Excel
            If InStr(1, UCase(uProcess.szexeFile), "EXCEL.EXE" ) And Excel Then
                NbExcel = NbExcel + 1
                ProcessManagerWindow.FGrid_Excel.AddItem uProcess.th32ProcessID & Chr(9) & "nom fenetre" & uProcess.th32ProcessID & Chr(9) & "00" & Chr(9) & " ", 1
            End If
                 
            r = ProcessNext(hSnapshot, uProcess)
        Loop


 
je peux lister les process word et excel. je voudrais en plus, savoir l'intitulé des fenetres des process pas mort (genre 'Microsoft excel - fichier1.xls' ) et le % en cpu...Vous pouvez m'aider ???  :heink:


---------------
Il suffit de me dire de me taire...
mood
Publicité
Posté le 25-08-2003 à 16:45:56  profilanswer
 

n°498532
cvb
Posté le 26-08-2003 à 14:34:05  profilanswer
 

mouff a écrit :

salut  :)  
 
Avec le code suivant (utilisation d'API):

Citation :


        hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0& )
         
        If hSnapshot = 0 Then Exit Sub
             
        'parcours des process
        uProcess.dwSize = Len(uProcess)
        r = ProcessFirst(hSnapshot, uProcess)
        Do While r
            'Word
            If InStr(1, UCase(uProcess.szexeFile), "WINWORD.EXE" ) And WinWord Then
                NbWord = NbWord + 1
                ProcessManagerWindow.FGrid_Word.AddItem uProcess.th32ProcessID & Chr(9) & "nom fenetre" & Chr(9) & "00" & Chr(9) & " ", 1
            End If
            'Excel
            If InStr(1, UCase(uProcess.szexeFile), "EXCEL.EXE" ) And Excel Then
                NbExcel = NbExcel + 1
                ProcessManagerWindow.FGrid_Excel.AddItem uProcess.th32ProcessID & Chr(9) & "nom fenetre" & uProcess.th32ProcessID & Chr(9) & "00" & Chr(9) & " ", 1
            End If
                 
            r = ProcessNext(hSnapshot, uProcess)
        Loop


 
je peux lister les process word et excel. je voudrais en plus, savoir l'intitulé des fenetres des process pas mort (genre 'Microsoft excel - fichier1.xls' ) et le % en cpu...Vous pouvez m'aider ???  :heink:  

le % du CPU, ce n'est pas du tout la même API, c'est une fonction qui appartient à la *.dll, kernel32.dll. J'ai oublié son nom depuis, mais tu la trouveras dans API windows (cf ma signature). Aprés si tu veux savoir le pourcentage que prend chaque fichier excel ouvert, je ne sais pas, c'est peut-être une variante de l'API dont je te parle (tu as même l'exemple).

n°498540
mouff
Posté le 26-08-2003 à 14:40:17  profilanswer
 

bon ben je vais regarder une à une  [:joker]


---------------
Il suffit de me dire de me taire...
n°498542
cvb
Posté le 26-08-2003 à 14:41:42  profilanswer
 

mouff a écrit :

bon ben je vais regarder une à une  [:joker]  

c'est cell-ci. Une fois comprise, par des calculs que tu n'as pas dans l'exemple te permettront de trouver le pourcentage de mémoire disponible...
 

Code :
  1. Declare Sub GlobalMemoryStatus Lib "kernel32" ( _
  2.                  lpBuffer As MEMORYSTATUS)
  3. Versions :
  4. . Windows 95/98 : Oui
  5. . Windows NT : A partir de 3.1
  6. . Windows 2000/XP : Oui
  7. Description :
  8. (Origine : int19h - Int19h@caramail.com)
  9. Cette API permet de savoir la quantité de mémoire physique et virtuelle disponible sur l'ordinateur ainsi que l'espace libre.
  10. Utilise une structure MEMORYSTATUS pour stocker le résultat.
  11. dwLength est la taille de la structure.
  12. dwMemoryLoad est le pourcentage de mémoire actuellement utilisé.
  13. dwTotalPhys est la taille totale de la mémoire physique (en octets).
  14. dwAvailPhys est la taille de la mémoire physique disponible (en octets).
  15. dwTotalPageFile donne la taille totale que peut atteindre le fichier d'échange (en octets).
  16. dwAvailPageFile indique l'espace disponible dans le fichier d'échange (en octets).
  17. dwTotalVirtual retourne la mémoire totale pouvant être utilisée par l'application courante (en octets).
  18. dwAvailVirtual représente l'espace libre totale (en octets).
  19. Type MEMORYSTATUS
  20.     dwLength As Long
  21.     dwMemoryLoad As Long
  22.     dwTotalPhys As Long
  23.     dwAvailPhys As Long
  24.     dwTotalPageFile As Long
  25.     dwAvailPageFile As Long
  26.     dwTotalVirtual As Long
  27.     dwAvailVirtual As Long
  28. End Type
  29. Exemple d'utilisation :
  30. ' Exemple par int19h (Int19h@caramail.com)
  31. ' Placer le code sur une form vide
  32. Private Sub Form_Load()
  33. Dim Memoire As MEMORYSTATUS
  34. Me.AutoRedraw = True
  35. ' Récupère les informations
  36. GlobalMemoryStatus Memoire
  37. ' Affiche les informations sur la feuille
  38. Print "Mémoire Physique Totale = ";
  39. Print Format(Memoire.dwTotalPhys, "###,###,### octets " )
  40. Print "Mémoire Physique Libre = ";
  41. Print Format(Memoire.dwAvailPhys, "###,###,### octets" );
  42. Print " (" & Int((Memoire.dwAvailPhys / Memoire.dwTotalPhys) * 100) & "% libres)."
  43. End Sub


Message édité par cvb le 26-08-2003 à 14:42:45
n°498551
mouff
Posté le 26-08-2003 à 14:49:35  profilanswer
 

ne sachant combien de mem prend mes process, je vois pas comment à partir de cette fonction api, je peux en déduire le %cpu pour chaque process  :heink:


---------------
Il suffit de me dire de me taire...
n°498556
cvb
Posté le 26-08-2003 à 14:55:05  profilanswer
 

pour chaque process, je ne sais pas, par contre, tu as le pourcentage total utilisé "dwMemoryLoad est le pourcentage de mémoire actuellement utilisé." et ça, "dwTotalVirtual retourne la mémoire totale pouvant être utilisée par l'application courante (en octets)". Pour le reste, je sais plus. Essaye d'aller sur www.vbfrance.com pour voir si tu trouves la solution à ton problème... [:spamafote]

n°499467
mouff
Posté le 27-08-2003 à 11:43:46  profilanswer
 

pour la partie 'libel' de la fenetre, voici ce que j'ai reussi a faire finalement.
 
mon code précédent me donner l'instance du process mais pas de la fenetre (ce qui peut se reveler different). Et j'avais besoin de passer par la liste des process et non des handles fenetres pour x raisons (dont la possibilité de voir les instances excel/word ouvertes en ole...) donc, en donnant le pid du process, la fonction qui suit va me chercher le texte de la fenetre si existe   ;)  
 

Citation :


Private Function GetProcessText(lProcessID As Long) As String
    'recherche du texte window du process concerné
    Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long, lenS As Long
    Dim Text As String
     
    GetProcessText = "N/A" 'Not Available"
     
    'se place sur la premiere fenetre
    test_hwnd = FindWindow(ByVal 0&, ByVal 0& )
    Do While test_hwnd <> 0
        'verification si la fenetre n'est pas une fenetre child
        If GetParent(test_hwnd) = 0 Then
            'on cherche l'id de la fenetre
            test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
            If test_pid = lProcessID Then
                'process concerné
                lenS = GetWindowTextLength(test_hwnd)
                Text = Space$(lenS + 1)
                lenS = GetWindowText(test_hwnd, Text, lenS + 1)
                Text = Left$(Text, Len(Text) - 1)
                'texte valid pour une fenetre visible
                If lenS <> 0 And Text <> "" And IsWindowVisible(test_hwnd) Then
                    GetProcessText = Text
                    Exit Do
                End If
            End If
        End If
        'retrieve the next window
        test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function


 
Par contre, je trouve toujours pas pour le %CPU   :sweat:  


---------------
Il suffit de me dire de me taire...
n°499513
cvb
Posté le 27-08-2003 à 12:18:40  profilanswer
 

mouff a écrit :

pour la partie 'libel' de la fenetre, voici ce que j'ai reussi a faire finalement.
 
mon code précédent me donner l'instance du process mais pas de la fenetre (ce qui peut se reveler different). Et j'avais besoin de passer par la liste des process et non des handles fenetres pour x raisons (dont la possibilité de voir les instances excel/word ouvertes en ole...) donc, en donnant le pid du process, la fonction qui suit va me chercher le texte de la fenetre si existe   ;)  
 

Citation :


Private Function GetProcessText(lProcessID As Long) As String
    'recherche du texte window du process concerné
    Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long, lenS As Long
    Dim Text As String
     
    GetProcessText = "N/A" 'Not Available"
     
    'se place sur la premiere fenetre
    test_hwnd = FindWindow(ByVal 0&, ByVal 0& )
    Do While test_hwnd <> 0
        'verification si la fenetre n'est pas une fenetre child
        If GetParent(test_hwnd) = 0 Then
            'on cherche l'id de la fenetre
            test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
            If test_pid = lProcessID Then
                'process concerné
                lenS = GetWindowTextLength(test_hwnd)
                Text = Space$(lenS + 1)
                lenS = GetWindowText(test_hwnd, Text, lenS + 1)
                Text = Left$(Text, Len(Text) - 1)
                'texte valid pour une fenetre visible
                If lenS <> 0 And Text <> "" And IsWindowVisible(test_hwnd) Then
                    GetProcessText = Text
                    Exit Do
                End If
            End If
        End If
        'retrieve the next window
        test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function


 
Par contre, je trouve toujours pas pour le %CPU   :sweat:  


si tu arrive à savoir combien de RAM te prend les process ouvert, tu peux ensuite faire une régle de 3 avec l'API que t'as été voir hier. Elle te permet de trouver la RAM libre et tu as une variable qui te donne ce que sa prend en charge pour le CPU...
 
*************
régle de 3
*************
 
 
% CPU machine (variable. dwMemoryLoad de l'API GlobalMemoryStatus) -----------> RAM prise (API windows GlobalMemoryStatus. Ce sont des calculs entre les secteur libre,ect...va voir l'exemple)
 
valeure aprés calcul du CPU -----------> RAM que te prenne les process (c'est à toi de trouver. comment, aucune idée !)
 
**************
 
je ne vois pas d'autre solution  [:spamafote]


Message édité par cvb le 27-08-2003 à 12:19:30
n°499540
mouff
Posté le 27-08-2003 à 13:05:01  profilanswer
 

attend attend, le %CPU n'est pas une valeur par rapport au temps de calcul du processeur de la machine ??? Ca n'a normalement aucun lien avec la RAM  :heink:


---------------
Il suffit de me dire de me taire...
n°499556
cvb
Posté le 27-08-2003 à 13:19:46  profilanswer
 

mouff a écrit :

attend attend, le %CPU n'est pas une valeur par rapport au temps de calcul du processeur de la machine ??? Ca n'a normalement aucun lien avec la RAM  :heink:  


 
 
le liens se trouve où ? Dés que tu fais monter la RAM tu vois la courbe du % CPU s'affoler, s'il y a d'autre facteur, je les connais pas... [:spamafote]

mood
Publicité
Posté le 27-08-2003 à 13:19:46  profilanswer
 

n°499558
mouff
Posté le 27-08-2003 à 13:24:04  profilanswer
 

evidemment quand un calcul se fait, le process nécessite la ram pour stock ces variables, mais clairement, les %CPU ne sont pas intrinséquement liés avec le %RAMutilisé pour déduire une équation entre ces deux valeurs.
 
où alors une putain d'équation mathématique à n-variables que je mettrais 15 ans à comprendre  [:joker]


---------------
Il suffit de me dire de me taire...
n°499559
cvb
Posté le 27-08-2003 à 13:26:00  profilanswer
 

mouff a écrit :

evidemment quand un calcul se fait, le process nécessite la ram pour stock ces variables, mais clairement, les %CPU ne sont pas intrinséquement liés avec le %RAMutilisé pour déduire une équation entre ces deux valeurs.
 
où alors une putain d'équation mathématique à n-variables que je mettrais 15 ans à comprendre  [:joker]  


sur www.vbfrance.com, tu n'as pas trouvé d'exemple sur le calcul des ressources machine ou l'équation dont tu parles ?

n°499562
mouff
Posté le 27-08-2003 à 13:32:26  profilanswer
 

nop, juste trouve comment avoir le CPU global ou comment avoir le graph.
 
juste trouvé ça http://www.vbfrance.com/forum.aspx?Article=76275 qui m'a aussi calmé un peu  :whistle:  
mais, je ne desespére pas  :D  
 


---------------
Il suffit de me dire de me taire...
n°499574
cvb
Posté le 27-08-2003 à 13:43:59  profilanswer
 

mouff a écrit :

nop, juste trouve comment avoir le CPU global ou comment avoir le graph.
 
juste trouvé ça http://www.vbfrance.com/forum.aspx?Article=76275 qui m'a aussi calmé un peu  :whistle:  
mais, je ne desespére pas  :D  
 
 


 
VB et le courage sa va ensemble !  [:ddr555]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Liste de process word et excel via api

 

Sujets relatifs
Lien hypertexte sur une feuille d'une classeur Exceluserform et bouton Excel
Filtre automatique vba ExcelRemplir une zone de liste avec 2 plages nommées ???
Objet pour document WordOuvrir Excel ou Word depuis page Web
[Python]Ordonner une liste d'objet (sorting)forcer liste deroulante à la valeur par défaut ?
[VBA] Kill d'un process 
Plus de sujets relatifs à : Liste de process word et excel via api


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