Когда нам нужно установить для useshellexecute значение true?

Return value

Type: HINSTANCE

If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an INT_PTR and compared to either 32 or the following error codes below.

Return code Description
The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND
The specified file was not found.
ERROR_PATH_NOT_FOUND
The specified path was not found.
ERROR_BAD_FORMAT
The .exe file is invalid (non-Win32 .exe or error in .exe image).
SE_ERR_ACCESSDENIED
The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE
The file name association is incomplete or invalid.
SE_ERR_DDEBUSY
The DDE transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL
The DDE transaction failed.
SE_ERR_DDETIMEOUT
The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND
The specified DLL was not found.
SE_ERR_FNF
The specified file was not found.
SE_ERR_NOASSOC
There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM
There was not enough memory to complete the operation.
SE_ERR_PNF
The specified path was not found.
SE_ERR_SHARE
A sharing violation occurred.

Call GetLastError for extended error information.

Using ShellExecute and ShellExecuteEx

To use ShellExecute or ShellExecuteEx, your application must specify the file or folder object that is to be acted on, and a verb that specifies the operation. For ShellExecute, assign these values to the appropriate parameters. For ShellExecuteEx, fill in the appropriate members of a SHELLEXECUTEINFO structure. There are also several other members or parameters that can be used to fine-tune the behavior of the two functions.

File and folder objects can be part of the file system or virtual objects, and they can be identified by either paths or pointers to item identifier lists (PIDLs).

Object Verbs

The verbs available for an object are essentially the items that you find on an object’s shortcut menu. To find which verbs are available, look in the registry under

HKEY_CLASSES_ROOT\CLSID\{object_clsid}\Shell\verb

where object_clsid is the class identifier (CLSID) of the object, and verb is the name of the available verb. The verb\command subkey contains the data indicating what happens when that verb is invoked.

To find out which verbs are available for predefined Shell objects, look in the registry under

HKEY_CLASSES_ROOT\object_name\shell\verb

where object_name is the name of the predefined Shell object. Again, the verb\command subkey contains the data indicating what happens when that verb is invoked.

Commonly available verbs include:

Verb Description
edit Launches an editor and opens the document for editing.
find Initiates a search starting from the specified directory.
open Launches an application. If this file is not an executable file, its associated application is launched.
print Prints the document file.
properties Displays the object’s properties.
runas Launches an application as Administrator. User Account Control (UAC) will prompt the user for consent to run the application elevated or enter the credentials of an administrator account used to run the application.

Each verb corresponds to the command that would be used to launch the application from a console window. The open verb is a good example, as it is commonly supported. For .exe files, open simply launches the application. However, it is more commonly used to launch an application that operates on a particular file. For instance, .txt files can be opened by Microsoft WordPad. The open verb for a .txt file would thus correspond to something like the following command:

When you use ShellExecute or ShellExecuteEx to open a .txt file, Wordpad.exe is launched with the specified file as its argument. Some commands can have additional arguments, such as flags, that can be added as needed to launch the application properly. For further discussion of shortcut menus and verbs, see Extending Shortcut Menus.

In general, trying to determine the list of available verbs for a particular file is somewhat complicated. In many cases, you can simply set the lpVerb parameter to NULL, which invokes the default command for the file type. This procedure is usually equivalent to setting lpVerb to «open», but some file types may have a different default command. For further information, see Extending Shortcut Menus and the ShellExecuteEx reference documentation.

Using ShellExecuteEx to Provide Activation Services from a Site

A site chain’s services can control many behaviors of item activation. As of Windows 8, you can provide a pointer to the site chain to ShellExecuteEx to enable these behaviors. To provide the site to ShellExecuteEx:

  • Specify the SEE_MASK_FLAG_HINST_IS_SITE flag in the fMask member of SHELLEXECUTEINFO.
  • Provide the IUnknown in the hInstApp member of SHELLEXECUTEINFO.

Using ShellExecute to Launch the Search Dialog Box

When a user right-clicks a folder icon in Windows Explorer, one of the menu items is «Search». If they select that item, the Shell launches its Search utility. This utility displays a dialog box that can be used to search files for a specified text string. An application can programmatically launch the Search utility for a directory by calling ShellExecute, with «find» as the lpVerb parameter, and the directory path as the lpFile parameter. For instance, the following line of code launches the Search utility for the c:\MyPrograms directory.

