Копировать в буфер содержимое дочернего окна

Тема в разделе "WASM.BEGINNERS", создана пользователем Captain, 11 ноя 2009.

  1. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Всем привет! Народ, подскажите, можно ли скопировать данные из дочернего окна (TEdit, TButton), зная лишь хэндл этого дочернего окна? Подскажите ход действий, пожалуйста. Если не сложно, если кто-то уже делал подобное, то посмотрел бы код.

    ЗЫ Данные смешанные (картинки и текст).
     
  2. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    ничего не понятно, что значит данные дочернего окна
     
  3. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Код (Text):
    1. bool __stdcall EnumProc(void* hWnd,LPARAM lParam)
    2. {
    3.     char name_directory[255];
    4.     String strName;
    5.  
    6.     GetClassName(hWnd, name_directory, sizeof(name_directory)); // считываем название класса окна
    7.  
    8.     strName = name_directory;
    9.     if (strName == "[b]ChildWindow[/b]")
    10.     {
    11.         [b]handle[/b] = (unsigned int)hWnd;
    12.         return false;
    13.     }
    14.     return true;
    15. }
    16.  
    17. ..............
    18. //получаем хендл окна h
    19. ..............
    20. EnumChildWindows(h, (WNDENUMPROC)EnumProc, 0);
    ChildWindow - название класса дочернего окна
    handle - хэндл этого окна

    В этом окне есть текст и картинки. Мне их нужно скопипастить в буфер. Вопрос: как?
     
  4. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
     
  5. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    В 1.png показано само окно, а в 2.png показаны характеристики этого окна в утилите Spy++
     
  6. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    может тебе нужен скрин этого окна?
     
  7. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Мне нужен текст этого окна
     
  8. Klayd

    Klayd Степан

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    59
    Адрес:
    Киев
    ну тогда максимум что приходит в голову перебрать дочерние окна этого окна и с кажного взять текст GetWindowText
     
  9. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    У этого окна нет дочерних окон. Можете проверить даже на своей программе. Разместите в ей TLabel'ы и пройдитесь EnumChildWindows. Ни одного лейбла Вы не "поймаете"

    Народ, ну может как-нибудь можно вытащить текст из RECT? Ну неужели невыполнимая задача??
     
  10. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    А можно ли как-то перехватывать сообщения, посылаемые этому окну? Этот текст все равно ведь как-то отправляется этому окну?
     
  11. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    Я примерно такую же задачу решал, догадываюсь что за окно. Как не пытался я понять алгоритм отрисовки текста окна, ничё не вышло.

    Если данные, благодаря которым меняется текст в окне, приходят с интернета, то нужно посмотреть функцию
    recv (s, buf, len, flags)
    Она довольна проста для понимания того, ЧТО (не КАК) именно она делает. Но, честно говоря, мне так и не удалось выявить какую-то корреляцию между теми цифрами, которые кладутся в буфер и текстом в окне.

    Тем более, что приложение имело несколько окон. Разобраться, что для какого окна предназначается и как обрабатывается, я не смог и плюнул на это дело.
     
  12. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    amvoz
    HFMB (не делай так с мои мозгом больше)
     
  13. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Я так понял здесь мне никто и ничем не поможет. Жаль... Буду дальше разбираться
     
  14. amvoz

    amvoz Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2008
    Сообщения:
    653
    SPA а я тебя ни о чём не просил
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    прости ;(
     
  16. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    В этом окне нет текста. Если я правильно понял, в окне на аттаче фрагмент карты. Текст туда рендерится через DrawText или еще как-то (если не нарисован на карте и не является частью картинки). Его нельзя прочитать - можно только снять графическое содержимое. Если на карте есть какие-то флажки с текстом (TLabel? ок) - их можно попробовать перебрать через дочерние окна (не обязательно ЭТОГО окна - скорее всего, перебирать дочерние надо у родительского. Ну, исходя из логики ООП - создать объект "окно", создать объект "окно.картинка", создать объект "окно.надпись" и т.д. - то есть, надписи будут дочерними к окну внешнему, а не к окну-картинке. Причем могут быть сложные извраты:

    Главное окно
    - Окно с картинкой
    - Окна контролов (панелька масштабирования, кнопки)
    --- окна контролов (изображения на панельке, кнопках)
    - Окно с рамочкой
    --- окно с текстом внутри рамочки
    ...
    Соответственно, можно а) не обнаружить дочерних окон у картинки, поскольку их нет, и б) не обнаружить текста в дочерних окнах внешнего окна, потому что его там тоже нет =)
    )
     
  17. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    То окно, которое было в аттаче - не карта. Я его специально выделил красным цветом. Прикрепляю ролик. В ролике показано с помощью Spy++ окно с классом Grym_DirectoryViewGrid. Также я показал, где находится окно карты. Это окно с классом Grym_MapView (оно мне не нужно!!!)

    Я спрашивал, можно ли как-то перехватить сообщения, которые адресуются этому окну? Ведь текст как-то записывается туда!

    Прикрепляю ролик.
     
  18. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
     
  19. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Видимо архивы у вас не прикрепляются на форуме. мда уж...
     
  20. Captain

    Captain New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2009
    Сообщения:
    12
    Скажите, какой тип хука надо ставить, чтобы словить передачу текста в окно?