запустив программу по-разному с передачей ей параметров можно получить имя запускаемого файла в начале строки, а можно и не получить. вопрос: есть ли простой способ это узнать из запущенной программы? или только нужно анализировать идентичность первого параметра "себе"?
int main(int argc, char *argv[]) argv[0] - "по жизни" указывает на строку содержащую полный путь к проге, при этом когда нет параметров argc == 1. При каком способе передачи параметров ты не получишь argv[0] ? Я чёто не допонял?
да вот сам видел. правда, сейчас воспроизвести не могу, но постараюсь: запускал одну и ту же прогу, которая просто берет GetCommandLine и ее показывает: в одном случае есть имя экзешника, в другом - нет. еще поколдую, а то это было несколько месяцев назад - ща вот просто вспомнил. --- может, мне конечно, показалось, но меня это впечатлило, т.к. одна моя прога не захотела работать из-за этого
а вот: уж не знаю еще как Антонис запускает прогу, но вот прога, запущенная из ВинАсм иде и она же запущенная "вручную" с одинаковым "параметром". Разница очевидна
ну да, через CreateProcess. Вот и игрушка (runs запускать из одной директории с emutest) 956065720__runs.1.1.zip так что, вопрос пока в силе
Код (Text): args = PathGetArgs(GetCommandLine()); if(args){ aux = strlen(args); if(*args == '"'){ // erase ending quotation mark *(args + aux - 1) = '\0'; // skip starting quotation mark args++; } } // args указывает на параметры командной строки Или ещё вариант: Код (Text): invoke GetCommandLine mov args,eax invoke PathGetArgs,args mov args,eax mov dl,[eax] .IF dl != 0 .IF dl == '"' invoke PathUnquoteSpaces,eax .ENDIF mov args,eax .ENDIF ; args указывает на параметры командной строки PathGetArgs и PathUnquoteSpaces сидят в shlwapi, кажется.
shoo Можно попробовать искать имя программы, полученное при помощи GetModuleFileName, в первом параметре, полученном при помощи GetCommandLine. Хотя нет никакой гарантии, что реальный первый параметр на будет совпадать с именем программы.
тот же результат, только в профиль "неработавшая" прога начиналась так: Код (Text): invoke GetCommandLine mov CommandLine, eax invoke PathGetArgs,CommandLine mov CommandLine, eax (текст оригинала) можно, но разве кто-то так делает? я запустил через CreateProcess OllyDebug: он переданную в командной строке прогу не открыл, а вот так: blablabla e:\icqlite.exe - открыл и мс-ворд выявил то же поведение по-моему, это неправильно в простонародии - баг.
shoo но разве кто-то так делает? Я другого варианта не вижу. запустил через CreateProcess OllyDebug: он переданную в командной строке прогу не открыл ... мс-ворд выявил то же поведение Запускай CreateProcess по другому - CreateProcess(NULL, prog + " " + cmdline, ... и будет тебе счастье.