Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сграбить текст из окна. Созданного с помощью DirectX 
:(
    Опции темы
W4FhLF
Дата 25.6.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Приветствую всех.
Собстсвенно сабж. Что-то даже не представляю с какой стороны подступиться. Какие будут идеи?

Добавлено через 1 минуту и 28 секунд
Имеется ввиду, что в окне созданном на базе Direct'a есть поле для ввода текста, вот текст из этого поля и нужно получить.
Обдумывал вариант с хуком клавы, но неэффективно получается, надеюсь на другие идеи. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
WERITAS
Дата 28.6.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Привет smile

Разъясни пожалуйста что ты имеешь в виду:
1) Если окно, созданное самой программой и отрисованное в Директ 3Д, то это невозможно, т.к. глобального хендла, как у окон в винде, у этого окна нет. Текст в этом окне хранится в памяти этой проги.

2) Виндозное окно. Не понятно как с ним работать?


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
W4FhLF
Дата 30.6.2007, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(WERITAS @  28.6.2007,  21:21 Найти цитируемый пост)
1) Если окно, созданное самой программой и отрисованное в Директ 3Д, то это невозможно, т.к. глобального хендла, как у окон в винде, у этого окна нет. Текст в этом окне хранится в памяти этой проги.


Я понимаю, что хендла нет smile Но какие-то идентификаторы должны быть? Сама программа ведь этот текст вытаскивает? А как? Теми же DirectApi или сообщения какие свои? Хотя всё может быть граздо хуже, программа скорее всего просто в цикле ждёт нажатия клавиш, а потом их отрисовывает? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
WERITAS
Дата 30.6.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Цитата
Но какие-то идентификаторы должны быть?

Так указатель на объект! 


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
W4FhLF
Дата 1.7.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(WERITAS @  30.6.2007,  21:07 Найти цитируемый пост)
Так указатель на объект! 


Ну вот значит об этом мне и хотелось бы узнать подробнее. Что за объект, как к нему получить доступ, какие методы/свойства в общем случае. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
WERITAS
Дата 2.7.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Найти адрес строки и вытащить её из памяти. Хотя Виндовс скорей всего не даст рыться в памяти чужой программы (хотя есть читтерские программки, например, менять кол-во денег в игрушках smile )

Цитата
Обдумывал вариант с хуком клавы

А если текст там изначально введён? 

Цитата
Сама программа ведь этот текст вытаскивает? А как? 

У программы есть контрол, у него есть ф-ция (пускай GetText). НЕВОЗМОЖНО вызвать из другой программы эту GetText.

Вот еще один способ:
Скриншотишь это окно, берешь прогу (Ну хотя бы OpenCV) и, зная позицию в файле, где эта строчка, распознаешь текст.

P.S. Вообще эта проблема НЕ РАЗРЕШИМА. А если и разрешима, то только изуверскими способами.


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
W4FhLF
Дата 3.7.2007, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(WERITAS @  2.7.2007,  18:19 Найти цитируемый пост)
Найти адрес строки и вытащить её из памяти. Хотя Виндовс скорей всего не даст рыться в памяти чужой программы (хотя есть читтерские программки, например, менять кол-во денег в игрушках  )


Получить доступ к АП чужого процесса не проблема, но адрес строки нестатичен и я заранее не знаю, что искать. 

Цитата(WERITAS @  2.7.2007,  18:19 Найти цитируемый пост)
А если текст там изначально введён? 


Там будет некоторой событие, которое известно, что вызывается после введения текста в это окно, вот на него будет повешан перехват и в момент срабатывания перехвата нам надо получить текст и поля. 

Цитата(WERITAS @  2.7.2007,  18:19 Найти цитируемый пост)
У программы есть контрол, у него есть ф-ция (пускай GetText). НЕВОЗМОЖНО вызвать из другой программы эту GetText.


Да это всё непроблема, можно внедриться в программу и вызвать функцию из её контекста, только GetText работает ведь с GDI, а там ему откуда взяться? 

Цитата(WERITAS @  2.7.2007,  18:19 Найти цитируемый пост)
Вот еще один способ:Скриншотишь это окно, берешь прогу (Ну хотя бы OpenCV) и, зная позицию в файле, где эта строчка, распознаешь текст.


Ну это уже слишком smile

Цитата(WERITAS @  2.7.2007,  18:19 Найти цитируемый пост)
P.S. Вообще эта проблема НЕ РАЗРЕШИМА. А если и разрешима, то только изуверскими способами.


Да лишь бы работало smile



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Earnest
Дата 3.7.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



W4FhLF, если ты знаешь, как получить текст из этого окна (которое не окно) изнутри процесса (ведь внетренний код это как-то делает?) и можешь внедриться, то дальше просто пошли что-нибудь (WM_COPYDATA или что-то вроде) своему процессу.


--------------------
...
PM   Вверх
WERITAS
Дата 4.7.2007, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



W4FhLF 

О_О Афигеть.... Так прога на DX'е была написана тобой??????? Я тока щаз это понял... там 1000 способов передать этот текст: сокеты, файлы, тот же копидата

P.S. Расписал бы сразу поподробнее smile


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
W4FhLF
Дата 4.7.2007, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(Earnest @  3.7.2007,  18:38 Найти цитируемый пост)
W4FhLF, если ты знаешь, как получить текст из этого окна (которое не окно) изнутри процесса


Вот как раз это я и хочу узнать smile


Цитата(WERITAS @  4.7.2007,  16:58 Найти цитируемый пост)
О_О Афигеть.... Так прога на DX'е была написана тобой??????? Я тока щаз это понял... там 1000 способов передать этот текст: сокеты, файлы, тот же копидатаP.S. Расписал бы сразу поподробнее 


Да нет же, программа не моя, это вообще игра, писал её ессно тоже не яsmile 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
jonie
Дата 4.7.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



ну а фигли... итак имеем : событие нами успешно перехвачено и мы "внутри" - читай в отладчике и я пологаю ядерном 8)
далее ищем по всей памяти процесса строку. Нашли - ок. Не нашли ищем где можно приткнуться дебагером пораньше (я пологаю она должна быть).
Имеем адрес начала строки. Ищем что на него ссылается в памяти, не забывая что  у нас Inetel платформа => байтики переворачиваем.
Находим указатель на строку (их мб и не один).
Если указатель статичен  - все ок. Память выдялется будет и адресс выделенного блока будет в нем.
Ещели и он не статичен - то ставим брейкпоинт на запись по адресу указателя, и прогоняем финт еще раз, ищя где он записывается..(может это место как раз пойдет для взятия адреса этого указателя)...и т.д. до тех пор пока не найдем что-нибудь статиченое)
Строка - имеется в втду что мы туда введем) онож кудато копируется 8)
Обратно раскрутить не состояляет особого труда......

Это сообщение отредактировал(а) jonie - 4.7.2007, 22:59


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
W4FhLF
Дата 5.7.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



jonie, это всё замечательно. Но кто даст гарантию, что в следующем билде/версии или после патча наши привязки будут актуальны? А привязываться к конкретным версиям мне не хочется. Придётся в общем рыть DX интерфейсы и делать всё по уму. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Earnest
Дата 5.7.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(W4FhLF @  5.7.2007,  10:26 Найти цитируемый пост)
Придётся в общем рыть DX интерфейсы и делать всё по уму. 

Попробуй на их форуме спросить: если окно не самопальное, а сделано стандартными средствами DD, то должен быть способ.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0750 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.