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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 08:32   #1
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию Как закрыть наглое активное окно?

Как закрыть активное окно, которое в наглую становится активным 3 раза подряд?

Код:
var
  Window,Window1 : HWND;
  i:integer;
begin
  i:=0;
  if GetForegroundWindow = Application.MainForm.Handle //если моя прога скрывается
    then
      Window := GetForegroundWindow;// записываем название активной проги
      while i<3 do    //цикл
        begin
          form1.FormStyle:=fsStayOnTop; //ставим окно сново поверх
          if GetForegroundWindow = Application.MainForm.Handle //если же снова скрывается
            then Window1 := GetForegroundWindow; //записываем имя активной проги
              if Window = Window1 then i:=i+1  // cравниваем
         end;
  SendMessage(Window, WM_SYSCOMMAND, SC_CLOSE, 0); //Если цикл закончился закрываем активное окно
end;
Что не так?
MotoArhangel вне форума Ответить с цитированием
Старый 09.03.2011, 09:05   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

в событи OnActivate или OnShow формы добавь такой код:
Код:
with Form1 do
begin 
  SetWindowPos(Handle,HWND_TOPMOST,Left,Top,Width,Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
end;
и при активации/показе окна, оно станет поверх всех других.

Чтобы убрать это, флаг HWND_TOPMOST замени на HWND_NOTOPMOST и окно станет нормальным.

подробное описание флагов смотри в Windows SDK (Help > Windows SDK), указателем найди SetWindowPos и читай описание.

Последний раз редактировалось Человек_Борща; 09.03.2011 в 09:09.
Человек_Борща вне форума Ответить с цитированием
Старый 09.03.2011, 09:45   #3
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

А что мне это даст. Если появится окно со свойством OnTop, оно же будет поверх. Да и к тому же мне нужно закрыть наглое активное окно.

Последний раз редактировалось MotoArhangel; 09.03.2011 в 09:47.
MotoArhangel вне форума Ответить с цитированием
Старый 09.03.2011, 10:02   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Что мешает заюзать TTimer с интервалом 500 мс?

А у наглово окна должен быть как минимум класс окна и заголовок. При помощи FindWindow все решается.

Последний раз редактировалось Человек_Борща; 09.03.2011 в 10:11.
Человек_Борща вне форума Ответить с цитированием
Старый 09.03.2011, 10:12   #5
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Дак я не хожу простыми путями)
Вопрос был поставлен по поводу закрытия активного окна, а не становления моего окна поверх всех.
MotoArhangel вне форума Ответить с цитированием
Старый 09.03.2011, 10:20   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в вашем коде помоему перепутано = с <>, а то у вас выходит будно если ваше окно активное, то тогда оно скрывается, не стыковочка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.03.2011, 11:51   #7
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

А код то все равно не работает(
Помоги а, может другой вариант есть?
MotoArhangel вне форума Ответить с цитированием
Старый 09.03.2011, 12:17   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

Код:
If FindWindow(ClassName,Caption) = GetForegroundWondow then
Если хендл окна котроое соответствуе классу и заголовку сейчас активно..
Тебе осталось узнать класс и заголовок окна.
используй Spy++ но мне достаточно и вот этой утилиты: http://rouse.drkb.ru/winapi.php#wndinfo см. wndinfo
Человек_Борща вне форума Ответить с цитированием
Старый 09.03.2011, 21:32   #9
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Спасибо сделал)

Последний раз редактировалось MotoArhangel; 10.03.2011 в 12:34.
MotoArhangel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть всплывающее окно - как? fezilk25 Общие вопросы Delphi 4 17.11.2010 19:22
Активное окно Messir_Leonard Win Api 4 22.04.2008 19:25
Как закрыть окно подключения к инету dial-up? Vladimir K. Работа с сетью в Delphi 4 12.02.2008 19:13
Активное окно MadReason Win Api 12 10.01.2008 17:44
Предыдущее активное окно martinz Win Api 3 25.11.2007 15:02