Главная страница
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.02 c
3-7356
ray_wagner
2003-06-10 19:36
2003.07.03
Отбор записей в Table


7-7740
dolmat
2003-04-18 15:11
2003.07.03
как получить список всех запущенных приложений?


1-7437
Сушняк
2003-06-23 13:36
2003.07.03
String в записи и связанные с этим проблемы


1-7426
johny
2003-06-23 11:47
2003.07.03
Подскажите как пользоваться TreeView


14-7641
vidiv
2003-06-16 09:33
2003.07.03
Объясните мне этот факт связанный с памятью