OVH Cloud OVH Cloud

La fonction enumProcesses de PSAPI.dll ne me renvoie rien

3 réponses
Avatar
Fabien
Bonjour,

J'ai un problème avec la fonction enumProcesses de PSAPI.dll. Le tableau
renvoyé par la fonction est vide.
Je suis sous win2000pro.
C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
certainement oublié qqchose.

Voici mon bout de code :

Public Declare Function EnumProcesses Lib "PSAPI.DLL" ( _
ByVal lpidProcess As Long, _
ByVal cb As Long, _
ByVal cbNeeded As Long _
) As Long

Dim aProcesses(1023) As Long
Dim cbNeeded As Long
Dim cProcesses As Long
Dim i As Long

If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded&) <> 0) Then
cProcesses = cbNeeded / 4
For i = 0 To cProcesses - 1
PrintProcessNameAndID(aProcesses(i))
Next i
Else
MsgBox("Failed to get process list.", vbCritical)
End If


Mon tableau aProcess est toujours vide, cProcesses=0, et je ne passse donc
jamais dans la boucle for.

Je vous remercie d'avance pour votre aide.

Fabien

3 réponses

Avatar
Illinger Philippe
"Fabien" wrote in message news:
Bonjour,



Bonojourno,

J'ai un problème avec la fonction enumProcesses de PSAPI.dll. Le tableau
renvoyé par la fonction est vide.
Je suis sous win2000pro.
C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
certainement oublié qqchose.




Reflexe a prendre, TOUJOURS initialiser les parametres passer aux APIs
Strings a ZERO, etc...

La plupart du temps les API qui attendent des buffers et des tailles en entrees, fournissent avec le pointeur de buffer a NULL, la taille necessaire dans la taille.
L'interpretation du code d'erreur est toujours vital...meme si pas evidente...

Bon courage



Voici mon bout de code :

Public Declare Function EnumProcesses Lib "PSAPI.DLL" ( _
ByVal lpidProcess As Long, _
ByVal cb As Long, _
ByVal cbNeeded As Long _
) As Long

Dim aProcesses(1023) As Long
Dim cbNeeded As Long
Dim cProcesses As Long
Dim i As Long

If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded&) <> 0) Then
cProcesses = cbNeeded / 4
For i = 0 To cProcesses - 1
PrintProcessNameAndID(aProcesses(i))
Next i
Else
MsgBox("Failed to get process list.", vbCritical)
End If


Mon tableau aProcess est toujours vide, cProcesses=0, et je ne passse donc
jamais dans la boucle for.

Je vous remercie d'avance pour votre aide.

Fabien




---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.839 / Virus Database: 571 - Release Date: 19/01/2005
Avatar
Zoury
Salut Fabien!

tu travailles bien en .NET ?

si oui, pourquoi ne pas simplement employer Process.GetProcesses() ?
sinon, regarde ce lien, tu ne l'utilises pas comme il faut il me semble ...
(voir l'exemple Enumerate Processes)
http://www.mentalis.org/apilist/EnumProcesses.shtml


C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
certainement oublié qqchose.



eh bien disons que tu n'as vraiment pas choisis la plus simple pour débuter
;O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Fabien" a écrit dans le message de
news:
Bonjour,

J'ai un problème avec la fonction enumProcesses de PSAPI.dll. Le tableau
renvoyé par la fonction est vide.
Je suis sous win2000pro.
C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
certainement oublié qqchose.

Voici mon bout de code :

Public Declare Function EnumProcesses Lib "PSAPI.DLL" ( _
ByVal lpidProcess As Long, _
ByVal cb As Long, _
ByVal cbNeeded As Long _
) As Long

Dim aProcesses(1023) As Long
Dim cbNeeded As Long
Dim cProcesses As Long
Dim i As Long

If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded&) <> 0) Then
cProcesses = cbNeeded / 4
For i = 0 To cProcesses - 1
PrintProcessNameAndID(aProcesses(i))
Next i
Else
MsgBox("Failed to get process list.", vbCritical)
End If


Mon tableau aProcess est toujours vide, cProcesses=0, et je ne passse donc
jamais dans la boucle for.

Je vous remercie d'avance pour votre aide.

Fabien


Avatar
Fabien
Ahhh le bonheur, ca marche tout seul, sans se prendre la tete !!

Merci beaucoup Zoury


"Zoury" a écrit :

Salut Fabien!

tu travailles bien en .NET ?

si oui, pourquoi ne pas simplement employer Process.GetProcesses() ?
sinon, regarde ce lien, tu ne l'utilises pas comme il faut il me semble ...
(voir l'exemple Enumerate Processes)
http://www.mentalis.org/apilist/EnumProcesses.shtml


> C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
> certainement oublié qqchose.

eh bien disons que tu n'as vraiment pas choisis la plus simple pour débuter
;O)

--
Cordialement
Yanick
MVP pour Visual Basic
"Fabien" a écrit dans le message de
news:
> Bonjour,
>
> J'ai un problème avec la fonction enumProcesses de PSAPI.dll. Le tableau
> renvoyé par la fonction est vide.
> Je suis sous win2000pro.
> C'est la 1ère fois que j'utilise des fonctions d'API directement, j'ai
> certainement oublié qqchose.
>
> Voici mon bout de code :
>
> Public Declare Function EnumProcesses Lib "PSAPI.DLL" ( _
> ByVal lpidProcess As Long, _
> ByVal cb As Long, _
> ByVal cbNeeded As Long _
> ) As Long
>
> Dim aProcesses(1023) As Long
> Dim cbNeeded As Long
> Dim cProcesses As Long
> Dim i As Long
>
> If (EnumProcesses(aProcesses(0), 1024 * 4, cbNeeded&) <> 0) Then
> cProcesses = cbNeeded / 4
> For i = 0 To cProcesses - 1
> PrintProcessNameAndID(aProcesses(i))
> Next i
> Else
> MsgBox("Failed to get process list.", vbCritical)
> End If
>
>
> Mon tableau aProcess est toujours vide, cProcesses=0, et je ne passse donc
> jamais dans la boucle for.
>
> Je vous remercie d'avance pour votre aide.
>
> Fabien