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