salut67
Messages postés27Date d'inscriptionmercredi 19 janvier 2011StatutMembreDernière intervention 1 novembre 2018
-
18 févr. 2013 à 20:36
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
19 févr. 2013 à 22:09
Bonjour,
j'ai un programme. Si je lance une 2nde instance, je souhaite que la 1ère instance en soit informée (la 2nde se ferme alors, laissant la 1ère se poursuivre) :
int pid = GetCurrentProcessId();
PROCESSENTRY32 ProcessEntry;
HANDLE h, hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot != INVALID_HANDLE_VALUE)
{
ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &ProcessEntry))
do
if ((!strcmp(ProcessEntry.szExeFile, "monprog.exe")) && (pid != ProcessEntry.th32ProcessID))
if ((h = OpenProcess(PROCESS_ALL_ACCESS ,FALSE, ProcessEntry.th32ProcessID)) != NULL)
r = SendMessage(h, WM_CLOSE, 0, 0);
while (Process32Next(hSnapshot, &ProcessEntry));
CloseHandle(hSnapshot);
}
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0))
printf("message %d\n", msg.message);
Mais la 1ère instance ne reçoit pas de message de la 2nde. J'ai essayé avec d'autres messages que WM_CLOSE, rien n'y fait.
Où me trompè-je ? Merci bien.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 19 févr. 2013 à 22:09
Salut,
Pour limiter l'exécution de ton programme à une seule instance, il est beaucoup plus simple d'utiliser un Mutex avec CreateMutex()à l'entrée du main() ou WinMain(). Exemple ICI Si ton programme est fenêtré, et tu veux que ce dernier soit informé, tu mets le HWND de la fenêtre en section shared pour que les autres instances du programmes puissent y accéder pour lui envoyer un message via SendMessage(). Il est également possible d'utiliser le FileMapping. Exemples pour les deux techniques dans CE code source de BruNews.
Si ton programme n'est pas fenêtré, il parait que c'est le cas vu le printf() dans ton code, je pense que c'est possible d'utiliser PostThreadMessage pour envoyer un message au thread principal de ton programme.