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

Signaler
Messages postés
23
Date d'inscription
vendredi 16 mars 2012
Statut
Membre
Dernière intervention
16 mai 2013
-
Messages postés
23
Date d'inscription
vendredi 16 mars 2012
Statut
Membre
Dernière intervention
16 mai 2013
-
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

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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...
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
20
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...
Messages postés
23
Date d'inscription
vendredi 16 mars 2012
Statut
Membre
Dernière intervention
16 mai 2013

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.
Messages postés
23
Date d'inscription
vendredi 16 mars 2012
Statut
Membre
Dernière intervention
16 mai 2013

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.