Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск программы [D6, WinXP]


Alex000 ©   (2003-04-20 23:51:00) 

Господа! Подскажите как можно указать в программе каким приложением открывать тот или иной файл. Например, если на компе 2 версии одной программы, то можно ли открывать файл одной из них по своему усмотрению? При этом не меняя системного реестра?


Alex000   (2003-04-23 00:39:00) [1]

>Севостьянов Игорь. Спасибо за код. Похоже, это то, что надо.


Севостьянов Игорь   (2003-04-22 10:54:00) [2]

Так будет нагляднее:

function ExecAndWait(const FileName, Params: ShortString;
const WinState: Word): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
CmdLine: PChar;
R: DWORD;
begin
CmdLine := PChar(Filename + #32 + Params + #32);
FillChar(SI, SizeOf(SI), 0);
with SI do
begin
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, CmdLine, nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
{


Севостьянов Игорь   (2003-04-22 10:53:00) [3]

Естественно - просто надо использовать CreateProcess
Отвечаю сразу как использовать:

function ExecAndWait(const FileName, Params: ShortString;
const WinState: Word): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
CmdLine: PChar;
R: DWORD;
begin
CmdLine := PChar(Filename + #32 + Params + #32);
FillChar(SI, SizeOf(SI), 0);
with SI do
begin
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, CmdLine, nil, nil, False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
{


Alex000   (2003-04-21 23:03:00) [4]

Поясню на примере. Допустим, у меня установлены 2 версии какой-либо программы, например, Word (например, XP и 97). Я открываю из своего приложения с помощью SheellExecute файл с расширением doc. По умолчанию его откроет последняя установленная версия Worda (XP). А мне надо, чтобы открыла вторая раньше установленная версия 97. Есть ли способ указать в ShellExecute или еще как-нибудь именно программу, которой открывать файл?


SergeyKatruk   (2003-04-21 12:01:00) [5]


Кстати, народ, пожалуйста , подскажите API для вызова диалога
"Открыть с помощью", или он создаётся из зарегистированных расширений, если ShellExecute заканчивается неудачей ???


ak111   (2003-04-21 09:44:00) [6]

1. отвяжи вообще это расширение и каждый раз используй диалог "открыть с помощью..."
2. напиши программу со своим диалогом и привяжи расширение к ней


Rocker   (2003-04-21 08:15:00) [7]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо