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

ypelissier 24 Messages postés vendredi 16 mars 2012Date d'inscription 16 mai 2013 Dernière intervention - 11 janv. 2013 à 15:23 - Dernière réponse : ypelissier 24 Messages postés vendredi 16 mars 2012Date d'inscription 16 mai 2013 Dernière intervention
- 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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 11 janv. 2013 à 23:29
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de yann_lo_san
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 11 janv. 2013 à 23:13
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
ypelissier 24 Messages postés vendredi 16 mars 2012Date d'inscription 16 mai 2013 Dernière intervention - 21 janv. 2013 à 16:13
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
ypelissier 24 Messages postés vendredi 16 mars 2012Date d'inscription 16 mai 2013 Dernière intervention - 21 janv. 2013 à 16:17
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.