Process WinCE

Signaler
Messages postés
19
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 avril 2008
-
Messages postés
19
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 avril 2008
-
 


Bonjour!<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>








 






 



J'utilise le code ci-dessous pour recencer les processus dans WinCE 5.0. Je fais appel à la classe ainsi  : TraitementsSurProcessus.RechercherUnProcessus("nom_du_processus")








Tout se passe bien, sauf que je ne trouve aucun processus... la variable "FlagPremierProcessusLu" est toujours à "false", pourtant je récupère bien un n° de handle au passage de l'instruction "CreateToolhelp32Snapshot".








Quelqu'un de moins débutant que moi voit-il quelquechose que je ne vois pas?







Merci d'avance.



using System;



using



System.Collections.Generic;


using



System.Text;


using



System.Runtime.InteropServices;


using



System.Windows.Forms;


namespace



MenuBMS{


public



class



TraitementsSurProcessus

{


[




DllImport
(

"toolhelp.dll"
, SetLastError =

true
)]


private



static



extern



bool
Process32First(

IntPtr
hSnapshot,

ref



PROCESSENTRY32
lppe);[


DllImport
(

"toolhelp.dll"
, SetLastError =

true
)]


private



static



extern



bool
Process32Next(

IntPtr
hSnapshot,

ref



PROCESSENTRY32
lppe);[


DllImport
(

"toolhelp.dll"
, SetLastError =

true
)]


private



static



extern



IntPtr
CreateToolhelp32Snapshot(

uint
dwFlags,

uint
th32ProcessID);[


DllImport
(

"toolhelp.dll"
, SetLastError =

true
)]


private



static



extern



bool
CloseToolhelp32Snapshot(

IntPtr
hSnapshot);[


StructLayout
(

LayoutKind
.Sequential)]


private



struct



PROCESSENTRY32

{







public



uint
dwSize;


public



uint
cntUsage;


public



uint
th32ProcessID;


public



IntPtr
th32DefaultHeapID;


public



uint
th32ModuleID;


public



uint
cntThreads;


public



uint
th32ParentProcessID;


public



int
pcPriClassBase;


public



uint
dwFlags;[


MarshalAs
(

UnmanagedType
.ByValTStr, SizeConst = 260)]


public



string
szExeFile;}


private



const



uint
TH32CS_SNAPPROCESS = 0x00000002;


public



static



bool
RechercherUnProcessus(

string
NomDuProcessusRecherche){


IntPtr
handle =

IntPtr
.Zero;


bool
FlagPremierProcessusLu =

false
;


bool
FlagProcessusSuivantLu =

false
;


try

{







// Créer le snapshot des processus du système






PROCESSENTRY32
InfoProcessus =

new



PROCESSENTRY32
();InfoProcessus.dwSize = (


uint
)

Marshal
.SizeOf(

typeof
(

PROCESSENTRY32
));handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);


// Lire le premier processus

FlagPremierProcessusLu = Process32First(handle,




ref
InfoProcessus);


//






if
(FlagPremierProcessusLu ==

true
){


MessageBox
.Show(

"processus listés !!"
,

"info"
,

MessageBoxButtons
.OK,

MessageBoxIcon
.Hand,

MessageBoxDefaultButton
.Button1);


do
{


if
(

string
.Compare(InfoProcessus.szExeFile, NomDuProcessusRecherche,

true
) == 0)

return



true
;

//Retourner le flag "true" si la chaine est trouvée

FlagProcessusSuivantLu = Process32Next(handle,




ref
InfoProcessus);}


while
(FlagProcessusSuivantLu !=

false
);}

}


catch

{


}







finally

{







// Libérer la ressource du snapshot

CloseToolhelp32Snapshot(handle);


handle =




IntPtr
.Zero;}


return



false
;}

}

}

2 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
20
salut,

si tu fais du 2.0, normalement c'est gérer par le compact framework dans la classe Process...

sinon, au lieu d'utiliser "bool", tu prends un simple int et tu testes si != 0...

ShareVB
Messages postés
19
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
9 avril 2008

J'ai récupéré une source sur msdn qui initialise la structure PROCESSENTRY32 différemment, j'ai pas épluché le truc complètement mais ça fonctionne. En gros je pense que le problème venait du fait que dwSize était renseigné avec une mauvaise valeur, donc l'API ne pouvait s'exécuter correctement.

Les explications ici : http://msdn2.microsoft.com/en-us/library/aa446560.aspx

Sinon j'ai pas réussi à faire ce que je voulais avec la classe Process, c'est pour cela que je m'étais rabattu sur l'API "toolhelp.dll".

Merci