Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.009 c
1-88874
Yuri Btr
2002-06-14 12:48
2002.06.27
Reset (file,mode)


1-88905
Alex
2002-06-14 17:06
2002.06.27
Transperency


8-88971
Диана
2002-02-16 12:30
2002.06.27
Заставка


3-88717
savc
2002-06-01 12:22
2002.06.27
Как в таблицу(заполнененую) добавить новое поле


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




   Наверх