【发布时间】:2017-09-10 23:45:07
【问题描述】:
我有一个简单的应用程序,带有 1 个按钮,可以知道 Notepadd++ 是否已经打开。我已经回顾了一些主题,但我找不到合适的主题。在按钮方法里面我有:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
mutex = CreateMutex( NULL, TRUE, "Local\\$notepad++$");
if (GetLastError() == ERROR_ALREADY_EXISTS) {
//MessageBox::Show(..[not open]..);
}
//MessageBox::Show(..[open]..);
}
};
我对“Local\$notepad++$”有疑问,我收到以下错误:
argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
还有这个:
'HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR)': cannot convert argument 3 from 'const char [18]' to 'LPCWSTR'
如果有其他更简单的方法可以做到这一点,请帮助我!我也尝试将名称更改为:notepad++。我正在使用 Visual Studio 2015 C++
我有评论并用作参考:
C/C++ How to tell if a program is already running?
Is using a Mutex to prevent multiple instances of the same program from running safe?
【问题讨论】:
-
记事本是否已经使用了可以使用的互斥锁??
-
你可以通过写
L"Local\\$notepad++$"来编译它;注意L前缀。但不确定它是否真的有效 - 是什么让您相信 Notepad++ 创建了一个具有此名称的互斥锁? -
为了澄清@IgorTandetnik 的建议,
LPCWSTR是一个指向 16 位字符的字符串的指针。const char *用于 8 位字符。在字符串常量之前添加L将告诉编译器将该字符串中的字符视为16 位,可以转换为LPCWSTR。 -
我不知道 Notepadd++ 是否创建互斥锁。有没有办法查出来?
标签: c++ windows singleton windows-10 mutex