2010-03-23 2 views
1

Использование C/C++ Windows API RegisterWindowMessage()Различные RegisterWindowMessage() имена появляются один и тот же

Я использую имя приложения в качестве имени сообщения.

Далее я вызываю CreatMutex() с тем же именем, чтобы я мог узнать, существует ли он. Если это так, я знаю, что это приложение уже запущено, а не запускать второй экземпляр. Это операция моей функции Running()

Мое замешательство над именем сообщения. Кажется, что «AutoConvert.exe» и «AutoAppend.exe» интерпретируются как одно и то же имя. Зачем?

Добавлено: Im не на моей машине, но это что-то вроде функции, которая вызывается в обоих приложениях, чтобы проверить, если приложение в настоящее время работает

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; 
} 

Когда я вернусь, я должен сделать некоторые дополнительные как вы делаете хороший момент.

+0

Я предполагаю, что это означает, что при запуске AutoAppend во второй раз он возвращается к уже запущенному AutoConvert. В противном случае ваши Мьютеки не уникальны, когда они должны быть. –

ответ

1

Этот код:

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

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

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

для меня печатает два различных целочисленных значений (т.е. он зарегистрировал два различных сообщения) - что это напечатать для вас?

+0

Спасибо за ваши комментарии. См. Выше –