[R] Comment récupérer ProcessGetStats en Mo ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

[R] Comment récupérer ProcessGetStats en Mo ?

#1

Message par mica2727 »

Bonjour,

Je pense avoir tout dit dans le titre mais au cas ou :

Code : Tout sélectionner

$rowStatsMem = ProcessGetStats(WinList("XXX (Client"),0)
$rowVive = Int($rowStatsMem[0])
$rowStock = Int($rowStatsMem[1])
GUICtrlSetData($vive_utilise,$rowVive&" Mo")
GUICtrlSetData($vive_stock,$rowStock&" Mo")
J'ai caché l'application je ne sais pas si on peut faire de pub pour un jeu... Donc dans le doute je ne le mets pas.

Et ça m'affiche : 14827520
Et quand je vais dans la barre des tâches ça m'affiche : 650K

Donc je voulais savoir comment retrouver ce fameux " 650K " en Mo " Donc : 650Mo "

Merci d'avance.
Modifié en dernier par mica2727 le lun. 03 nov. 2014 18:00, modifié 3 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Comment récupérer ProcessGetStats en Mo ?

#2

Message par timmalos »

Sous Windows 7, cette fonction a quelques problemes car elle retourne le WorkingSet alors que dans le task manager on vous donne le PrivateWorkingSet.

Pour avoir la meme valeur que votre task manager, utilisez ceci:

Code : Tout sélectionner

$proc = "explorer.exe"
MsgBox (0,"", "Prozess " & $proc & " occupies " & _getprivbytes (ProcessExists ($proc)) / 1024 & " kb RAM")

Func _getprivbytes ($pid)
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Process", "WQL", _
                                              $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    If IsObj($colItems) then
       For $objItem In $colItems
          If $pid = $objItem.IDProcess Then Return $objItem.WorkingSetPrivate
       Next
    Endif
    Return 0
EndFunc
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Comment récupérer ProcessGetStats en Mo ?

#3

Message par mica2727 »

Bonjour,

Merci pour votre aide, mais j'aime bien comprendre au lieu d'avoir directement la solution toute donné pouvez-vous m'expliqué en quoi consiste votre fonction car il y a plein de fonction que je ne connais pas et au cas ou, ou est-ce que je peux en apprendre plus ?

Et encore une nouvelle question cela est pour la mémoire utilisé " maintenant " mais pour trouver celle que Windows garde pour elle ? celle appeller " PeakWorkingSetSize " de " ProcessGetStats() je dois faire comment? je suppose qu'elle aussi n'est pas bonne.

Merci d'avance.
Et désolé pour les fautes.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Comment récupérer ProcessGetStats en Mo ?

#4

Message par timmalos »

La solution que je vous ai donné utilise les WMI Windows. Ce n'est vraiment pas la manière la plus rapide de proceder, mais je n'ai pas trouver la même fonction avec des call dll.
Faites une recherche sur l'outil scriptomatic sur Google. Ce dernier vous donnera tous les WMIs disponibles sur votre machine, et en parcourant l'arbre, vous trouverez surement la valeur "PeakWorkingSetSize" qui vous interesse.

EDIT: Et comme je susi de bonne humeur, le lien direct http://www.autoitscript.com/forum/topic ... or-autoit/
mica2727
Niveau 4
Niveau 4
Messages : 82
Enregistré le : jeu. 03 oct. 2013 17:32
Status : Hors ligne

Re: [..] Comment récupérer ProcessGetStats en Mo ?

#5

Message par mica2727 »

Merci :)
Moi qui pensais que autoIt était " limité " je viens de me rendre compte que si il est compatible avec les bases et fonction de Windows ça en fait un paquet, et aussi un logiciel dangereux pour d'autre.

Mais c'est super cool de pas être limité et de trouver tout ce que l'ont souhaite.
J'ai trouvé le logiciel que vous me dites, il offre directement le code et donc j'ai regardé par rapport à celui que j'ai pour voir si y'avais d'autre objet et y'en a encore un paquet que je ne pensais même pas, je ne sais même pas à quoi sa corresponds et je ne sais même si il y a une doc'

En tout cas merci beaucoup !
C'est cette ligne qui m'intéresse :

Code : Tout sélectionner

$Output = $Output & "WorkingSet: " & $objItem.WorkingSet & @CRLF
$Output = $Output & "WorkingSetPeak: " & $objItem.WorkingSetPeak & @CRLF
$Output = $Output & "WorkingSetPrivate: " & $objItem.WorkingSetPrivate & @CRLF
Donc je vous remerci encore une fois

Euh non je dis n'importe quoi, j'ai trouver le bon pour le processeur est-ce que c'est bon de faire comme ça :

Code : Tout sélectionner

Func _loadProcesseur()
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    If IsObj($colItems) then
        For $objItem In $colItems
            Return $objItem.LoadPercentage
       Next
    Endif

EndFunc
Répondre