Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Запуск приложений из программы   Найти похожие ветки 

 
Энди   (2005-12-17 23:01) [0]

Мастера! Доброе время суток.

Вопрос такой - я хочу по клику на буттон запускать приложение (не суть важно какое, например winword.exe). С этим проблем нет - юзаю функцию winexec, задаю полное имя файла и банзай.

Но как быть с полным путем к приложению - ведь на разных машинах оно может находится в разных каталогах, а соответсвенно, путь к одному и тому же файлу будет разный. То есть мне нужно организовать в некотором роде поиск файла, определить его полный путь программно и уже потом засовывать в winexec. Подскажите как мне это сделать. Спасибо.
Примечание - приложение это не запущено и пользоваться такими функциями как ExtractFilePath не представляется возможным.


 
palva ©   (2005-12-17 23:25) [1]

А разве система не найдет исполнительный файл, если директория, в которой он лежит, имеется в пути PATH? Или ваша файл спрятан в какой-то особой директории? Вот следующий код работает, хотя я не указываю пути и даже расширения исполнительного файла.

{$APPTYPE CONSOLE}
uses Windows;
begin
 WinExec("notepad", SW_SHOW);
end.


 
kami ©   (2005-12-17 23:52) [2]

palva ©   (17.12.05 23:25) [1]
Этот код работает только для стандартных программ Windows и (далеко не для всех) программ, уже установленных в системе.


 
palva ©   (2005-12-18 00:32) [3]

kami ©   (17.12.05 23:52) [2]
Разве? Ну тогда есть API-функция SearchPath, первым параметром которой можно передать последовательность директорий, в которых нужно осуществлять поиск. А если Nil, то ищет в текущей директории и проходит по PATH. Например как здесь.

{$APPTYPE CONSOLE}
uses Windows;
var
 s: String;
 p: PChar;
 l: DWord;
begin
 SetLength(s, 200);
 l := SearchPath(Nil, "Notepad", ".exe", 200, PChar(s), p);
 If (l>0) And (l<200) Then SetLength(s, l);
 WriteLn(s); // C:\WINNT\system32\Notepad.exe
end.


 
Alexandr Bydantcev ©   (2005-12-18 01:02) [4]

Тебе любое приложение нужно?
посылаю модуль запуска приложений. Если не подходит, пиши на мыло.


 
alex-drob ©   (2005-12-18 01:02) [5]

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


Т.е. нужно будет перебрать все каталоги на винчестере чтобы найти путь к файлу. А почему бы в таком случае не воспользоваться просто поиском?


> Энди   (17.12.05 23:01)  

Я думаю можно к некоторым программам брать Path в реестре. Например для WinWord в разделе HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Word\Options брать значения PROGRAMDIR.
Или чтобы пользователь, при первом запуске программы указал пути к файлам, и сохранить их.


 
Alexandr Bydantcev ©   (2005-12-18 01:10) [6]

Такой путь не потянет...... В реестре моржет быть и office 12.


 
Alexandr Bydantcev ©   (2005-12-18 01:16) [7]

Проще, пиши на майл - будет результат.


 
palva ©   (2005-12-18 01:17) [8]

kami ©   (17.12.05 23:52) [2]
Я проверил код из [1]. Он работает для любых программ находящихся в пути.
Точнее сказано в справке по WinExec

If the name of the executable file ... does not contain a directory path, the system searches for the executable file in this sequence:
* The directory from which the application loaded.
* The current directory.
* The Windows system directory. The GetSystemDirectory function retrieves the path of this directory.
* The Windows directory. The GetWindowsDirectory function retrieves the path of this directory.
* The directories listed in the PATH environment variable.

Про системные или специальным образом установленные файлы  в справке не говорится.


 
Alexandr Bydantcev ©   (2005-12-18 01:25) [9]

Как минимум в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office можно определить установленный офис.


 
alex-drob ©   (2005-12-18 01:45) [10]


> Alexandr Bydantcev ©   (18.12.05 01:25) [9]

Там же можно и путь определить. Но вопрос не конкретно по winword. В принципе с реестром подходит не для всех прог, некоторые программы не записывают в реестр патч или вобще не чего не записывают.


 
Alexandr Bydantcev ©   (2005-12-18 16:22) [11]

2 alex-drob
C сим знаком не понаслышке, но решить кардинально не смог. Есть программы, не оставляющие следов вообще - как с ними быть???? Если они хранят все свои данные в своем же каталоге....


 
alex-drob ©   (2005-12-18 16:30) [12]

Всётаки почему бы не вывести форму при первом запуске программы, и пусть пользователь, кнопочками "Обзор", укажет пути к запускным файлам. Потом просто сохранить пути, и пользоваться ими.


 
Alexandr Bydantcev ©   (2005-12-19 05:14) [13]

Есть такие пользователи, что....... В общем, не смогут однозначно, вот и требуются программы, которые бы все делали самостоятельно, и даже туалетную бумажку мяли :)))
В целом это выглядит так: Форма, на ней большая кнопка: "Сделать всю мою работу". :)


 
alex-drob ©   (2005-12-19 17:10) [14]

Да, но если даже искать запускные файлы через поиск, то всё равно могут возникнуть проблемы. Например если имя файла одной программы совпадёт с какой нибудь другой, запускные файлы многих игр называються Game.exe, также могут совпасть и названия других программ.


 
alex-drob ©   (2005-12-19 17:10) [15]

Да, но если даже искать запускные файлы через поиск, то всё равно могут возникнуть проблемы. Например если имя файла одной программы совпадёт с какой нибудь другой, запускные файлы многих игр называються Game.exe, также могут совпасть и названия других программ.



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
10-1111148607
va
2005-03-18 15:23
2006.01.08
Регистрация СОМ-сервера


14-1134403412
Igorek
2005-12-12 19:03
2006.01.08
А у Вас в стране политики проводят Интернет чаты?


14-1134409257
Энди
2005-12-12 20:40
2006.01.08
Проблема спящего брадобрея


2-1134918079
Out84
2005-12-18 18:01
2006.01.08
Работа с ini файлами


2-1135237508
kyn66
2005-12-22 10:45
2006.01.08
RoundTo работает неверно?