Page 1 sur 1
[R] Comment récupérer ProcessGetStats en Mo ?
Posté : jeu. 10 oct. 2013 17:11
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.
Re: [..] Comment récupérer ProcessGetStats en Mo ?
Posté : jeu. 10 oct. 2013 17:26
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
Re: [..] Comment récupérer ProcessGetStats en Mo ?
Posté : jeu. 10 oct. 2013 21:30
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.
Re: [..] Comment récupérer ProcessGetStats en Mo ?
Posté : ven. 11 oct. 2013 10:44
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/
Re: [..] Comment récupérer ProcessGetStats en Mo ?
Posté : ven. 11 oct. 2013 13:36
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