Windows 每桌面互斥

Windows 每桌面互斥,windows,winapi,Windows,Winapi,我刚刚发现,我希望在我的应用程序中改进对它的支持 我使用互斥锁来阻止应用程序的多个实例运行,但如果在不同的桌面上启动其他实例,我希望允许启动它们 可以使用互斥锁吗?据我所知,只有全局和本地(每个用户)互斥体,但没有每个桌面互斥体 有什么想法吗?说出互斥体的名称 myCompanyName\u myApplicationName\u myApplicationVersion\u desktopName 在不同桌面上运行的应用程序将看到不同的互斥锁 您可以这样获得桌面名称,但您可能需要添加一些错误检

我刚刚发现,我希望在我的应用程序中改进对它的支持

我使用互斥锁来阻止应用程序的多个实例运行,但如果在不同的桌面上启动其他实例,我希望允许启动它们

可以使用互斥锁吗?据我所知,只有全局和本地(每个用户)互斥体,但没有每个桌面互斥体

有什么想法吗?

说出互斥体的名称

myCompanyName\u myApplicationName\u myApplicationVersion\u desktopName

在不同桌面上运行的应用程序将看到不同的互斥锁

您可以这样获得桌面名称,但您可能需要添加一些错误检查:

wchar_t buffer[256];
DWORD length;

// This desktop handle does not need closing
HANDLE hDesktop = GetThreadDesktop(GetCurrentThreadId());
BOOL succeeded = GetUserObjectInformation(hDesktop, UOI_NAME, buffer, sizeof(buffer), &length);
// if succeeded then desktop name is in buffer

我建议使用STARTUPINFO结构的lpDesktop成员来比较应用程序是否在同一个桌面上运行。