J'ai une application simple avec 1 bouton pour savoir si Notepadd ++ est déjà ouvert. J'ai passé en revue quelques sujets mais je ne peux pas trouver le bon. Dans la méthode de bouton je:Application simple pour savoir si Notepad ++ est en cours d'exécution
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]..);
}
};
J'ai un problème avec "\ Local $ notepad ++ $", je reçois cette erreur:
argument of type "const char *" is incompatible with parameter of type "LPCWSTR"
et cette autre:
'HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES,BOOL,LPCWSTR)': cannot convert argument 3 from 'const char [18]' to 'LPCWSTR'
S'il y a un autre moyen plus facile de le faire, aidez-moi s'il vous plaît! J'ai aussi essayé de changer le nom pour: notepad ++. J'utilise visual studio 2015 C++
Je revue et utilise comme référence:
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?
Est-ce que le bloc-notes déjà utiliser un mutex vous pouvez utiliser ?? – user0042
Vous pourriez le compiler en écrivant 'L 'Local \\ $ notepad ++ $" '; notez le préfixe 'L'. Je ne suis pas sûr que cela fonctionnerait vraiment - qu'est-ce qui vous fait croire Notepad ++ crée un mutex avec ce nom? –
Pour clarifier ce que suggère @IgorTandetnik, 'LPCWSTR' est un pointeur vers une chaîne de caractères de 16 bits. 'const char *' est pour les caractères de 8 bits. Ajouter 'L' avant une constante de chaîne indiquera au compilateur de traiter les caractères de cette chaîne comme 16 bits, ce qui peut être converti en' LPCWSTR'. – bindsniper001