Читаем Советы по Delphi. Версия 1.4.3 от 1.1.2001 полностью

 try

  CreateProcess(nil, @App[1] , nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, PMSI, PMPI);

 except

 ErrStr := 'Fault run process: '''+App+'''';

 Application.MessageBox(@ErrStr[1],'Failure process', MB_OK+MB_ICONERROR);

end;

разумеется это одно из самых корявых решений, но всё же работает, как вариант сойдет?

<p>Получение списка запущеных приложений</p>

Igor Nikolaev aKa The Sprite предлагает следующий код:

procedure TForm1.Button1Click(Sender: TObject);

VAR

 Wnd : hWnd;

 buff: ARRAY [0..127] OF Char;

begin

 ListBox1.Clear;

 Wnd := GetWindow(Handle, gw_HWndFirst);

 WHILE Wnd <> 0 DO BEGIN {Hе показываем:}

  IF (Wnd <> Application.Handle) AND {-Собственное окно}

   IsWindowVisible(Wnd) AND {-Hевидимые окна}

   (GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}

   (GetWindowText(Wnd, buff, sizeof(buff)) <> 0)

   THEN BEGIN

   GetWindowText(Wnd, buff, sizeof(buff));

   ListBox1.Items.Add(StrPas(buff));

  END;

  Wnd := GetWindow(Wnd, gw_hWndNext);

 END;

 ListBox1.ItemIndex := 0;

end;

<p>Как мне запустить какую-нибудь программу? А как подождать, пока эта программа не отработает? Как выяснить, работает ли программа или уже завершилась? Как принудительно закрыть выполняющуюся программу?</p>

Nomadic рекомендует следующее:

A: WinExec или ShellExecute. У второй больше возможностей.

(SO): CreateProcess в параметре process info возвращает handle запущенного процесса. Вот и делаешь WaitForSingleObject(pi.hProcess, INFINITE);

(AA): (Win16) Delay можно взять из rxLib.

handle := WinExec();

if handle >= 32 then

while GetModuleUsage(handle) > 0 do Delay(nn);

else raise …

(AM): Чтобы выяснить, работает ли программа, используйте GetProcessTimes, параметр lpExitTime.

(Win32) Для принудительного завершения процесса — TerminateProcess.

(Win16) (RR): Надо послать программе сообщение WM_QUIT:

Handle := Winexec(App, 0);

PostMessage(Handle, WM_QUIT, 0, 0);

<p>Открытие выбранного файла в работающем приложении</p>

Пангин Дмитрий Викторович прислал письмо следующего содержания:

При программировании MDI-приложений возникает следующая задача: Если пользователь кликнул на файле, тип которого поддерживается создаваемым приложением, то, если приложение уже запущено, не нужно запускать новую копию приложения, а нужно открыть выбранный файл в уже работающем приложении. Я сделал это так (возможно есть более красивое решение):

\\ В файле проекта:

var

 i: integer;

 hMainForm:hwnd;

 copyDataStruct:TCopyDataStruct;

 ParamString:string;

 WParam,LParam:integer;

begin

 \\ ищем главное окно приложения, вместо Caption - nil,

 \\ поскольку к заголовку главного окна может добавиться заголовок MDIChild

 \\ (нужно позаботиться об уникальности имени класса главной формы)

 hMainForm:= FindWindow('TMainForm', nil);

 if  hMainForm = 0 then begin

Application.Initialize;

  Application.CreateForm(TFrmMain, frmMain);

  for i:=1 to ParamCount do TMainForm(Application.MainForm).OpenFile(ParamStr(i));

  Application.Run;

 end

 else begin

ParamString:='';

  for i:=1 to ParamCount do begin

   \\ запихиваем все параметры в одну строку с разделителями ?13

   ParamString:=ParamString+ParamStr(i)+ #13;

  end;

  \\ создаем запись типа TCopyDataStruct

  CopyDataStruct.lpData:=PChar(ParamString);

Перейти на страницу:

Похожие книги

Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript

Данная книга посвящена программированию игр с помощью ActionScript. Здесь вы найдете подробные указания, необходимые для создания самых разных игр – аркад, головоломок, загадок и даже игровых автоматов. В тексте приведены исходные коды программ и детальные, доступно изложенные инструкции. Базовые принципы программирования ActionScript рассматриваются на примере игр, однако вы без труда сможете применить полученные знания и для разработки неигровых проектов, таких как Web-дизайн и реклама. Рекомендации Гэри Розенцвейга помогут вам не только придумывать занимательные игры и размещать их на Web-сайте, но и оптимизировать скорость их работы, а также защищать свои творения от несанкционированного копирования. Представленный в книге код несложно изменить для использования в других программах.Книга предназначена для широкого круга читателей – создателей анимационных роликов, художников-оформителей, программистов и разработчиков Web-сайтов. Издание может также выступать в качестве практического пособия по изучению ActionScript.

Гэри Розенцвейг

Программирование, программы, базы данных / Программирование / Книги по IT
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT