Liste des processus en VC++
Résolu/Fermé
A voir également:
- Liste des processus en VC++
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Vc++ - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Liste de diffusion whatsapp - Guide
3 réponses
Comme personne ne m'a répondu, j'ai cherché moi-meme, j'ai trouvé une autre manière de faire.
Si j'ai bien compris, une copie de l'application est faite du disque dur vers la RAM, et le code ci-dessous va écrire dans cette copie en RAM.
Il semblerait que l'OS gère cette copie pour n'en avoir qu'une seule par fichier du diske dur.
Les directives de compil (pragma) permettent d'écrire une variable qui est alors globale à toutes les instances de l'executable.
A partir de là, c'est gagné, tant qu'on lance le meme nom de l'executable.
Dans mon cas ce code est dans une DLL et ça marche pour l'exe apelant qui est dans un autre language (visual basic).
Le code:
#include <windows.h>
#pragma data_seg("Shared")
LONG g_Counter = -1;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
int WINAPI WinMain (HINSTANCE hinstExe,
HINSTANCE hinstPrev, LPTSTR pszCmdLine, int nCmdShow) {
BOOL fFirstInstance =
(InterlockedIncrement(&g_Counter) == 0);
if (!fFirstInstance) {
MessageBox(NULL,
__TEXT("Application is already running - ")
__TEXT("Terminating this instance."),
__TEXT("Multiple Instance"),
MB_OK | MB_ICONINFORMATION);
} else {
MessageBox(NULL,
__TEXT("This is the First Instance of the application.\n")
__TEXT("Press OK to close this application."),
__TEXT("Multiple Instance"),
MB_OK | MB_ICONINFORMATION);
}
InterlockedDecrement(&g_Counter);
return(0);
}
issu de : https://www.codeguru.com/cpp/w-p/system/misc/article.php/c5663/Detecting-Multiple-Instances-of-an-Application-in-VC.htm#more
Si j'ai bien compris, une copie de l'application est faite du disque dur vers la RAM, et le code ci-dessous va écrire dans cette copie en RAM.
Il semblerait que l'OS gère cette copie pour n'en avoir qu'une seule par fichier du diske dur.
Les directives de compil (pragma) permettent d'écrire une variable qui est alors globale à toutes les instances de l'executable.
A partir de là, c'est gagné, tant qu'on lance le meme nom de l'executable.
Dans mon cas ce code est dans une DLL et ça marche pour l'exe apelant qui est dans un autre language (visual basic).
Le code:
#include <windows.h>
#pragma data_seg("Shared")
LONG g_Counter = -1;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
int WINAPI WinMain (HINSTANCE hinstExe,
HINSTANCE hinstPrev, LPTSTR pszCmdLine, int nCmdShow) {
BOOL fFirstInstance =
(InterlockedIncrement(&g_Counter) == 0);
if (!fFirstInstance) {
MessageBox(NULL,
__TEXT("Application is already running - ")
__TEXT("Terminating this instance."),
__TEXT("Multiple Instance"),
MB_OK | MB_ICONINFORMATION);
} else {
MessageBox(NULL,
__TEXT("This is the First Instance of the application.\n")
__TEXT("Press OK to close this application."),
__TEXT("Multiple Instance"),
MB_OK | MB_ICONINFORMATION);
}
InterlockedDecrement(&g_Counter);
return(0);
}
issu de : https://www.codeguru.com/cpp/w-p/system/misc/article.php/c5663/Detecting-Multiple-Instances-of-an-Application-in-VC.htm#more