2010-03-23 6 views
1

Utilisation du C/C++ API Windows RegisterWindowMessage()noms différents RegisterWindowMessage() apparaissent les mêmes

J'utilise le nom de l'application comme nom de message.

Ensuite, j'appelle CreatMutex() en utilisant le même nom afin que je puisse dire si elle existe déjà. Si c'est le cas, je sais que cette application est déjà en cours d'exécution et ne pas en lancer une seconde instance. C'est le fonctionnement de ma fonction Running()

Ma confusion est sur le nom du message. Il semble que "AutoConvert.exe" et "AutoAppend.exe" sont interprétés comme le même nom. Pourquoi?

Ajouté: Im pas ma machine mais cela est quelque chose comme la fonction qui est appelée dans les deux applications pour vérifier si l'application est en cours d'exécution

INT AlreadyRunning(string sAppName) { 
    INT runchk = RegisterWindowMessage(sAppName.c_str()); 
    INT retval = CreateMutex(0, 1, sAppName.c_str()); 
    if(retval > 0) { 
     if(GetLastError = ERROR_ALREADY_EXISTS) { 
     SendMessage HWND_BROADCAST, runchk, 0, 0; 
     return 1; 
     } 
    } 
    return 0; 
} 

Quand je reviens je dois faire un peu plus tester comme vous faites un bon point.

+0

Je suppose que cela signifie que lorsque vous exécutez AutoAppend une seconde fois, il revient à un AutoConvert déjà en cours d'exécution. Sinon, vos mutex ne sont pas uniques quand ils devraient l'être non plus. –

Répondre

1

Ce code:

#include <windows.h> 
#include <stdio.h> 

int main() { 
    int m1 = RegisterWindowMessage("AutoConvert.exe"); 
    int m2 = RegisterWindowMessage("AutoAppend.exe"); 

    printf("%d %d\n", m1, m2); 
} 

pour moi imprime deux valeurs entières différentes (à savoir qu'il a enregistré deux messages différents) - qu'est-ce que vous imprimer pour?

+0

Merci pour vos commentaires. Voir au dessus –

Questions connexes