Remarks

Because ShellExecute can delegate execution to Shell extensions (data sources, context menu handlers, verb implementations) that are activated using Component Object Model (COM), COM should be initialized before ShellExecute is called. Some Shell extensions require the COM single-threaded apartment (STA) type. In that case, COM should be initialized as shown here:

There are certainly instances where ShellExecute does not use one of these types of Shell extension and those instances would not require COM to be initialized at all. Nonetheless, it is good practice to always initialize COM before using this function.

This method allows you to execute any commands in a folder’s shortcut menu or stored in the registry.

To open a folder, use either of the following calls:

or

To explore a folder, use the following call:

To launch the Shell’s Find utility for a directory, use the following call.

If lpOperation is NULL, the function opens the file specified by lpFile. If lpOperation is «open» or «explore», the function attempts to open or explore the folder.

To obtain information about the application that is launched as a result of calling ShellExecute, use ShellExecuteEx.

Note  The Launch folder windows in a separate process setting in Folder Options affects ShellExecute. If that option is disabled (the default setting), ShellExecute uses an open Explorer window rather than launch a new one. If no Explorer window is open, ShellExecute launches a new one.
 

Note

The shellapi.h header defines ShellExecute as an alias which automatically selects the ANSI or Unicode version of this function based on the definition of the UNICODE preprocessor constant. Mixing usage of the encoding-neutral alias with code that not encoding-neutral can lead to mismatches that result in compilation or runtime errors. For more information, see Conventions for Function Prototypes.

Parameters

Type: HWND

A handle to the parent window used for displaying a UI or error messages. This value can be NULL if the operation is not associated with a window.

Type: LPCTSTR

A pointer to a null-terminated string, referred to in this case as a verb, that specifies the action to be performed. The set of available verbs depends on the particular file or folder. Generally, the actions available from an object’s shortcut menu are available verbs. The following verbs are commonly used:

runas

Launches an application as Administrator. User Account Control (UAC) will prompt the user for consent to run the application elevated or enter the credentials of an administrator account used to run the application.

NULL

The default verb is used, if available. If not, the «open» verb is used. If neither verb is available, the system uses the first verb listed in the registry.

Type: LPCTSTR

A pointer to a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a Shell namespace object, pass the fully qualified parse name. Note that not all verbs are supported on all objects. For example, not all document types support the «print» verb. If a relative path is used for the lpDirectory parameter do not use a relative path for lpFile.

Type: LPCTSTR

If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

Type: LPCTSTR

A pointer to a null-terminated string that specifies the default (working) directory for the action. If this value is NULL, the current working directory is used. If a relative path is provided at lpFile, do not use a relative path for lpDirectory.

Type: INT

The flags that specify how an application is to be displayed when it is opened. If lpFile specifies a document file, the flag is simply passed to the associated application. It is up to the application to decide how to handle it. It can be any of the values that can be specified in the nCmdShow parameter for the ShowWindow function.

Использование ShellExecute и ShellExecuteEx

Чтобы использовать ShellExecute или ShellExecuteEx, приложение должно указать объект файла или папки, к которому будет применена операция, и команду , указывающую операцию. Для ShellExecute присвойте эти значения соответствующим параметрам. Для ShellExecuteEx заполните соответствующие элементы структуры шеллексекутеинфо . Существует также несколько других элементов или параметров, которые можно использовать для точной настройки поведения двух функций.

Объекты файлов и папок могут быть частью файловой системы или виртуальных объектов, и их можно идентифицировать по путям или указателям на списки идентификаторов элементов (PIDL).

Команды объекта

Команды, доступные для объекта, по сути являются элементами, которые находятся в контекстном меню объекта. Чтобы узнать, какие команды доступны, просмотрите реестр в разделе

HKey _ _Корень классов \ CLSID \ {Object _ CLSID} \ \ команда оболочки

где _ CLSID объекта — это идентификатор класса (CLSID) объекта, а глагол — имя доступной команды. Подключ \ команды verb содержит данные, указывающие, что происходит при вызове этой команды.

Чтобы узнать, какие команды доступны для предопределенных объектов оболочки, просмотрите раздел реестра в разделе

