Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.01 c
2-1135085285
Я Виктор
2005-12-20 16:28
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 файлами


4-1130909108
Muchacho
2005-11-02 08:25
2006.01.08
взять текст из чужого ListBox-a


4-1130840334
BFG9k
2005-11-01 13:18
2006.01.08
Передача настроек принтера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский