Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.46 MB
Время: 0.009 c
14-7692
Knight
2003-06-14 09:59
2003.07.03
Как Алиса Селезнёва перемещалась во времени?


3-7316
anton2v
2003-06-09 16:31
2003.07.03
Процесс не может получить доступ к файлу


6-7582
alt7
2003-04-29 17:04
2003.07.03
Indy и runtime


8-7551
Oxy
2003-03-18 10:00
2003.07.03
Как проиграть ноту


1-7396
Anonimus
2003-06-22 15:28
2003.07.03
TStream





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский