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

Вниз

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

 
Alex000   (2003-04-20 23:51) [0]

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


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

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


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

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


 
SergeyKatruk ©   (2003-04-21 12:01) [3]


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


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

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


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

Естественно - просто надо использовать 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);
{


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

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

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-23 00:39) [7]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
1-7506
Bel
2003-06-20 11:04
2003.07.03
Где реализация TStrings.Delete?


1-7468
ТОлег
2003-06-20 17:01
2003.07.03
Работа с TStringGrid


14-7711
Aga
2003-06-17 18:39
2003.07.03
Проба


14-7716
Ann
2003-06-17 10:38
2003.07.03
Падеж


9-7281
Кен
2003-01-20 01:33
2003.07.03
В GLscene screensaver глючит ! С ним в комплекте идёт демка, чтоб