Faire la liste des process sous Windows CE/Mobile ou WM

Résolu
ypelissier Messages postés 23 Date d'inscription vendredi 16 mars 2012 Statut Membre Dernière intervention 16 mai 2013 - 11 janv. 2013 à 15:23
ypelissier Messages postés 23 Date d'inscription vendredi 16 mars 2012 Statut Membre 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.

4 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 24
11 janv. 2013 à 23:29
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...
3
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 24
11 janv. 2013 à 23:13
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...
0
ypelissier Messages postés 23 Date d'inscription vendredi 16 mars 2012 Statut Membre Dernière intervention 16 mai 2013
21 janv. 2013 à 16:13
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.
0
ypelissier Messages postés 23 Date d'inscription vendredi 16 mars 2012 Statut Membre Dernière intervention 16 mai 2013
21 janv. 2013 à 16:17
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.
0
Rejoignez-nous