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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2016, 13:21   #1
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию как проверить свернуто ли окно

драсти помогите как проверить свернуто ли окно?
пример если открыто другое приложения notepad.exe
тогда в своем проге memo1.enabled:=true;
а если свернуто notepad.exe то memo1.enabled:=false;
falsebegin вне форума Ответить с цитированием
Старый 18.12.2016, 13:28   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://msdn.microsoft.com/ru-ru/lib...(v=vs.85).aspx
p51x вне форума Ответить с цитированием
Старый 18.12.2016, 14:59   #3
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Код с тем что вам предложили уже
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
FindHandle: HWND;
WindowPlacement: TWindowPlacement;
begin
FindHandle:=  FindWindow('Notepad', nil);
if FindHandle <> 0 then
begin
GetWindowPlacement(FindHandle, @WindowPlacement);
if WindowPlacement.showCmd = SW_SHOWMINIMIZED then
Begin
memo1.enabled:=false;
Caption:= 'Свернуто';
end
else
if WindowPlacement.showCmd = SW_NORMAL then
begin
memo1.enabled:=true;
Caption:= 'Развернуто';
end;
end
else
begin
memo1.enabled:=false;
Caption:= ''Нет окна';
end;

end;
Либо другой способ
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
HRect: TRect;
FindHandle: HWND;
begin
FindHandle:=  FindWindow('Notepad', nil);
if FindHandle <> 0 then
begin
GetWindowRect(FindHandle, HRect);
if (HRect.left + HRect.Top + HRect.Right + HRect.Bottom)  > 180 then
Begin
memo1.enabled:=true;
Caption:= 'Развернуто';
end
else
begin
memo1.enabled:=false;
Caption:= 'Свернуто';
end;
end
else
begin
memo1.enabled:=false;
Caption:= 'Нет окна';
end;

end;

Последний раз редактировалось Aliens_wolfs; 18.12.2016 в 15:20.
Aliens_wolfs на форуме Ответить с цитированием
Старый 18.12.2016, 16:38   #4
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

хммм странно работает только один раз когда включаю notepad показывает в caption Развернуто а когда разварачиваю notepad ничего не происходит?

procedure TForm1.Timer3Timer(Sender: TObject);
var
HRect: TRect;
FindHandle: HWND;
begin
if FindWindow(nil, 'Notepad2') <> 0 then
if FindHandle <> 0 then
begin
GetWindowRect(FindHandle, HRect);
if (HRect.left + HRect.Top + HRect.Right + HRect.Bottom) > 180 then
Begin
memo1.enabled:=true;
Caption:= 'Развернуто'
end
else
begin
memo1.enabled:=false;
Caption:= 'Свернуто';
end;
end
else
begin
memo1.enabled:=true;
Caption:= 'Нет окна';
end;
falsebegin вне форума Ответить с цитированием
Старый 18.12.2016, 16:46   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуй с первым примером GetWindowPlacement. У меня и первый и второй примеры работают.
Этот код понадежнее будет

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
FindHandle: HWND;
WindowPlacement: TWindowPlacement;
begin
FindHandle:=  FindWindow('Notepad', nil);
if FindHandle <> 0 then
begin
GetWindowPlacement(FindHandle, @WindowPlacement);
Case WindowPlacement.showCmd of
SW_SHOWMINIMIZED:
Begin
memo1.enabled:=false;
Caption:= 'свернуто';
end;
SW_NORMAL, SW_SHOWMAXIMIZED:
begin
memo1.enabled:=true;
Caption:= 'развернуто';
end;
end;

end
else
begin
memo1.enabled:=false;
Caption:= 'не найдено окно';
end;

end;

Последний раз редактировалось Aliens_wolfs; 18.12.2016 в 16:58.
Aliens_wolfs на форуме Ответить с цитированием
Старый 18.12.2016, 19:58   #6
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

спасибо вроде работает только с notepad а как сделать так чтобы работал с любым приложением ?.exe
falsebegin вне форума Ответить с цитированием
Старый 18.12.2016, 20:12   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Почитай про FindWindow или поищи в интернете работа с чужими окнами в delphi и почитай
Aliens_wolfs на форуме Ответить с цитированием
Старый 18.12.2016, 20:43   #8
Replicant
Форумчанин
 
Аватар для Replicant
 
Регистрация: 17.08.2009
Сообщений: 139
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
спасибо вроде работает только с notepad а как сделать так чтобы работал с любым приложением ?.exe
Ловить хэндел этого любого приложения и передавать его в GetWindowPlacement
Replicant вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить прокси? L6go1as C# (си шарп) 2 19.04.2014 19:57
Треугольное окно со сторонами A, B, C. Проверить, пройдёт ли в окно коробка цилиндрической формы (D и H) (паскаль) ihimaru Помощь студентам 5 02.10.2011 22:11
Как проверить скрыто окно или нет? BuT@JL Общие вопросы Delphi 9 13.11.2009 15:19
Как Как проверить кнопки мыши без OnMouseDown? Вадим Буренков Общие вопросы Delphi 3 22.05.2009 15:08
По нажатию, каких сочетаний клавиш можно программно развернуть приложение, если оно свернуто в трее? Johnny_B Win Api 1 04.06.2007 08:20