Форум: "WinAPI";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизКак определить, активна ли задача ? Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c