HKey _ Классы _ корневого \ объекта _ имя класса \ \ команда оболочки

где _ имя объекта — это имя предопределенного объекта оболочки. Опять же, \ подраздел команды verb содержит данные, указывающие, что происходит при вызове этой команды.

Часто доступные команды включают:

Команда Описание
изменение; Запускает редактор и открывает документ для редактирования.
поиск Инициирует поиск, начиная с указанного каталога.
open Запускает приложение. Если этот файл не является исполняемым файлом, запускается связанное с ним приложение.
print Выводит файл документа.
properties Отображает свойства объекта.
запуск от имени Запускает приложение от имени администратора. Функция контроля учетных записей (UAC) запросит у пользователя разрешение на запуск приложения с повышенными правами или введите учетные данные администратора, используемого для запуска приложения.

Каждая команда соответствует команде, которая будет использоваться для запуска приложения из окна консоли. Хорошим примером является команда Open , так как она обычно поддерживается. Для файлов .exe Open просто запускает приложение. Однако чаще используется для запуска приложения, которое работает с определенным файлом. Например, файлы .txt могут быть открыты Microsoft WordPad. Команда Open для файла .txt, таким образом, будет соответствовать примерно следующей команде:

При использовании ShellExecute или ShellExecuteEx для открытия файла .txt Wordpad.exe запускается с указанным файлом в качестве аргумента. Некоторые команды могут иметь дополнительные аргументы, например флаги, которые можно добавить при необходимости для правильного запуска приложения. Дальнейшее обсуждение контекстных меню и глаголов см. в разделе расширение контекстных меню.

Как правило, попытка определить список доступных команд для определенного файла немного сложна. Во многих случаях можно просто установить для параметра Лпверб значение NULL, которое вызывает команду по умолчанию для типа файла. Эта процедура обычно эквивалентна установке лпверб в значение «Open», но некоторые типы файлов могут иметь разные команды по умолчанию. Дополнительные сведения см. в разделе расширение контекстных меню и справочная документация по ShellExecuteEx .

Использование ShellExecuteEx для предоставления служб активации с сайта

Службы цепочки сайтов могут управлять множеством поведений активации элементов. на Windows 8 можно указать указатель на цепочку сайтов, чтобы ShellExecuteEx для включения этих поведений. Чтобы предоставить сайт ShellExecuteEx:

  • Укажите параметр см _ _ . флаг маски _ хинст _ — _ флаг сайта в элементе фмаск элемента шеллексекутеинфо.
  • Укажите IUnknown в члене хинстапп объекта шеллексекутеинфо.

Использование ShellExecute для запуска диалогового окна поиска

когда пользователь щелкает правой кнопкой мыши значок папки в обозревателе Windows, одним из пунктов меню является «Search» (поиск). При выборе этого элемента оболочка запускает свою служебную программу поиска. Эта программа отображает диалоговое окно, которое можно использовать для поиска в файлах указанной текстовой строки. Приложение может программно запустить программу поиска для каталога путем вызова ShellExecuteс параметром «Find» в качестве параметра лпверб , а путь к каталогу — как параметр лпфиле . Например, следующая строка кода запускает программу поиска для каталога c: \ мипрограмс.

Комментарии

ProcessStartInfo используется вместе с Process компонентом. При запуске процесса с помощью Process класса у вас есть доступ к сведениям о процессах в дополнение к тому, который доступен при присоединении к выполняющемуся процессу.

Класс можно использовать ProcessStartInfo для лучшего контроля над запускаемым процессом. Необходимо по крайней мере задать FileName свойство либо вручную, либо с помощью конструктора. Имя файла — это любое приложение или документ. Здесь документ определяется как файл любого типа, с которым связано действие, связанное с открытым или по умолчанию. Вы можете просматривать зарегистрированные типы файлов и связанные с ними приложения для компьютера с помощью диалогового окна Свойства папки , доступного в операционной системе. Кнопка Дополнительно вызывает диалоговое окно, показывающее, существует ли действие Open, связанное с конкретным зарегистрированным типом файлов.

