Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
33
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

Лекция № 25 Тема: Взаимодействие приложения с внешними программами

План:

1. Запуск из приложения внешней программы

1.1. Запуск внешней программы функцией WinExec

1.2.Функция ShellExecute

2. Управление окнами внешних программ

2.1. Определение дескриптора окна приложения

2.2. Некоторые функции API Windows для управления окнами

3. Создание динамически подключаемых библиотек (DLL)

Взаимодействие приложения с внешними программами может происходить различными способами. Это может быть:

  • непосредственный запуск внешней программы из вашего приложения

  • запуск внешней программы, связанной с некоторым документом

  • обмен сообщениями с другими программами

  • создание динамически подключаемых библиотек (DLL)

  • технология OLE — внедрения и связывания документов, подготовленных внешними программами, в ваше приложение

  • управление внешними программами как серверами

динамический обмен данными между приложениями — DDE

1. Начнем с рассмотрения первой из этих возможностей — запуска из приложения внешней программы. Такая необходимость может возникать в ряде случаев. Например, ваша задача может заключаться в создании с помощью Delphi пользовательского интерфейса к какой-нибудь ранее разработанной для MS-DOS или Windows программе, которая представлена только своим выполняемым модулем. Исходный текст программы может быть при этом вам не известен или он может быть написан на языке, отличающемся от Object Pascal. Тогда естественным способом решения этой задачи является запуск выполняемого модуля программы из вашего приложения — интерфейса. Другой пример использования внешней программы — это желание предоставить пользователю, работающему с вашей программой, какие-то дополнительные возможности. Например, вам может захотеться дать пользователю возможность вызвать из вашего приложения программу Windows «Калькулятор», чтобы просчитать какие-то данные, которые он получил в процессе работы с приложением, и принять решение о своих дальнейших действиях.

Запуск внешней программы из приложения Delphi можно сделать несколькими способами.

1.1. Запуск внешней программы функцией WinExec

Самый простой способ запустить какую-то программу из своего приложения — использовать функцию WinExec. Эта функция может работать в любых версиях Windows и выполнять любые файлы: приложения Windows, MS-DOS, файлы PIF и т.п.

Функция WinExec определяется следующим образом:

function WinExec(CmdLine: PChar; CmdShow: integer): integer;

Параметр CmdLine является указателем на строку с нулевым символом в конце, содержащую имя выполняемого файла и, если необходимо, параметры командной строки. Если имя файла указано без пути, то Windows будет искать в каталогах выполняемый файл в следующей последовательности:

1. Каталог, из которого загружено приложение

2. Текущий каталог

3. Системный каталог Windows, возвращаемый функцией GetSystemDirectory

4. Каталог Windows, возвращаемый функцией GetWindowsDirectory

5. Список каталогов из переменной окружения PATH

Параметр CmdShow определяет форму представления окна запускаемого приложения Windows. Достоинством функции WinExec является ее совместимость с ранними версиями Windows. Собственно для этого она и сохраняется в Win32, хотя для Win32 рекомендуется пользоваться функцией CreateProcess (об этой функции см. встроенную в Delphi справку).

Более широкие возможности по сравнению с функцией WinExec предоставляет функция ShellExecute. Она может не только выполнять заданное приложение, но и открывать документ и печатать его.

1.2.Функция ShellExecute определена следующим образом:

function ShellExecute(Wnd:HWnd; Operation, FileName, Parameters, Directory:PChar; ShowCmd:Integer): THandle;

Параметр Wnd является дескриптором родительского окна, в котором отображаются сообщения запускаемого приложения. Обычно в качестве него можно просто указать Handle.

Параметр Operation указывает на строку с нулевым символом в конце, которая определяет выполняемую операцию. Эта строка может содержать текст «open» (открыть) или «print» (напечатать). Для Windows 95/98 и NT определено еще одно значение: «explore» (исследовать) — открыть папку. Если параметр Operation равен nil, то по умолчанию выполняется операция «open».

Параметр FileName указывает на строку с нулевым символом в конце, которая определяет имя открываемого файла или имя открываемой папки.

Параметр Parameters указывает на строку с нулевым символом в конце, которая определяет передаваемые в приложение параметры, если FileName определяет выполняемый файл. Если FileName указывает на строку, определяющую открываемый документ или папку, то этот параметр задается равным nil.

Параметр Directory указывает на строку с нулевым символом в конце, которая определяет каталог по умолчанию.

Параметр ShowCmd определяет режим открытия указанного файла.

Параметры Operation, FileName, Parameters и Directory являются строками с нулевым символом в конце, т.е. строками типа PChar.

Функция ShellExecute автоматически отыскивает приложение, связанное с типом открываемого документа, и запускает его. Но иногда вам может захотеться самому вызвать явным образом приложение, связанное с каким-то документом, например, чтобы передать ему какие-то дополнительные параметры. Помочь в этом может функция FindExecutable, которая возвращает имя и путь приложения, связанного с указанным файлом. Использование этой функции требует включения в оператор uses модуля ShellAPI.

Функция FindExecutable определена следующим образом:

function FindExecutable(FileName, Directory, Buffer: PChar): THandle;

Она позволяет получить имя выполняемого файла .ехе, связанного с файлом, указанным параметром FileName. Параметр Directory определяет каталог по умолчанию. Оба параметра являются указателями на строки с нулевым символом в конце. Параметр Buffer является указателем на буфер в виде строки с нулевым символом в конце, в который функция заносит имя и путь приложения, связанного с файлом FileName.