Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить, активна ли задача ? [D7, WinXP]


BFG9k ©   (2007-05-23 19:35:00) 

Есть хэндл главного окна программы. Это то окно, что отображается на панели задач. Как определить, активно ли оно ? (то есть находится на панели задач в нажатом-утопленном состоянии)


Leonid Troyanovsky   (2007-05-24 17:45:00) [1]


> Сергей М. ©   (24.05.07 14:22) [7]

> Так ведь ?

Нет, конечно. Окно с кнопкой на таскбаре - приложения.
См., например, TApplication.SetTitle

--
Regards, LVT.


BFG9k   (2007-05-24 15:57:00) [2]

Че-то не работает ... ладно, видимо где-то еще ошибка


Сергей М.   (2007-05-24 15:46:00) [3]

function HasFocus(hWnd: THandle): Boolean;
var
 idProcess, idThread: DWord;  
begin
 Result := False;
 idThread := GetWindowThreadProcessId(hWnd,@idProcess);
 if idThread = GetCurrentThreadId then
   Result:= GetFocus = hWnd
 else
   if AttachThreadInput(GetCurrentThreadId, idThread, True) then
   try  
     Result:= GetFocus = hWnd;
   finally
     AttachThreadInput(GetCurrentThreadId, idThread, False);
   end;
end;


BFG9k   (2007-05-24 15:38:00) [4]

неа .... это тоже окно, получившее фокус ввода...


clickmaker   (2007-05-24 15:28:00) [5]

GetActiveWindow()?


BFG9k   (2007-05-24 15:12:00) [6]

Сергей М. : ну мож я не так выразился .... мне нужно именно то, что в таскбаре .... я знаю, как его найти (по названию), но оно никогда не совпадает с GetFocus или GetForegroundWindow, в каком бы состоянии оно не было :(


Сергей М.   (2007-05-24 14:54:00) [7]


> BFG9k


Активность задачи в Win32 - это вообще нонсенс.

Активность окна имеет смысл для конкретного треда.

Активность VCL-формы имеет смысл для конкретного VCL-приложения.

Активное окно = Окно, имеющее фокус ввода.

Активная VCL-форма <> Активное окно.


BFG9k   (2007-05-24 14:37:00) [8]

Leonid Troyanovsky, Сергей М. :
 Кнопка в таскбаре - это и есть Application. Главная форма - это действительно другое. Я имел в виду именно кнопку в таскбаре, то есть application.


> Юрий Зотов ©   (23.05.07 21:19) [2]
> GetForegroundWindow?


нет ... и не GetTopWindow и не GetFocus ....


> Gtnz   (23.05.07 19:48) [1]
> hasfocus?


А причем тут WinAPI, окна и хэндлы ?

....

Вообще даже GetWindowPlacement не помогает ... хотя по идее теоретически оттуда можно вытащить - активное окно или нет... но возвращается все время одно и то же значение для всех окон (имеется в виду TWindowPlacement.showCmd).


Сергей М.   (2007-05-24 14:22:00) [9]


> Leonid Troyanovsky ©   (24.05.07 13:07) [6]


> Почему бы окну Application не быть "главным"


А действительно - почему ? Ведь оно и есть в этом случае главное.

Только вот к кнопке в таскбаре оно не имеет непоср.отношения - кнопка в таскбаре имеет отношение к окну формы, в дан.случае главной, а не к главному окну приложения.

Так ведь ?


Leonid Troyanovsky   (2007-05-24 13:07:00) [10]


> Сергей М. ©   (24.05.07 12:06) [5]

> В случае с VCL GUI-приложением это утверждение не соответствует
> действительности.

Главное окно <> главная форма.
Почему бы окну Application не быть "главным".

--
Regards, LVT.


Сергей М.   (2007-05-24 12:06:00) [11]


> хэндл главного окна программы. Это то окно, что отображается
> на панели задач


В случае с VCL GUI-приложением это утверждение не соответствует действительности.


SpellCaster   (2007-05-24 11:31:00) [12]

> [3] Германн ©   (24.05.07 01:25)

Ага, есть такое. Если стоит задача определить именно нажатость кнопки на панели задач, то это не так уж просто - поскольку если вывести на передний план окно, не отображающееся на панели задач, то кнопка окна, бывшего активным до этого, останется нажатой (сейчас попробовал с контакт-листом аськи).


Германн   (2007-05-24 01:25:00) [13]


> BFG9k ©   (23.05.07 19:35)
>
> Есть хэндл главного окна программы. Это то окно, что отображается
> на панели задач. Как определить, активно ли оно ? (то есть
> находится на панели задач в нажатом-утопленном состоянии)
>

Прошу прощения за возможный offtop, но более чем неоднократно в ХР встречал ситуацию, когда "кнопка на панели задач утоплена", а окна её программы не видно! Нужно кликнуть по "утопленной" кнопке и программа вылезает на поверхность.


Юрий Зотов   (2007-05-23 21:19:00) [14]

GetForegroundWindow?


Gtnz   (2007-05-23 19:48:00) [15]

hasfocus?


Наверх

Титульная страница Поиск, карта сайта Написать письмо