Кроме того, можно задать другие свойства, определяющие действия, выполняемые с этим файлом. Можно указать значение, относящееся к типу FileName свойства для Verb Свойства. Например, можно указать «Print» для типа документа. Кроме того, можно указать Arguments значения свойств как аргументы командной строки для передачи в процедуру открытия файла. Например, если в свойстве указано приложение текстового редактора FileName , можно использовать Arguments свойство, чтобы указать текстовый файл, который будет открываться редактором.

Стандартный ввод обычно является клавиатурой, а стандартный вывод и стандартная ошибка обычно представляют собой экран монитора. Однако можно использовать RedirectStandardInput свойства, и, RedirectStandardOutput RedirectStandardError чтобы процесс мог получить входные данные или вернуть их в файл или на другое устройство. При использовании StandardInput StandardOutput свойств, или StandardError в Process компоненте необходимо сначала задать соответствующее значение ProcessStartInfo Свойства. В противном случае система создает исключение при чтении или записи в поток.

Задайте UseShellExecute свойство, чтобы указать, следует ли запускать процесс с помощью оболочки операционной системы. Если параметр UseShellExecute имеет значение , новый процесс наследует стандартный поток ввода, стандартный вывод и стандартные потоки ошибок вызывающего процесса, если только RedirectStandardInput свойства, или, RedirectStandardOutput соответственно, не RedirectStandardError установлены в значение .

Можно изменить значение любого ProcessStartInfo свойства вплоть до момента запуска процесса. После запуска процесса изменение этих значений не будет действовать.

Примечание

Этот класс содержит запрос компоновки на уровне класса, который применяется ко всем элементам. SecurityExceptionИсключение возникает, если непосредственный вызывающий объект не имеет разрешения на полное доверие. Дополнительные сведения о требованиях безопасности см. в разделе Требования связывания.

Практическое упражнение: простой календарь

В данном примере вы поможете нам закончить простое приложение календаря. Код включает:

  • Элемент , позволяющий пользователю выбирать разные месяцы.
  • Обработчик событий для обнаружения изменения значения, выбранного в меню .
  • Функция , рисующая календарь и отображающая правильный месяц в элементе <h1> (en-US).

Вы должны написать условную конструкцию в функции обработчика , сразу после комментария . Конструкция должна:

  1. Проверить выбранный месяц (хранящийся в переменной . Это будет значение элемента после изменения значения, например, «Январь».)
  2. Задать переменную, скажем, , равную количеству дней в выбранном месяце. Для этого нужно будет проверить количество дней в каждом месяце. Високосный год можно не учитывать.

Советы:

  • Советуем использовать логический оператор OR для группировки нескольких месяцев в рамках одного условия; многие месяцы имеют одинаковое количество дней.
  • Подумайте, какое количество дней в месяце встречается чаще всего и используйте его в качестве варианта по умолчанию.

Если допустили ошибку, используйте кнопку «Сброс», чтобы вернуться к исходному виду примера. Если у вас совсем ничего не получается, нажмите «Показать решение».

В HTML коде внутри  названия месяцев  введены на русском языке. Соответственно ссылки на них из вашего скрипта так же на русском. Не забываем про синтаксис. (прим. — ConstantineZz)

Parameters

Type: HWND

A handle to the parent window used for displaying a UI or error messages. This value can be NULL if the operation is not associated with a window.

Type: LPCTSTR

A pointer to a null-terminated string, referred to in this case as a verb, that specifies the action to be performed. The set of available verbs depends on the particular file or folder. Generally, the actions available from an object’s shortcut menu are available verbs. The following verbs are commonly used:

runas

Launches an application as Administrator. User Account Control (UAC) will prompt the user for consent to run the application elevated or enter the credentials of an administrator account used to run the application.

NULL

The default verb is used, if available. If not, the «open» verb is used. If neither verb is available, the system uses the first verb listed in the registry.

Type: LPCTSTR

A pointer to a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a Shell namespace object, pass the fully qualified parse name. Note that not all verbs are supported on all objects. For example, not all document types support the «print» verb. If a relative path is used for the lpDirectory parameter do not use a relative path for lpFile.

Type: LPCTSTR

If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

Type: LPCTSTR

A pointer to a null-terminated string that specifies the default (working) directory for the action. If this value is NULL, the current working directory is used. If a relative path is provided at lpFile, do not use a relative path for lpDirectory.

