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

Вниз

Как получить handle окна, имеющего фокус ввода?   Найти похожие ветки 

 
Deus ©   (2002-04-29 18:14) [0]

GetFocus - только для моего процесса...:(
GetForegroundWindow - возвращает главное окно.
А если в этом окне поле ввода, в котором стоит курсор - как получить его handle?
Мне нужно что-то типа GetFocus, но для всей системы...


 
Song ©   (2002-04-29 18:16) [1]

GetWindowFromPoint() ???


 
Deus ©   (2002-04-29 18:21) [2]

Я наверно не очень внятно спросил.
Мне нужно получить hwnd окна, имеющего фокус ввода клавиатуры.
GetWindowFromPoint - как может мне помочь?


 
troits ©   (2002-04-29 20:16) [3]

Попробуй
AttachThreadInput, потом GetFocus


 
troits ©   (2002-04-30 11:23) [4]


function GetFocusedWindow: HWND;
var
CurrThID, ThID: DWORD;
begin
result := GetForegroundWindow;
if result <> 0 then
begin
CurrThID := GetCurrentThreadId;
ThID := GetWindowThreadProcessId(result, // handle to window
nil // process identifier
);
result := 0;
if AttachThreadInput(CurrThID, ThID, True) then
begin
result := GetFocus;
AttachThreadInput(CurrThID, ThID, False);
end;
end;
end;


 
Deus ©   (2002-04-30 17:42) [5]

Спасибо большое, troits, я уже так сделал.
В общем то, начиная с 98 есть такая ф-я: GetGUIThreadInfo
С ней проще.
Правда, пока никак не получается :))))
Или хэдл левый, или вообще 0/nil возвращается. Копаю....
Конкектно твоя ф-я всегда возвращает 0. :(((

винды XP, delphi 5


 
troits ©   (2002-04-30 19:31) [6]

>Deus
Ну, так уж и всегда ;)
Согласен, не учитывается случай, когда активное окно в вызывающем Thread-е (Тогда AttachThreadInput возвращает False)

Вот исправленная версия. У меня все работает (Win2k Delphi 5.0)

function GetFocusedWindow: HWND;
var
CurrThID, ThID: DWORD;
begin
result := GetForegroundWindow;
if result <> 0 then
begin
CurrThID := GetCurrentThreadId;
ThID := GetWindowThreadProcessId(result, // handle to window
nil // process identifier
);
result := 0;
if CurrThID = ThId then
result := GetFocus
else
begin
if AttachThreadInput(CurrThID, ThID, True) then
begin
result := GetFocus;
AttachThreadInput(CurrThID, ThID, False);
end;
end;
end;
end;


 
Deus ©   (2002-04-30 20:06) [7]

Да, точно, работает!
Большое спасибо!



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
1-88953
Ubermensch
2002-06-15 22:10
2002.06.27
Защита доступа к памяти


4-89067
Фантом
2002-04-29 16:50
2002.06.27
Подскажите


14-89023
cyborg
2002-05-18 19:07
2002.06.27
Домашние странички


3-88726
pilot
2002-06-04 09:35
2002.06.27
OnValiadate


1-88955
Big Daddy
2002-06-15 11:21
2002.06.27
Splash-screen