Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Вниз

Как получить 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
1-88942
Tzota
2002-06-15 16:31
2002.06.27
Как создать что-то вроде своего диалогового окна?


14-89019
drpass
2002-05-26 22:32
2002.06.27
3:2 Динамо-Киев отдыхает!


1-88834
Miss
2002-06-17 11:47
2002.06.27
Поиск в базе по ключевым словам


14-89002
antistatic
2002-05-23 18:32
2002.06.27
Где можно скачать старые версии Windows


1-88819
Miss
2002-06-11 11:44
2002.06.27
Создание архива данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский