La fonction enumProcesses de PSAPI.dll ne me renvoie rien
3 réponses
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.
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
"Fabien" <Fabien@discussions.microsoft.com> wrote in message news:EFFD42A2-3D7B-4E96-B4EF-1725CBA63E7E@microsoft.com...
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
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
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
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" <Fabien@discussions.microsoft.com> a écrit dans le message de
news:EFFD42A2-3D7B-4E96-B4EF-1725CBA63E7E@microsoft.com...
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.
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
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
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" <Fabien@discussions.microsoft.com> a écrit dans le message de
news:EFFD42A2-3D7B-4E96-B4EF-1725CBA63E7E@microsoft.com...
> 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
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