Форум: "Начинающим";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизЗапуск приложений из программы Найти похожие ветки
← →
Энди (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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c