У Нострадамуса нашли стих, который описывает апгрейд копмьютера:
"...старая мать новым камнем украсится станет умней и быстрее работать..."
unit UcShell;
interfaceuses
Classes, SysUtils, Windows, ShellApi, Forms;
{---------------------------------------------------------------}function WinExecutableName(const AssociatedFile: string): string;
procedure WinShellOpen(const AssociatedFile: string);
procedure WinShellPrint(const AssociatedFile: string);
procedure WinShellExecute(const Operation, AssociatedFile: string);
{---------------------------------------------------------------}implementationconst
cStrBufSize = 80;
{---------------------------------------------------------------}function WinExecutableName(const AssociatedFile: string): string;
//HINSTANCE FindExecutable(// LPCTSTR lpFile, // указатель на строку с именем файла// LPCTSTR lpDirectory, // указатель на строку с директорией по умолчанию// LPTSTR lpResult // указатель на буфер для строки, возвращаемой выполняемым файлом// );begin
SetLength(result, cStrBufSize); //ucshell
FindExecutable(pchar(AssociatedFile), '', pchar(result));
SetLength(result, strlen(pchar(result)));
end;
//procedure WinShellExecute(const Operation, AssociatedFile: string);
var
a1: string;
begin
a1 := Operation;
if a1 = '' then
a1 := 'open';
ShellExecute(
application.handle //hWnd: HWND
, pchar(a1) //Operation: PChar
, pchar(AssociatedFile) //FileName: PChar
, '' //Parameters: PChar
, '' //Directory: PChar
, SW_SHOWNORMAL //ShowCmd: Integer
);
// GetLastErrorString(0); //ucdialogend;
procedure WinShellPrint(const AssociatedFile: string);
begin
WinShellExecute('print', AssociatedFile);
end;
procedure WinShellOpen(const AssociatedFile: string);
begin
WinShellExecute('open', AssociatedFile);
end;
{-----------------------------------------------------------------}end.
Программный модуль на языке Delphi, который предоставляет несколько функций для работы с оболочкой Windows:
WinExecutableName: Функция принимает файл в связке и возвращает имя исполняемого файла.
WinShellOpen: Процедура открывает файл в связке с помощью ассоциированного приложения.
WinShellPrint: Процедура печатает файл в связке с помощью уместного принтера.
WinShellExecute: Процедура выполняет указанную операцию над файлом в связке, например, открывает или печатает его.
Имплементация использует несколько функций Windows API:
FindExecutable: Функция используется для поиска имени исполняемого файла.
ShellExecute: Функция используется для выполнения указанной операции над файлом.
Разбор каждой процедуры:
WinExecutableName
Функция принимает файл в связке и возвращает его имя исполняемого файла с помощью функции FindExecutable. Функция настраивает буфер для приема результата, вызывает FindExecutable, а затем устанавливает длину буфера равной фактической длине результата.
WinShellOpen
Процедура открывает файл в связке с помощью ассоциированного приложения, вызывая WinShellExecute с операцией 'open'.
WinShellPrint
Процедура печатает файл в связке с помощью уместного принтера, вызывая WinShellExecute с операцией 'print'.
WinShellExecute
Процедура выполняет указанную операцию над файлом в связке. Она принимает два параметра: операцию (например, 'open', 'print') и файл в связке. Если операция не указана, она по умолчанию равна 'open'. Функция вызывает ShellExecute с указанной операцией, именем файла и другими параметрами.
Код также включает несколько констант:
cStrBufSize: Константа определяет размер буфера, используемого в WinExecutableName.
SW_ SHOWNORMAL: Константа используется для указания, как файл должен быть открыт (например, нормально).
Код также включает комментарий о стихе Нострадамуса, который seems to relate to the idea of upgrading or improving something (in this case, a computer). However, it's not clear how this relates to the code itself.
В статье описывается использование Delphi для создания ассоциативного выполнения файлов на Windows, которое позволяет вызывать приложения по их расширению и имену.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.