У меня есть обходной путь, который может помочь в таком случае, как этот.
Я думаю, мы всегда сможем проверить, как был запущен наш модуль.
В этом случае мы должны проверить первый аргумент.
Я напишу код, потому что у меня есть проблемы с английским языком.
Здесь два пути:
Первый случай . мы можем сравнить имя модуля с первым аргументом командной строки.
как то так:
const TCHAR* csCommandLine = ::GetCommandLine();
// Attention!!! the first symbol can be quete
if (*csCommandLine == _T('\"'))
csCommandLine++;
TCHAR sModuleFileName[MAX_PATH];
DWORD dwModuleFileName = ::GetModuleFileName(NULL, sModuleFileName, MAX_PATH);
if (dwModuleFileName && !_tcsncmp(csCommandLine, sModuleFileName, dwModuleFileName)) {
// The command line contains the module name.
}
Второй случай . мы можем попытаться получить атрибуты файла для первого аргумента командной строки
как то так:
// Внимание !!! не используйте его, если вы собираетесь передавать путь к файлу в аргументах командной строки.
int nArgc;
LPTSTR* szArglist = ::CommandLineToArgvW(::GetCommandLine(), &nArgc);
if (nArgc && ::GetFileAttributes(szArglist[0]) != INVALID_FILE_ATTRIBUTES) {
// The command line contains the module name.
}
::LocalFree(szArglist);
Надеюсь, это кому-нибудь пригодится.
С уважением, Владимир