Communiquer entre 2 instances d'un programme

salut67 Messages postés 27 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 1 novembre 2018 - 18 févr. 2013 à 20:36
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 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.

Jean-Claude

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 févr. 2013 à 09:09
SendMessage prend un HWND (handle de FENETRE) en 1er param, pas un hProcess.

ciao...
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0
Rejoignez-nous