{
This code displays the application/file "Open With" dialog
Passing the full file path and name as a parameter will cause the
dialog to display the line "Click the program you want to use to open
the file 'filename'".
}uses
ShellApi;
procedure OpenWith(FileName: string);
begin
ShellExecute(Application.Handle, 'open', PChar('rundll32.exe'),
PChar('shell32.dll,OpenAs_RunDLL ' + FileName), nil, SW_SHOWNORMAL);
end;
procedure TForm1.Button1Click(Sender: TObject);
beginif Opendialog1.Execute then
OpenWith(Opendialog1.FileName);
end;
Here's the translation of the Delphi code snippet into Russian:
Клаузы использования
uses
ShellApi;
Модуль ShellApi обеспечивает функции для взаимодействия с оболочкой Windows.
'shell32.dll,OpenAs_RunDLL' - функция оболочки API для вызова (OpenAs_RunDLL)
FileName - добавляется к строке аргументов командной строки
nil: не передаются дополнительные параметры
SW_SHOWNORMAL: стиль окна (в этом случае, нормально отображается)
Процедура TForm1.Button1Click
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
OpenWith(OpenDialog1.FileName);
end;
Эта процедура вызывается при клике кнопки на TForm1. Она использует компонент OpenDialog (OpenDialog1) для позволения пользователю выбрать файл и затем передает имя файла, выбранного пользователем, в процедуру OpenWith.
Замечания
Процедура OpenWith предполагает, что путь к файлу и имя файла передаются как параметр.
Используется исполняемый файл rundll32.exe, чтобы запустить функцию оболочки API. Это старая Windows-утилита, которая была отменена, но все еще работает в многих случаях.
DLL-файл shell32.dll содержит функции оболочки API, включая OpenAs_RunDLL.
Стиль окна SW_SHOWNORMAL вызывает диалоговое окно нормально.
Альтернативное решение
Если вы хотите более современный и надежный способ отображения диалогового окна "Открыть с помощью", вы можете использовать компонент TShellExecute в Delphi. Этот компонент обеспечивает более простой способ выполнения команд оболочки и может обрабатывать многие случаи, которые не могут быть обработаны rundll32.exe.
Пример:
procedure OpenWith(FileName: string);
begin
ShellExecute.Create(nil).Execute('open', FileName, nil);
end;
Код создает новый экземпляр компонента TShellExecute и вызывает метод Execute, чтобы отобразить диалоговое окно "Открыть с помощью". Параметры:
'open': глагол для использования (в этом случае, "открыть")
FileName: путь к файлу и имя файла для открытия
nil: не передаются дополнительные параметры
Код более компактен и проще для понимания, чем оригинальный код-снippet. Однако он все еще использует старую Windows-утилиту (rundll32.exe), поэтому вам может быть желательно использовать более современное решение, если это возможно.
В статье описывается код на языке Delphi, который позволяет открыть диалог "Открыть с помощью" для указанного файла, используя функцию ShellExecute и библиотеку ShellApi.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.