Type: INT

The flags that specify how an application is to be displayed when it is opened. If lpFile specifies a document file, the flag is simply passed to the associated application. It is up to the application to decide how to handle it. It can be any of the values that can be specified in the nCmdShow parameter for the ShowWindow function.

(Process.)RunCommand

  • RunCommand документация
  • RunCommandInDir докуметация

В FPC 2.6.2, некоторые вспомогательные функции для TProcess были добавлены в модуль process основанный на обертке использованной в .
Эти функции могут быть для базового и среднего уровня использования и могот захватить вывод как одной строки, так и огромного количества выводимой информации.

Простой пример:

uses Process;
...
var s  ansistring;
...
if RunCommand('/bin/bash','-c','echo $PATH',s) then
   writeln(s);

Перегруженный вариант функции может возвращать код выхода программы. RunCommandInDir запускает программу в заданной папке.

function RunCommandIndir(const curdirstring;const exenamestring;const commandsarray of string;var outputstringstring; var exitstatusinteger) integer;
function RunCommandIndir(const curdirstring;const exenamestring;const commandsarray of string;var outputstringstring) boolean;
function RunCommand(const exenamestring;const commandsarray of string;var outputstringstring) boolean;

Оператор switch

Выражения отлично справляются с добавлением условного кода, однако они не лишены недостатков. Они хорошо подходят для ситуации, когда имеется всего пара вариантов развития событий, каждый из которых имеет блок с приемлемым количеством кода, а также в случаях, когда условие является довольно сложным и включает несколько логических операторов. Если же нам требуется всего лишь задать переменную для определённого выбранного значения или напечатать конкретную фразу при определённом условии, изученный нами синтаксис может оказаться довольно громоздким, особенно если имеется большое количество вариантов выбора.

В этом случае нам поможет оператор  – он принимает одно единственное выражение или значение, а затем просматривает ряд вариантов, пока не найдут вариант, соответствующий этому значению, после чего выполняет код, назначенный этому варианту. Вот пример использования этого оператора:

switch (выражение) {
  case choice1:
    выполнить этот код
    break;

  case choice2:
    выполнить этот код, а не предыдущий
    break;

  // вариантов может быть любое количество

  default:
    а вообще-то, выполнить только этот код
}

Что мы имеем:

  1. Ключевое слово , за которым следует пара круглых скобок.
  2. В скобках приводится выражение или значение.
  3. Ключевое слово , за которым следует вариант выбора (именно он проверяется на соответствие выражению или значению) и двоеточие.
  4. Код, который будет выполняться, если вариант совпадает с выражением.
  5. Оператор , за которым следует точка с запятой. Если вариант совпал с выражением или значением, браузер закончит выполнять блок кода, дойдя до оператора , и перейдёт к выполнению кода, расположенного после оператора switch.
  6. Вариантов выбора (пункты 3–5) может быть любое количество.
  7. Ключевое слово используется точно также, как любой другой вариант выбора (пункты 3–5) за тем исключением, что после нет других вариантов выбора, поэтому инструкция не требуется, никакого кода дальше нет. Это вариант выбора по умолчанию, выбираемый, если ни один из других вариантов не совпал с выражением.

Примечание. Вариант выбора может быть пропущен, если выражение гарантированно совпадёт с одним из вариантов выбора. В противном случае вариант необходим.

Давайте рассмотрим реальный пример — перепишем наше приложение прогноза погоды с использованием оператора switch:

Note: вы можете найти этот пример на GitHub (также увидеть как он работает.)

Булевы типы

Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false , >=, , =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции .

Стандартные булевские функции

  • odd(x) = true, если x нечетный (x целый тип);
  • eoln(x) = true, если встретился конец строки текстового файла x;
  • eof(x) = true, если встретился конец файла x.

В остальных случаях эти функции принимают значение false.

Некоторые значения нужно знать – потому, что без них никак и это значения — true, false, null. И когда вы начнете писать код, то вам нужно знать, что может возвращать функция, либо переменная и т.д.

И функции, кстати все возвращают разные значения! Запомнить это практически невозможно, поэтому не стоит пытаться запомнить, что из трех — true, false, null, она возвращает — для это есть справочники! К которым я периодически все равно обращаюсь!

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: