Notepadd ++が既に開いているかどうかを知るためのボタンが1つ付いた簡単なアプリケーションがあります。私はいくつかのトピックを見直しましたが、私は正しいトピックを見つけることができません。私が持っているボタンのメソッド内:メモ帳++が実行されているかどうかを確認する簡単なアプリケーション
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]..);
}
};
私は、 "ローカルの\ $メモ帳++ $" との問題を抱えている、私はこのエラーを取得:
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?あなたの方法について
メモ帳は、すでにあなたが使用することができますミューテックスを使用しています? – user0042
'L 'を書くことでコンパイルできます。Local \\ $ notepad ++ $" ';プレフィックス 'L 'に注意してください。あなたはNotepad ++がこの名前のミューテックスを作成すると信じさせてくれるのでしょうか? –
@IgorTandetnikが示唆していることを明確にするために、 'LPCWSTR'は16ビット文字列へのポインタです。 'const char *'は8ビット文字用です。文字列定数の前に 'L'を追加すると、コンパイラはその文字列の文字を16ビットとして扱い、' LPCWSTR'にキャストすることができます。 – bindsniper001