Как можно получить хэндл окошка в котором сейчас идет ввод, по типу GetFocus() но не обязательно для текущего процесса. Расставлять хуки и прочую мешуру чтоб попасть в активный процесс очень не хочется.
Здравствуйте Dr.Golova, Вы писали:
D.G>Как можно получить хэндл окошка в котором сейчас идет ввод, по типу GetFocus() но не обязательно для текущего процесса. Расставлять хуки и прочую мешуру чтоб попасть в активный процесс очень не хочется.
HWND GetForegroundWindow(VOID)
The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working).
Re[2]: Фокус ввода в чужом процессе
От:
Аноним
Дата:
20.06.02 10:26
Оценка:
Здравствуйте Odi$$ey, Вы писали:
O$>Здравствуйте Dr.Golova, Вы писали:
D.G>>Как можно получить хэндл окошка в котором сейчас идет ввод, по типу GetFocus() но не обязательно для текущего процесса. Расставлять хуки и прочую мешуру чтоб попасть в активный процесс очень не хочется.
O$>
O$>HWND GetForegroundWindow(VOID)
O$>
O$>The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working).
Звезды мне подсказывают что это не катит — так я получу максимум родительское окно, а если ввод идет в одно из дочерних (типа EditBox) — мне придется только догыдываться.
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Odi$$ey, Вы писали:
O$>>Здравствуйте Dr.Golova, Вы писали:
D.G>>>Как можно получить хэндл окошка в котором сейчас идет ввод, по типу GetFocus() но не обязательно для текущего процесса. Расставлять хуки и прочую мешуру чтоб попасть в активный процесс очень не хочется.
O$>>
O$>>HWND GetForegroundWindow(VOID)
O$>>
O$>>The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working).
А>Звезды мне подсказывают что это не катит — так я получу максимум родительское окно, а если ввод идет в одно из дочерних (типа EditBox) — мне придется только догыдываться.
После получения родительского окна придется спускаться по иерархии окон.
Когдато я это делал, кажется при помощи EnumChildWindows
Успехов
Здравствуйте Максим Алексейкин, Вы писали:
МА>Здравствуйте Аноним, Вы писали:
А>>Здравствуйте Odi$$ey, Вы писали:
O$>>>Здравствуйте Dr.Golova, Вы писали:
D.G>>>>Как можно получить хэндл окошка в котором сейчас идет ввод, по типу GetFocus() но не обязательно для текущего процесса. Расставлять хуки и прочую мешуру чтоб попасть в активный процесс очень не хочется.
O$>>>
O$>>>HWND GetForegroundWindow(VOID)
O$>>>
O$>>>The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working).
А>>Звезды мне подсказывают что это не катит — так я получу максимум родительское окно, а если ввод идет в одно из дочерних (типа EditBox) — мне придется только догыдываться.
МА>После получения родительского окна придется спускаться по иерархии окон. МА>Когдато я это делал, кажется при помощи EnumChildWindows МА>Успехов :)
И как же потом имея список дочерних окон определить в каком именно из них находится фокус ввода?
D.G>>И как же потом имея список дочерних окон определить в каком именно из них находится фокус ввода?
МА>Попробуй что-нибудь вроде этого: МА>BOOL __stdcall EnumCallback (HWND hwnd, LPARAM lParam)
Все конечно хорошо, даже учитывая что такой код работает при WINVER >= 0500 (читай 95 и NT SP2 уже не канают). Одно плохо — WS_ACTIVECAPTION вовсе не означает что фокус ввода в этом окошке, например в MSDEV (тот что IDE от VC++) таких окошек оказалось не меньше десятка, причем того в котором был фокус среди них небыло :) Видимо придется таки внедряться в чужой процесс и вызывать GetFocus() а так не хотелось таскать лишнюю длл :(