Faire la liste des process sous Windows CE/Mobile ou WM [Résolu]

Messages postés
24
Date d'inscription
vendredi 16 mars 2012
Dernière intervention
16 mai 2013
- - Dernière réponse : ypelissier
Messages postés
24
Date d'inscription
vendredi 16 mars 2012
Dernière intervention
16 mai 2013
- 21 janv. 2013 à 16:17
Bonjour,
Je cherche à vérifier que le processus que je lance n'est pas déjà en cours d'exécution.

Vous me direz, facile, utilise ce code :
private bool IsRunning()
{
Process curProc = Process.GetCurrentProcess();
foreach (Process proc in Process.GetProcesses())
if (proc.Id !curProc.Id && curProc.ProcessName proc.ProcessName)
return true;
return false;
}


Et même plus simple :
private bool IsRunning()
{
foreach (Process proc in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
if (proc.Id != curProc.Id)
return true;
return false;
}


OK, ça fonctionne bien... avec Windows bureau (XP/Vista/7).

Mais sous Windows CE, Windows mobile ou WM, version 5.0, dans le Compact Framework, ben ces 2 méthodes n'existent pas. Pourtant, lorsque je fais un équivalent du "ctrl+alt+supp" dessus, j'ai bien une liste des processus (allégé des processus système certainement), c'est donc qu'il doit y avoir un moyen.

Quelqu'un aurait-il une piste, une idée, une lumière à m'apporter pour relancer mes recherches ?

Merci d'avance.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
3
Merci
Re,

concernant plus précisément ta question,
pour lister les process sous windows mobile il faut aussi utiliser p-invoke et la dll : toolhelp.dll

// struct a redéclarer :
public struct PROCESSENTRY; //...

// const utile
private const uint TH32CS_SNAPPROCESS = 0x00000002; 

// Les apis
[DllImport("toolhelp.dll")] 
private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processID); 
 
DllImport("toolhelp.dll")] 
private static extern int CloseToolhelp32Snapshot(IntPtr snapshot);  
 
DllImport("toolhelp.dll")] 
private static extern int Process32First(IntPtr snapshot, ref PROCESSENTRY processEntry); 
 
DllImport("toolhelp.dll")] 
private static extern int Process32Next(IntPtr snapshot, ref PROCESSENTRY processEntry); 


bye...

Merci yann_lo_san 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
0
Merci
Salut,

Voici une méthode :
en C, on utilise un Mutex, je te donne le code et la logique,
à toi de le porter en C# via p-invoke.

- 1 : a chaque init de l'appli on crée un Mutex nommé
- 2 : si le mutex existe, on réactive l'appli d'origine qui devait etre cachée ou réduite
- 2.1 : on sort sans créer d'instance
- 3 : si le mutex n'existe pas, on crée l'instance normalement
- 4 : dans tous les cas on supprime le handle à la fermeture de l'appli


// Membre de la classe principale
HANDLE m_MutexHandle = NULL;

// Init application
BOOL InitInstance()
{
// Crée un handle Mutex unique	
m_MutexHandle = ::CreateMutex(NULL, FALSE, "UniqueMutexObject");

DWORD dwErr = ::GetLastError();
if ( dwErr == ERROR_ALREADY_EXISTS ) 
{ 
// Recherche et active l'instance déjà lancée
HWND hWnd = ::FindWindow(NULL, "MonApp.exe");
if( hWnd )
{
::ShowWindow(hWnd, SW_RESTORE);
::SetForegroundWindow(hWnd);
}

// Termine CETTE instance
return FALSE;
}

// suite de l'init
return TRUE;
}

// Ferme appli
void ExitInstance()
{
// Libère le handle, une autre instance pourra etre créée
if( m_MutexHandle != NULL )
::CloseHandle(m_MutexHandle);
}



bye...
Commenter la réponse de yann_lo_san
Messages postés
24
Date d'inscription
vendredi 16 mars 2012
Dernière intervention
16 mai 2013
0
Merci
Désolé pour le retard, mais j'ai eu d'autres chats à fouetter.

J'ai essayé les P-Invoke (heureusement que tu m'as dit ce que c'était car je ne connaissait pas le terme). J'ai réussi à faire ce que je voulait, mais j'ai eu d'autres choses à faire et en cherchant, je suis tombé sur ce site :
http://rapi.codeplex.com/releases/view/91052

Là j'avais plus qu'à réutiliser en comprenant ce qui était dans la DLL et surtout en maitrisant les fonctions de la DLL.

Merci pour tes conseils, à défaut de l'utiliser, j'ai au moins appris ce qu'était le P-Invoke.
Commenter la réponse de ypelissier
Messages postés
24
Date d'inscription
vendredi 16 mars 2012
Dernière intervention
16 mai 2013
0
Merci
ZUT, je me suis mélangé les pédales... !!! Ce n'est pas la réponses que je devais apporter ici.

CA MARCHE TRES BIEN. MERCI BEAUCOUP.
Commenter la réponse de ypelissier

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.