как заблокировать основное окно программы delphi?

программирование Delphi делфи

Из основного окна программы я вызываю стороннее приложение. Мне нужно до тех пор пока оно не будет закрыто пользователем заблокировать основное окно.

Begin
H:=1;
frmMain.Enabled:=False;
ShellExecute(Handle, nil, PChar('Name.exe'),nil,nil,SW_RESTORE);
while H<>0 do
begin
H:=FindWindow(Nil, 'Name');
end;

frmMain.Enabled:=True;
End;

frmMain.Enabled:=False; почему-то не помогает

Примечание:
Но они обе работают и без Application.ProcessMessages. А вот блокировать почему то не хочет, ведь frmMain.Enabled:=False; у меня стоит перед циклом

Примечание:
может быть и правда можно ShowModal применить.Только как ему передать стороннее приложение?

Примечание:
Выяснил, что блокировка все же происходит, но вот разблокировка происходит до того как заканчивается цикл. Почему? Дебагом прохожусь работает

Примечание:
решено. использовал следующую заготовку:
var
ProcInfo: PShellExecuteInfo;
begin
(Sender as TControl).Enabled := False;
GetMem(ProcInfo, SizeOf(ProcInfo^));
ZeroMemory(ProcInfo, SizeOf(ProcInfo^));
with ProcInfo^ do begin
Wnd := Handle;
cbSize := SizeOf(ProcInfo^);
lpFile := PChar('notepad.exe');
// lpParameters := nil;
lpVerb := 'open';
nShow := SW_SHOW;
fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
end;
try
Win32check(ShellExecuteEx(ProcInfo));
while not Application.Terminated and
(WaitForSingleObject(ProcInfo.hProcess, 100)=WAIT_TIMEOUT) do
Application.ProcessMessages;
finally
if ProcInfo.hProcess <> 0 then CloseHandle(ProcInfo.hProcess);
Dispose(ProcInfo);
(Sender as TControl).Enabled := True;
end;
end;
Ответы:
Хотел написать "используйте ShowModal", потом допёр. У вас в цикле идёт поиск окна, в процессе обработки цикла программа не будет отвечать. Вставьте Application.ProcessMessages в цикл.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.