Главная страница
    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.007 c
1-88875
sasa2001
2002-06-14 10:19
2002.06.27
Как проверить зарег-ан ли в системе midas.dll и если нет сделать


7-89064
Cranium
2002-03-31 00:11
2002.06.27
Почему Винды начинают тормазить при записи в порт


3-88736
PETR_
2002-06-04 11:18
2002.06.27
DBGrid и логические поля


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


1-88784
Янушка
2002-06-16 12:35
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский