Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2007, 11:50   #1
fuv
 
Регистрация: 22.04.2007
Сообщений: 7
Вопрос Запуск приложения и активность формы

На форме размещены кнопки, которые отвечают за запуск различных приложений. Как сделать , чтобы форму нельзя было сделать активной, пока работает запущенное приложение (т.е нельзя запускать более одного приложения). Как только приложение завершило работу, фокус передать форме.
fuv вне форума Ответить с цитированием
Старый 10.05.2007, 12:47   #2
vicvtor
Иркутянин!!!
Пользователь
 
Аватар для vicvtor
 
Регистрация: 01.11.2006
Сообщений: 83
По умолчанию

Когда запускаешь какое либо приложение, в системе инициируется его Handle. При запуске внешней программы (по нажатии на твои кнопки) активируешь таймер проверки наличия в системе Handle запущеного тобою приложения. В это же время блокируй окно своей формы. Как только программа завершается, handle разрушается и в системе его уже нет. Программа его не видит и делает себя в Normal Mode. Вот. Вроде так. Ищи handle с помощью EnumWindows.
vicvtor вне форума Ответить с цитированием
Старый 10.05.2007, 12:58   #3
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

У меня так получилось вроде:
procedure TForm1.Timer1Timer(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
s:boolean;
begin
s:=false;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN
IF (Wnd <> Application.Handle) AND
IsWindowVisible(Wnd) AND
(GetWindow(Wnd, gw_Owner) = 0) AND
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
if StrPas(buff)='Процесс' then s:=true;
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
if s=true then form1.Visible:=false else form1.Visible:=true;
end;

Последний раз редактировалось Трофимов Александр; 10.05.2007 в 13:02.
Трофимов Александр вне форума Ответить с цитированием
Старый 11.05.2007, 20:30   #4
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Что-то вроде этого:
Код:
var 
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
begin
  FillChar(si, SizeOf(si), 0);
  si.cb:=SizeOf(si);
  CreateProcess('notepad.exe', nil, nil, nil, False, 0, nil, nil, si, pi);
  WaitForSingleObject(pi.hProcess, INFINITE);
  ShowMessage('Finished!');
end;
Voland вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск внешнего приложения Fia Общие вопросы Delphi 13 18.09.2008 07:27
Запуск приложения Артэс Общие вопросы C/C++ 2 07.06.2008 17:38
Активность формы BanDit Общие вопросы Delphi 2 27.12.2007 21:40
Запуск exe-файла из приложения TerVovik Помощь студентам 4 12.12.2007 16:21
Запуск приложения из DLL Hollander Общие вопросы Delphi 2 17.05.2007 20:04