Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.220.140.5] |
|
Сообщ.
#1
,
|
|
|
Как получить хандл активного окна в Винде?
GetActiveWindow - возвращает только хандлы окон своего приложения, а как любое окгно перехватить на котором находиться фокус ввода. |
Сообщ.
#2
,
|
|
|
GetForeGroundWindow - верхнее окно
GetActiveWindow - активное окно GetFocus - активный контрол. Для использования двух последних надо приатачить свой процесс к своему, чтобы исследуемое окно стало "своим" (AttachThreadInput) |
Сообщ.
#3
,
|
|
|
Цитата Song @ 15.01.04, 19:47 GetForeGroundWindow - верхнее окно GetActiveWindow - активное окно GetFocus - активный контрол. Для использования двух последних надо приатачить свой процесс к своему, чтобы исследуемое окно стало "своим" (AttachThreadInput) GetForeGroundWindow наверно непойдет т.к. Если я ввожу текст в окно, о над ним окно с пораметром всегда повех то возврата небудет. AttachThreadInput а к какому процессу приоттачивать, если мне нужны все окна Винды? |
Сообщ.
#4
,
|
|
|
Почему все? Имеющее фокус приложение только одно!
|
Сообщ.
#5
,
|
|
|
Цитата Song @ 15.01.04, 21:16 Почему все? Имеющее фокус приложение только одно! Ну так как это одно окно перехватить? |
Сообщ.
#6
,
|
|
|
GetForeGroundWindow - вернёт handle этого окна (окна-родителя).
Далее AttachThreadInput и GetFocus |
Сообщ.
#7
,
|
|
|
Спасибо надо попробовать.
|
Сообщ.
#8
,
|
|
|
>Song - GetForeGroundWindow вернет верхнее окно и необязательно с фокусом ввода (например с HWND_TOPMOST)
а ведь для AttachThreadInput вобще-то хэндлы не нужны, а спец. идентификаторы Цитата BOOL AttachThreadInput( DWORD idAttach, // thread to attach DWORD idAttachTo, // thread to attach to BOOL fAttach // attach or detach ); вобщем - что-то тут не так... Добавлено в : а ну как аттач сделать понятно: AttachThreadInput(GetWindowThreadProcessId(GetForegroundWindow,nil),GetCurrentThreadId,true); но все же GetForegroundWindow - это, имхо, не то... |
Сообщ.
#9
,
|
|
|
ZEE, вот тебе отрывок из моей программы:
{ Процедура выполняет вставку текста в контрол} Procedure TAbsentForm.CommentInsert; Var Reason:String; Temp:HWND; Begin { Дополнение 18.01.2003 } Flag:=True; { 18.01.2003 } { Т.к. GetFocus работает для окон только текущего процесса } { добавляем текущий процесс к нашему } AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForeGroundWindow,nil),True); { Запрос комментария } { Дополнение 18.01.2003 } { Активизируем наше приоложение } SetForeGroundWindow(Application.Handle); { 18.01.2003 } Reason:=InputBox('Ввод коментария','Введите причину удаления сообщения или оставьте пустую строку:',''); { Если комментарий был введён добавляем его в строку } IF Reason<>'' then Reason:='[color=Red][size=1][b]Примечание: [/b][i]'+Reason+'[/i][/size][/color]'; { Теперь вставляем текст } SendMessage(GetFocus,WM_SETTEXT,0,LongInt(PChar('[color=Red][Удалено модератором][/color]'#13#10+Reason))); { Разъеденяем процессы } AttachThreadInput(GetCurrentThreadID,GetWindowThreadProcessId(GetForeGroundWindow,nil),False); { Дополнение 18.01.2003 } Flag:=False; { 18.01.2003 } End; |
Сообщ.
#10
,
|
|
|
ааа, все понял - я просто сразу не заметил в хелпе такую строчку
The GetForegroundWindow function returns the handle of the foreground window (the window with which the user is currently working)... значит ответ на сабж будет всего лишь: GetForegroundWindow() - и все (даже без аттачей) |
Сообщ.
#11
,
|
|
|
ZEE, GetForeGroundWindow вернёт окно-родителя!!! А ему нужен чайлдовый контрол.
|
Сообщ.
#12
,
|
|
|
Цитата Song, 17.01.04, 10:13 А ему нужен чайлдовый контрол я этого в вопросе не заметил что-то |
Сообщ.
#13
,
|
|
|
Цитата Stavros, 15.01.04, 17:24 возвращает только хандлы окон своего приложения, а как любое окгно перехватить на котором находиться фокус ввода. Сложно представить форму с фокусом ввода в практическом смысле |
Сообщ.
#14
,
|
|
|
да... об этом я не подумал... мне показалось надо просто найти окно у кот. где-то там на нем (все равно где) можно что-то ввести - в вопросе же не спрашивали "как че то сделать с тем окном", а всеголишь найти его...
ну все - зато надеюсь для Stavros'а тут инфы будет достаточно... |