Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Вниз

Вызов другого приложения из модуля- как быть ? 


Evgenyk   (2002-02-28 15:52) [0]

Проблема следующая: мне нужно запустить из модуля внешнее приложение (некий exe). Использую для этого либо WinExec, либо ShellExecute. В параметре требуется указать имя файла и путь к нему. Но тип параметра- не строка, а PChar, т.е. NullTerminated.

Т.е. я пишу WinExec(PChar(C:\Programs.....)). Если путь не содержит пробелов - проблем нет. А там где есть пробелы- путь обрубается, NullTerminated же. Кто знает, как бороться, подскажите, плиз.



Deus   (2002-02-28 15:55) [1]

Самое простое - GetShortPathName - будет путь без пробелов.
А вообще, пробел - не null



Evgenyk   (2002-02-28 16:08) [2]

А по тому пути, который мне вернет GetShortPathName, приложение найдется, другими словами- он будет идентичен оригинальному или как ?



Deus   (2002-02-28 16:09) [3]

ну конечно
длинные пути - от лукавого :))



Иван Шихалев   (2002-02-28 16:47) [4]

А вообще-то принято в кавычки заключать длинные имена. "C:\Program Files\..."



Sasha9   (2002-02-28 17:11) [5]

в ShellExecute проблем не должно быть, если всё указать по правилам



snoup   (2002-03-02 03:02) [6]

Если тебе нужно запустить exe то просто напиши такой оператор
ShellExecute(Handle,nil,"{имя exe-шника}",nil,nil,SW_SHOW);
но добавь модуль Shellapi к uses и все все exe-шники запускаются превосходно и не надо писать адресс например C:\PROGRAM....
Всё проверино!



Андрей Сенченко   (2002-03-02 14:23) [7]

>> snoup © (02.03.02 03:02)

ShellApi к Uses подключасть по-любому придется, если есть необходимость использовать ShellExecute(). Это первое.
Второе : По вашему получается, что включение в Uses того самого ShellApi и использование пары скобок {} просто аналогично включению в переменную PATH всех путей ко всем EXE-шникам на всех локальных и сетевых дисках, а это, скажем, не совсем так.
Где система будет искать то самое {имя exe-шника} ? Судя по всему только в пределах текущего диска. Поправьте если я не прав.



Evgenyk   (2002-03-02 16:24) [8]

Спасибо за советы. Но проблема пока не решилась. Дело не в длинных именах, а в тех, которые содержат пробелы. Если путь длинный, но без пробелов, все работает нормально, а если содержит пробелы, то при отладке видно , что путь берется только до первого пробела и обрезается на нем, что при WinExec, что ShellExecute. Что касается GetShortPathName - не совсем понял как он работает, но он же требует в параметрах PChar(Мой путь), а PChar как раз и рубит мой путь на первом пробеле. Может еще какие будут мнения ?



Иван Шихалев   (2002-03-02 16:48) [9]

to Evgenyk

А в кавычки заключать имя пытался? Неужели не работает? Приведи код с кавычками.



Anatoly Podgoretsky   (2002-03-02 17:04) [10]

Андрей Сенченко © (02.03.02 14:23)
Худе, не сможет запустить вообще, такой ассоциации нет



Андрей Сенченко   (2002-03-02 17:12) [11]

Я в каком-то интерпретаторе на базе Си видел подобный синтаксис описания директории для начала поиска по вложенным папкам и подумал, может в 6-м Delphi появилось ... . А 6-ой еще не ставил.



Evgenyk   (2002-03-02 17:14) [12]

В кавычки не заключал. Могу попробовать, но ведь просто с длинными именами (без пробелов) работает нормально. Или кавычки нужны именно при работе с пробелами ?



Андрей Сенченко   (2002-03-02 17:29) [13]

Насколько я понимаю, Ты пытаешься передать некоей программе некий путь в качестве параметра. Так вот в записи вида:
Notepad.exe C:\program files\my proga\readme.txt
Программе Notepad.exe передается 3 ( три ) параметра:
C:\program
files\my
proga\readme.txt

по той простой причине, что начиная с незапамятных ДОС-овских времен разделителем параметров запуска является пробел
Однако в заптси вида
Notepad.exe "C:\program files\my proga\readme.txt"
Содержится только 1 ( один ) параметр, выделенный кавычками.
Вот собственно и все.



Иван Шихалев   (2002-03-02 17:32) [14]

Именно из-за пробелов и нужны кавычки. Как в параметрах, так и в указании имени исполняемого файла, если путь содержит пробелы.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.022 c
1-57430           дикое Кенгуру         2002-02-27 08:38  2002.03.18  
Как можно шифровать текст в Memo ListBox RichEdit перед сохранением на диск. А при чтении расшифровывать. Чтоб никто не читал его. Желательно чтобы было быстро и просто.


7-57533           MAG                   2001-12-16 02:08  2002.03.18  
Привет Мастера !!!


3-57332           sniknik               2002-02-19 11:34  2002.03.18  
От чего зависит кодировка в базах Paradox?


3-57291           Siberia               2002-02-01 18:54  2002.03.18  
Что влияет на размер дистрибутива, созданного Install Shield Express?


4-57554           unKNOWN uSER          2002-01-18 00:19  2002.03.18  
Создание окна и кнопки на нем