Как определить, какое дочернее окно в фокусе?

Тема в разделе "WASM.WIN32", создана пользователем Godness, 10 авг 2006.

  1. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Привет народ! После того как я перебрал Enum'ом все окна, мне нужно определить, какое дочернее окно имеет сейчас фокус ввода? Чтобы этому окну послать нужный мне текст.
    Я пробывал GetWindowsInfo, GetForegroundWindow, GetFocus - пока ничего не помогает! :dntknw:

    Как определить что в данном окне стоит курор ввода?
     
  2. green5

    green5 New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2006
    Сообщения:
    29
    Адрес:
    Protvino
    GetForegroundWindow==GetFocus?
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    GetLastActivePopup
     
  4. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    green5

    GetForegroundWindow, таки да, возвращает окно, с которым в текущий момент работает пользователь, - но возращается хэндл главного родительского окна приложения!!!, а не конкретного дочернего! А GetFocus, хотя и возвращает хэндл дочернего окна, которое сейчас имеет фокус ввода, но эта функция работает только в контексте твоего приложения!, т.е. с помощью нее ты только можеш "найти" свои окна, а не чужие!

    shoo

    Ща попробую эту функцию!
     
  5. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    shoo

    GetLastActivePopup вообще не из той оперы! Вообщем тоже не подходит... блин что делать?
     
  6. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    GetForegroundWindow();
    AttachThreadInput();
    GetActiveWindow();
    ?
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    объясни подробнее ситуацию. зачем ты делаешь энум. точнее, что ты перебераешь - десктопные окна, или дочерние окна. почему GetFocus не работает/не подходит.
    что у тебя за интерфейс. если мди - так может WM_MDIGETACTIVE поможет.
     
  8. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    shoo

    Выше я написал, что GetFocus, хотя и возвращает хэндл дочернего окна, которое сейчас имеет фокус ввода, но эта функция работает только в контексте твоего приложения!, т.е. с помощью нее ты только можеш "найти" свои окна, а не чужие! - а мне нужны чужие!
    Поэтому эта функция не подходит.

    Тут неважно, перебираю я окна или нет (и как я их перебираю), моя конечная цель - узнать какое окно сейчас имеет фокус (это окно чужого приложения!), чтобы ему послать некоторый текст. Вот и все. Это может быть мди и др. я не знаю, главное получить нэндл.

    nobodyzzz

    Можно подробнее? А то написал чего то - непонятно :dntknw:
    Например про функцию GetActiveWindow() - This function retrieves the window handle to the active window associated with the thread that calls the function. Что означает, что с помощью этой функции ты сможеш найти, только активное окно своего приложения!, а не чужого! К тому же я ее пробывал - не подходит, равно как и GetForegroundWindow
     
  9. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    The AttachThreadInput function attaches or detaches the input processing mechanism of one thread to that of another thread.
    Если я правильно понял то можно приатачить свой input processing mechanism к чужому проге и тогда по идее GetActiveWindow() должно канать, хотя я не уверен ибо не проверял=)
     
  10. Godness

    Godness Мёртвый дзена

    Публикаций:
    0
    Регистрация:
    27 ноя 2002
    Сообщения:
    90
    Нашлось таки решение! :) - подсказал один чувак

    Код (Text):
    1. var
    2.   Info: TGUIThreadInfo;
    3. begin
    4.   Info.cbSize := sizeof(Info);
    5.   if GetGUIThreadInfo(0, Info) then
    6.     ShowMessageFmt('Дескриптор окна, имеющего фокус: %.8x', [Info.hwndFocus])
    7. end