Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

icq: 369693694
По умолчанию

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

icq: 368-001-446
По умолчанию

У меня так получилось вроде:
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
Репутация: 62
По умолчанию

Что-то вроде этого:
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


17:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru