Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Запуск внешней программы функцией 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. Чаще всего используется значение SW_RESTORE, при котором окно запускаемого приложения активизируется и отображается на экране. При успешном выполнении запуска приложения функция WinExec возвращает значение, большее 31. При неудаче могут возвращаться значения, приведенные в таблице 5.4. Таблица 5.4. Коды ошибок завершения функции WinExec
Достоинством функции WinExec является ее совместимость с ранними версиями Windows. Для этого она и сохраняется в Win32, хотя для Win32 рекомендуется пользоваться функцией CreateProcess. 5.2.3. Запуск внешней программы и открытие документа функцией ShellExecute Функция ShellExecute может не только выполнять заданное приложение, но и открывать документ и печатать его. Под термином «открыть файл документа» понимается выполнение связанного с ним приложения и загрузка в него этого документа. Например, обычно с документами, имеющими расширение.doc, связан Word. В этом случае открыть файл, например, с именем file.doc означает запустить Word и передать ему в качестве параметра имя файла file.doc. Кроме описанных возможностей функция ShellExecute позволяет открыть указанную папку. Это означает, что будет запущена программа «Проводник» с открытой указанной папкой.
Для использования функции ShellExecute в операторе uses надо добавить модуль ShellAPI. Автоматически Delphi не включает этот модуль в программу. Функция 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 определяет режим открытия указанного файла. Этот параметр может иметь множество различных значений. Обычно, как и для функции WinExec, используется значение SW_RESTORE, при котором окно запускаемого приложения активизируется и отображается на экране. При успешном выполнении функция ShellExecute возвращает целое значение, большее 32. Значение меньшее или равное 32 указывает на ошибку. Значения эти те же, что и для функции WinExec. Примеры использования функции ShellExecute. 1. Следующий оператор открывает файл документа с именем file.doc, т.е. запускает WinWord (обычно он связан с файлами.doc), загрузив в него указанный файл: ShellExecute (Handle, nil, ‘file.doc’, nil, nil, SW_RESTORE); 2. Для вывода на печать документа, записывается аналогичный оператор, но изменяется значение параметра Operation: ShellExecute (Handle, ‘print’ ,’ file.doc ‘, nil, nil, SW_RESTORE);
Выполнение этого оператора будет протекать следующим образом. Запустится WinWord, связанный с файлами.doc, в него загрузится файл file.doc, затем из Winword запустится печать с атрибутами по умолчанию, после чего файл file.doc выгрузится из Winword. 3. Оператор открывает приложение Windows «Калькулятор»: ShellExecute (Handle, ‘open’, ‘Calc’, nil, nil, SW_RESTORE); 4. Следующий пример открывает папку c:\Program Files\Borland: ShellExecute (Handle, ‘explore’, ‘c:\Program Files\Borland', nil, nil, SW_RESTORE); Функция ShellExecute автоматически отыскивает приложение, связанное с типом открываемого документа, и запускает его. Но иногда требуется вызвать явным образом приложение, связанное с каким-то документом, например, чтобы передать ему какие-то дополнительные параметры. Помочь в этом может функция FindExecutable, которая возвращает имя и путь приложения, связанного с указанным файлом. Использование этой функции требует включения в оператор uses модуля ShellAPI. Функция FindExecutable определена следующим образом: function FindExecutable (FileName, Directory, Buffer: PChar): THandle; Она позволяет получить имя выполняемого exe- файла, связанного с файлом, указанным параметром FileName. Параметр Directory определяет каталог по умолчанию. Оба параметра являются указателями на строки с нулевым символом в конце. Параметр Buffer является указателем на буфер в виде строки с нулевым символом в конце, в который функция заносит имя и путь приложения, связанного с файлом FileName. При успешном завершении функция FindExecutable возвращает значение, большее 32. Если возвращено меньшее значение, это свидетельствует об ошибке. Возможные значения ошибок те же, что и для приведенных ранее функций. Пример применения функции FindExecutable. Операторы var APchar:array[0..254] of char; FindExecutable (‘Exec.doc’, nil, APchar); приведут к тому, что в массив APchar будет занесено имя приложения, связанного с файлом типа doc, например: С:\MSOFFICE\WINWORD\WINWORD.ЕХЕ Создание потока Для создания потока используется функция CreateThread: function CreateThread (lpThreadAttributes: Pointer; dwStackSize: DWORD; lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; Функция возвращает дескриптор потока. Входные параметры данной функции перечислены в таблице 5.5.
Таблица 5.5 Параметры функции CreateThread
Завершение процесса Процесс завершается, когда один из его потоков вызывает процедуру ExitProcess: procedure ExitProcess(uExitCode: UINT); uExitCode – в эту переменную заносится код завершения процесса. Если за вызовом этой процедуры в программе присутствует какой-либо код, он никогда не будет выполнен.
Вызов функции TerminateProcess, также завершает процесс. Данная функция имеет следующий вид: function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; где hProcess – дескриптор завершаемого процесса uExitCode – в данной переменной возвращается код завершения процесса. Если функция TerminateProcess успешно выполнена, она возвращает ненулевое значение (true). Если произошла ошибка – возвращается 0 (false). Главное отличие функции TerminateProcess от функции ExitProcess в том, что TerminateProcess может вызвать любой поток, любого процесса для завершения другого процесса. Завершение потока Поток можно завершить принудительно, вызвав процедуру ExitThread: procedure ExitThread(dwExitCode: DWORD); где в переменную dwExitCode заносится код завершения потока.
Завершить поток можно также вызвав функцию TerminateThread: function TerminateThread(hThread: THandle; dwExitCode: DWORD): BOOL; где hThread - дескриптор завершаемого потока dwExitCode - в данной переменной возвращается код завершения потока. Если функция TerminateThread успешно выполнена, она возвращает ненулевое значение (true). Если произошла ошибка – возвращается 0 (false). В отличие от ExitThread, которая завершает поток, вызывающий данную процедуру, функция TerminateThread завершает любой поток, дескриптор которого указан в параметре hThread.
|
||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 912; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.114.38 (0.012 с.) |