Дельфы:Выполнение программы и вызов внутренней процедуры / функции из CMD или с помощью двойного щелчка по соответствующему расширению

StackOverflow https://stackoverflow.com/questions/1285204

Вопрос

Итак, недавно я столкнулся с некоторыми проблемами, определяющими, из какого способа была вызвана программа, если в обоих случаях параметры одинаковы - например:/что-то /нечто.Я связываю значок с программой во время выполнения, и я могу использовать cmd для его вызова, но всякий раз, когда я дважды нажимаю на связанный файл (со значком), программа просто открывается, но не вызывает необходимый поворот, потому что у меня нет необходимого триггера / атрибута / параметра, который, если выполнение было выполнено двойным щелчком, не запускается...> appname.exe /что-то /нечто.

Можете ли вы привести простой пример или написать теоретически все с требуемыми функциями и т.д.

В настоящее время, как вы можете догадаться, я использую ParamStr / ParamCount / blablabla / FindCmdLineSwitch / и некоторые другие функции ...но ...все еще ...:(

Это было полезно?

Решение

Не могли бы вы немного объяснить?

Я подумай вы хотите иметь возможность выполнять действие № 1, если пользователь дважды нажимает на значок документа для "mydocument.ext", и действие № 2, если он вводит

appname.exe mydocument.exe

Двойное нажатие заставит оболочку запустить команду "open", с которой связана "командная строка" в реестре.Лучше всего установить для этой командной строки что-то вроде...

MyProgram.exe "%1" /doubleclicked

...а затем проверьте наличие флага /doubleclicked во время выполнения.Очевидно, вы никак не можете запретить пользователю вводить команду с параметром "/doubleclicked", но именно так работает оболочка.

Другие советы

Как предполагает Родди, переключение параметров, я думаю, является единственным надежным решением.Однако обратите внимание, что если пользователь создает свои собственные ярлыки, это может не соответствовать вашим потребностям.

т. е.если пользователь создает ярлык, который включает какой-либо "документ" в командной строке, вы хотите, чтобы это рассматривалось как вызов командной строки или "двойной щелчок".Я предполагаю, что это последнее.

Если это первое, то вы можете прекратить читать здесь.:)

Но если это является в последнем случае вам, возможно, потребуется немного больше поработать, чтобы (более) надежно получить желаемое поведение....

Это потребовало бы использования переключателя командной строки для указания запуск командной строки, а не запуск двойным щелчком мыши, поскольку существует множество способов "эффективного" двойного щелчка, но только один способ запустить что-либо из командной строки - то есть ИСПОЛЬЗОВАТЬ командную строку!(Я рассматриваю меню "Пуск" -> "Выполнить"...кстати, для запуска из командной строки.ymmv)

Итак, если бы это был я, я бы создал специальную программу запуска командной строки для приложения.Средство запуска командной строки на самом деле было бы очень простым фрагментом кода, который принимает заданную командную строку и просто добавляет дополнительный параметр перед вызовом фактического исполняемого файла приложения:

например ,

мое приложение param1 param2

который просто вызывает ShellExecute с помощью effectively:

мой appgui парам1 парам2 /cmd

Я сам не был бы слишком обеспокоен наличием двух исполняемых файлов, поскольку пользователя гораздо меньше волнует фактическое имя exe, представляющего ваше "реальное" приложение, при вызове его через графический интерфейс, потому что, конечно, вызовы GUI для этого не требуют знания или необходимости знать имя.Ваши ассоциации типов файлов, ярлыки и т.д. Просто указывают непосредственно на "реальный" myappgui.exe, а не myapp.exe

И ваша ссылка на командную строку просто направляет пользователя использовать myapp.exe чтобы вызвать ваше приложение из командной строки.

В приложении, если оно находит переключатель командной строки, то оно знает, что оно было запущено через приложение запуска командной строки, в противном случае это, должно быть, был запуск двойным щелчком мыши / с графическим интерфейсом.

Что касается большинства ваших пользователей, то им, возможно, даже не понадобится знать, что задействованы два exe-файла.В любом случае, вы должны признать, что если / когда пользователь обнаружит вашу технику - какую бы вы ни выбрали - он может подделать ее, подделав командную строку для достижения любых целей, которые он пожелает.

Если это важно для вас, подход к запуску командной строки, возможно, немного снижает вероятность того, что они обнаружат механизм - недостаточно знать, что существует два исполняемых файла - им также нужно знать переключатель командной строки, добавляемый вашим средством запуска командной строки, - если они только что использовали myappgui.exe непосредственно из командной строки, без использования средства запуска командной строки myapp.exe, тогда он по-прежнему будет реагировать так, как если бы он был запущен из графического интерфейса пользователя!

С другой стороны, используя переключатель для обозначения Запуск графического интерфейса пользователя требует включения этого требуемого переключателя в режим "публичный просмотр".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top