Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

ShellExecute

CuBook3.835

Функция ShellExecute может не только выполнять заданное приложение, но и открывать документ и печатать его. Под термином «открыть файл документа» понимается выполнение связанного с ним приложения и загрузка в него этого документа. Например, обычно с документами, имеющими расширение .doc, связан Word. В этом случае открыть файл, например, с именем file.doc означает запустить Word и передать ему в качестве параметра имя файла file.doc. Кроме описанных возможностей функция ShellExecute позволяет открыть указанную папку. Это означает, что будет запущена программа «Проводник» с открытой указанной папкой.
 
Для использования функции ShellExecute в модуль надо добавить директиву препроцессора подключающую модуль ShellAPI, в котором описана функция:
#include "ShellAPI.h"
Функция ShellExecute инкапсулирует одноименную функцию API Windows. Параметр Wnd является дескриптором родительского окна, в котором отображаются сообщения запускаемого приложения. Обычно в качестве него можно просто указать Handle.
 
Параметр Operation указывает на строку с нулевым символом в конце, которая определяет выполняемую операцию. Эта строка может содержать текст «open» (открыть) или «print» (напечатать). Для 32-разрядных Windows определено еще одно значение: «explore» (исследовать) - открыть папку программой Windows «Проводник». Если параметр Operation равен NULL, то по умолчанию выполняется операция «open».
 
Параметр FileName указывает на строку с нулевым символом в конце, которая определяет имя открываемого файла или имя открываемой папки.
Параметр Parameters указывает на строку с нулевым символом в конце, которая определяет передаваемые в приложение параметры, если FileName определяет выполняемый файл. Если FileName указывает на строку, определяющую открываемый документ или папку, то этот параметр задается равным NULL.
 
Параметр Directory указывает на строку с нулевым символом в конце, которая определяет каталог по умолчанию.
Параметр ShowCmd определяет режим открытия указанного файла. Этот параметр может иметь множество различных значений. Обычно, как и для функции WinExec, используется значение SW_RESTORE, при котором окно запускаемого приложения активизируется и отображается на экране. Если это окно в данный момент свернуто или развернуто, то оно восстанавливается до своих первоначальных размеров и отображается в первоначальной позиции. Для приложений не Windows, для файлов PIF и т.д. состояние окна определяет само приложение.
 
Пример №1

Пусть вы хотите открыть файл документа с именем «file.doc», т.е. запустить Word (обычно именно он связан с файлами .doc), загрузив в него указанный файл:
ShellExecute(Handle,NULL,"file.doc",NULL,NULL,SW_RESTORE);
 
Пример №2

Если вы хотите не открыть, а напечатать документ, записывается аналогичный оператор, но изменяется значение параметра Operation:
ShellExecute(Handle,"print","file.doc",NULL,NULL,SW_RESTORE);
Выполнение этого оператора будет протекать следующим образом. Запустится Word, связанный с файлами .doc, в него загрузится файл file.doc, затем из Word запустится печать с атрибутами по умолчанию, после чего файл file.doc выгрузится из Word.
 
Пример №3

Оператор открывает приложение Windows «Калькулятор»:
ShellExecute (Handle, "open", "Calc", NULL,NULL, SW_RESTORE);
 
Пример №4

Открывает папку c:\Program Files\Borland:
ShellExecute(Handle, "open", "c:\\Program Files\\Borland", NULL, NULL,SW_RESTORE);
 
Функция ShellExecute автоматически отыскивает приложение, связанное с типом открываемого документа, и запускает его. Но иногда вам может захотеться самому вызвать явным образом приложение, связанное с каким-то документом, например, чтобы передать ему какие-то дополнительные параметры. Помочь в этом может функция FindExecutable, которая возвращает имя и путь приложения, связанного с указанным файлом. Использование этой функции, как и предыдущих, требует включения в модуль ссылки на ShellAPI.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

  Комментарии

0 Юрий 09.08.2016 20:56 #12
Цитирую Валерьян:
Юрий, большое спасибо!

Рад был помочь ;-)
+2 Валерьян 09.08.2016 19:44 #11
Цитирую Юрий:
Цитирую Валерьян:
Реализовал совет Юрия - все разделы Справки вызывают Введение . В чем моя ошибка?

Ну тогда вариант №2 - с помощью HtmlHelp()
Подключаем к проекту библиотеки htmlhelp.h и htmlhelp.lib, а потом вызываем функцию:
HtmlHelp(Application->Handle,"html.chm::/index.htm", HH_DISPLAY_TOPIC, 0);

Юрий, большое спасибо!
0 Юрий 09.08.2016 17:20 #10
Цитирую Валерьян:
Реализовал совет Юрия - все разделы Справки вызывают Введение . В чем моя ошибка?

Ну тогда вариант №2 - с помощью HtmlHelp()
Подключаем к проекту библиотеки htmlhelp.h и htmlhelp.lib, а потом вызываем функцию:
HtmlHelp(Application->Handle,"html.chm::/index.htm", HH_DISPLAY_TOPIC, 0);
0 Валерьян 09.08.2016 16:07 #9
Цитирую Юрий:
Цитирую Валерьян:
Справка *.chm вызывается нормально.А как вызвать конкретный раздел этой справки? Спасибо.

ShellExecute(Handle, "open", "HTML.chm", "index.html", NULL, SW_SHOWNORMAL);
где index.html - раздел справки

Реализовал совет Юрия - все разделы Справки вызывают Введение . В чем моя ошибка?
0 Юрий 08.08.2016 23:59 #8
Цитирую Валерьян:
Справка *.chm вызывается нормально.А как вызвать конкретный раздел этой справки? Спасибо.

ShellExecute(Handle, "open", "HTML.chm", "index.html", NULL, SW_SHOWNORMAL);
где index.html - раздел справки
0 Валерьян 08.08.2016 16:57 #7
Справка *.chm вызывается нормально.А как вызвать конкретный раздел этой справки? Спасибо.
0 Алексей 29.04.2015 11:00 #6
Диалог здесь ни при чем. Я же задал вопрос в тему о ShellExecute. Мне надо передать ей какие-то параметры, чтобы распечатать на нужный принтер. Об этом и вопрос - если второй параметр процедуры - "print", то как ей передать принтер, на который надо печатать? При этом не задействуя пользователя.

Цитата:
Можно программно указать какой принтер будет по умолчанию или через компонент PrinterSetupDialog. После вызывать ShellExecute().
+1 Алексей 29.04.2015 06:16 #5
Подскажите, а можно при печати как-то указать принтер, на который надо печатать? Или печать возможна только с параметрами по умолчанию...

Цитата:
Есть компонент PrintDialog, который позволяет задать принтер для печати.
0 alex 26.04.2015 14:11 #4
Отличная статья, спасибо - очень помог, пишу курсовой проект и как раз не хватало простой и понятной статьи)
0 Влад 14.01.2015 13:38 #3
Не подскажите параметр Readonly для txt файла как выглядеть будет?

Цитата:
ShellExecute позволяет запустить программу или файл, а так:
ReadOnly=true - только чтение.
ReadOnly=false - чтение и запись.

Добавить комментарий