Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Как определить, активна ли задача ?   Найти похожие ветки 

 
BFG9k ©   (2007-05-23 19:35) [0]

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


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

hasfocus?


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

GetForegroundWindow?


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


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

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


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

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

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


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


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


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


 
Leonid Troyanovsky ©   (2007-05-24 13:07) [6]


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

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

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

--
Regards, LVT.


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


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


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


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

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

Так ведь ?


 
BFG9k ©   (2007-05-24 14:37) [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:54) [9]


> BFG9k


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

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

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

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

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


 
BFG9k ©   (2007-05-24 15:12) [10]

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


 
clickmaker ©   (2007-05-24 15:28) [11]

GetActiveWindow()?


 
BFG9k ©   (2007-05-24 15:38) [12]

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


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

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:57) [14]

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


 
Leonid Troyanovsky ©   (2007-05-24 17:45) [15]


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

> Так ведь ?

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

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
2-1194794278
soj
2007-11-11 18:17
2007.12.09
Получить код символа запятой.


15-1194549102
Cyrax
2007-11-08 22:11
2007.12.09
Ищу хакеров...


2-1194846459
KSergey
2007-11-12 08:47
2007.12.09
Передача строки в параметр PChar


2-1195214548
no3ep
2007-11-16 15:02
2007.12.09
printers


8-1170612314
Master_
2007-02-04 21:05
2007.12.09
Как узнать имя кодека, которым сжат видеофайл