1

使用 C/C++ Windows API RegisterWindowMessage()

我使用应用程序的名称作为消息名称。

接下来,我使用相同的名称调用CreatMutex(),以便判断它是否已经存在。如果是这样,我知道这个应用程序已经在运行并且不会启动它的第二个实例。这是我的函数 Running() 的操作

我的困惑在于消息名称。似乎“AutoConvert.exe”和“AutoAppend.exe”被解释为同名。为什么?

补充:我不在我的机器上,但这类似于在两个应用程序中调用以检查应用程序当前是否正在运行的函数

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

当我回来时,我需要做一些进一步的测试,因为你说得很好。

4

1 回答 1

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

对我来说打印两个不同的整数值(即它已经注册了两个不同的消息) - 它为你打印什么?

于 2010-03-23T12:40:17.150 回答