У меня есть приложение Windows GUI, написанное на C (MinGW), и я хочу, чтобы приложение выполняло разные задачи в зависимости от того, было ли оно запущено из командной строки с аргументом имени файла или путем перетаскивания файла на значок приложения. Как сейчас, следующая функция не различает:
int argc;
LPWSTR *argv = CommandLineToArgvW(GetCommandLineW(),&argc);
Когда файл перетаскивается на значок приложения, он предполагает, что он был запущен из командной строки. Проблема в том, что мне нужны дополнительные аргументы, которые должны быть переданы через командную строку, чтобы сделать что-нибудь полезное. Самого имени файла недостаточно, поэтому приложение просто закрывается, потому что у него недостаточно информации для продолжения.
Мне бы хотелось, чтобы пользователь мог перетаскивать файл на значок приложения и открывать окно с запросом необходимых параметров. Если пользователь запускает приложение через командную строку с уже предоставленными необходимыми параметрами, приложение немедленно начнет обработку без запроса дополнительного ввода. Это возможно?
Другая проблема, с которой я сталкиваюсь, заключается в том, что иногда при перетаскивании файла на значок приложения происходит сбой. Я сузил это до всего, что работает на значениях argv []. Он не делает этого, если запускается через командную строку с тем же аргументом. Например, это приведет к сбою приложения примерно в 20% случаев:
fprintf(stderr,"argv[3] was %ls\n",(LPWSTR)argv[3]);
Почему это происходит только при запуске с помощью drag-n-drop? Я на Windows 7 x64.