Delphi , Программа и Интерфейс , Приложения чужие
Запуск программ из Delphi
В этой статье вы научитесь применять функцию Windows API ShellExecute. Ее применяют в тех случаях, когда мы, например, хотим открыть файл в соответствии с его расширением, не зная, какая программа ассоциирована с таким файлами. Итак, начнем с простого:
— Запустить блокнот (notepad)
uses ShellApi; . ShellExecute(Handle, ‘open’, ‘c:Windowsnotepad.exe’, nil, nil, SW_SHOWNORMAL);
— Открыть текстовый файл c:text.txt в блокноте
ShellExecute(Handle, ‘open’, ‘c:windowsnotepad.exe’, ‘c:text.txt’, < BR >nil, SW_SHOWNORMAL);
— Показать содержимое каталога c:archive
ShellExecute(Handle, ‘open’, ‘c:archive’, nil, nil, SW_SHOWNORMAL);
— Открыть файл в соответствии с расширение м
— Открыть html документ в браузере по умолчанию
ShellExecute(Handle, ‘open’, ‘http://src.fitkursk.ru’, nil, nil, SW_SHOWNORMAL);
— Дожидаемся окончания запущенной программы
Автозагрузка программы в Delphi
Статья Запуск программ из Delphi раздела Программа и Интерфейс Приложения чужие может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
Источник: www.kansoftware.ru
delphi запуск внешнего приложения
В этой статье вы научитесь применять функцию Windows API ShellExecute. Ее применяют в тех случаях, когда мы, например, хотим открыть файл в соответствии с его расширением, не зная, какая программа ассоциирована с таким файлами. Итак, начнем с простого:
— Запустить блокнот (notepad)
— Открыть текстовый файл c: ext.txt в блокноте
— Показать содержимое каталога c:archive
— Открыть файл в соответствии с расширение м
— Открыть html документ в браузере по умолчанию
— Дожидаемся окончания запущенной программы
Статья Запуск программ из Delphi раздела Программа и Интерфейс Приложения чужие может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
Пример показывает как из Вашей программы запустить внешнее приложение и подождать его завершения.
А вот пример вызова этой функции:
- Параметр FileName = Имя внешней программы.
- Параметр Params = Параметры, необходимые для запуска внешней программы
- Параметр WinState = Указывает — как будет показано окно:
Для этого параметра мы можем так же использовать следующие константы: SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOWNORMAL
Подключение Delphi ds150e и первый запуск программы
PS: Этот код тестировался в delphi версий 3, 4 и 5.
На этом уроке изучим запуск других приложений. Иногда из программы на Delphi требуется запустить другую программу. Для этого есть два способа и оба используют API -функции. Первый способ использует функцию API -функцию WinExec , а второй — ShellExecute . Посмотрим на применение этих функций в деле.
Сначала используем функцию ShellExecute . Для нее пример достаточно распространенный — мы сделаем гиперссылку на форме. Щелкаешь на ней — и оказываешься на некотором сайте. Часто такую ссылку можно видеть в окошке About . Для использования функции ShellExecute прежде всего добавляем ShellAPI в секцию uses нашего кода (иначе компилятор ругнется на эту функцию).
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ShellAPI;
Далее помещаем на форме Label , и делаем в нем надпись синей и подчеркнутой (как это и принято для гиперссылки). Делаем двойной щелчок мышью на нашем Label1 для перехода в окно кода. В обработчике пишем следующий код:
procedure TForm1.Label1Click(Sender: TObject); ShellExecute(Form1.Handle, ‘open’, ‘http: //www.ya.ru’,
nil, nil, SW_SHOWNORMAL) Запускаем программу, щелкаем на нашей гиперссылке и оказываем на сайте. Все как и ожидалось.
Рассмотрим параметры нашей функции более подробно. Первый параметр ( Form1.Handle у нас) — это указатель на окно, из которого запускается другое приложение.
Второй параметр (у нас это open ) — показывает, что мы делаем. Значение open для него — самое распространенное. Еще из распространенных значений этот параметр может принимать print (для печати, естественно) и nil (которое фактически тоже самое, что и open ).
Четвертый параметр (у нас он nil ) — это параметры для запускаемого exe-файла (который должен стоять третьим параметром). Например, сюда можно написать, что за файл мы хотим открыть в Блокноте. Остальные параметры не столь важны, так что если интересно, то смотрите в help .
Источник: softlast.ru
Запуск внешнего приложения в форму
Как в Delphi запустить приложения, допустим, калькулятор в форму приложения, в нете искал, но есть только под С, а надо делфи. Знает ли кто-нибудь как сделать?
Отслеживать
51k 83 83 золотых знака 262 262 серебряных знака 500 500 бронзовых знаков
задан 29 сен 2011 в 17:48
612 6 6 серебряных знаков 21 21 бронзовый знак
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Как я понимаю из примера, главная форма запущенного приложения становится дочерней от формы запускающей программы и помещается в её главное окно. Видно, что при запуске программы её форма появляется как обычно, и только потом смещается в окно запустившей её программы. По-видимому, используются стандартные функции библиотек Win32 или User32, остаётся только узнать их названия.
ща сам визио ставлю посматреть хочу
Зачем? Чтобы просмотреть исходник, достаточно блокнота.
Вот исходный код, в котором всё и происходит:
void PictureBox1Click(object sender, EventArgs e) //обработка клика по форме < System.Diagnostics.Process bob = new System.Diagnostics.Process(); bob.StartInfo.UseShellExecute = true; bob.StartInfo.Arguments += » /K TITLE Command Prompt»; bob.StartInfo.FileName = «CMD»; //имя программы bob.Start(); //запускаем программу this.timer1.Enabled = true; //запускаем таймер >void Timer1Tick(object sender, EventArgs e) //обработка тика таймера < System.IntPtr winParent; System.IntPtr x; System.IntPtr winHandle = Usr32.FindWin(«ConsoleWindowClass», «Command Prompt»); //находим окно, которое запустили if(winHandle != System.IntPtr.Zero) < winParent = Usr32.GetParent(winHandle); x = Usr32.SetParent(winHandle, this.pictureBox1.Handle); //присваиваем форме приложения в качестве родителя форму нашей программы x = Usr32.SetWindowPos(winHandle, 1, 10, 10, 500, 300, 0); //устанавливаем новую позицию этой формы, которая уже считается дочерней this.timer1.Enabled = false; //вырубаем таймер >
Сейчас попробую переписать на Delphi. Вот, получилось очень просто и компактно:
procedure TForm1.FormClick(Sender: TObject); //при клике на форме var h:hwnd; //указатель на окно begin //запускаем стандартную «командную строку» ShellExecute(form1.Handle,’open’,’cmd.exe’,nil,’c:\windowssystem32′,SW_SHOW); sleep(10); //ждём, пока окно не появится //находим окно по заголовку h:=findwindow(nil, ‘c:\windowssystem32cmd.exe’); //если нашли, присваиваем ему статус дочернего от нашего окошка if h<>0 then windows.SetParent(h,form1.Handle); end;
Для ShellExecute (shell32.dll) нужно подключить модуль ShellAPI, а вот функции findwindow и setparent объявлены в модуле windows (win32.dll и user32.dll). Скачать мой пример Кстати, прикольно получилось: на C написано до фига кода, а на Delphi — всего-то пара строчек, а результат тот же, может быть, даже лучше. 😀
Источник: ru.stackoverflow.com