Re: Сокрытие окна 3D приложения и захват картинки
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 18.11.08 15:11
Оценка: 1 (1)
Здравствуйте, ProtecT, Вы писали:

PT>Берем произвольно любое D3D приложение. Запускаем (в окне).

PT>1. Можно ли это окно сделать невидимым, так чтобы приложение этого не заметило и продолжало спокойно работать?
PT>2. Можно ли произвести захват картинки из такого (скрытого) окна?
PT>3. Можно ли посылать в него события от клавы/мышки?

PT>Прошу ответить, возможно ли это? И посоветовать, где/что почитать по реализации данных вещей. Спасибо.


PT>ЗЫ. Исходников приложения, естественно, не имеется.


В общем случае вряд ли. Потому что:
1. При скрытии окна правильные приложения прекращают рендеринг (окно получает нотификации). Конечно, можно попробовать захучить этот момент, но это может нервировать антивирус...
2. Если обойти (1), то не думаю, что будут какие-то проблемы.
3. Тут очень вероятна засада с DI, ибо оно позволяет эксклюзивный захват устройств ввода. И самое плохое для вас, что эта техника используется в 9 из 10 DI-enabled приложений. Обойти можно разве что сварганив драйвер и посылая сообщения оттуда. Дело в том, что DI читает данные напрямую из драйвера (так сделано по соображениям производительности), и перехватить это дело в юзермоде весьма сложно (ну конечно можно весь DI прохучить, но это-то уж точно не понравится антивирусу, да и вылезет проблема портабельности — 32/64 бита).

Bottom line таков: сделать то, что вы задумали, реально, но очень вероятен сильный гемор в частностях
[КУ] оккупировала армия.
Сокрытие окна 3D приложения и захват картинки
От: ProtecT  
Дата: 16.11.08 22:11
Оценка:
Берем произвольно любое D3D приложение. Запускаем (в окне).
1. Можно ли это окно сделать невидимым, так чтобы приложение этого не заметило и продолжало спокойно работать?
2. Можно ли произвести захват картинки из такого (скрытого) окна?
3. Можно ли посылать в него события от клавы/мышки?

Прошу ответить, возможно ли это? И посоветовать, где/что почитать по реализации данных вещей. Спасибо.

ЗЫ. Исходников приложения, естественно, не имеется.
Re: Сокрытие окна 3D приложения и захват картинки
От: gmGreen  
Дата: 17.11.08 04:07
Оценка:
Здравствуйте, ProtecT, Вы писали:

PT>Берем произвольно любое D3D приложение. Запускаем (в окне).

PT>1. Можно ли это окно сделать невидимым, так чтобы приложение этого не заметило и продолжало спокойно работать?
PT>2. Можно ли произвести захват картинки из такого (скрытого) окна?
PT>3. Можно ли посылать в него события от клавы/мышки?

PT>Прошу ответить, возможно ли это? И посоветовать, где/что почитать по реализации данных вещей. Спасибо.


PT>ЗЫ. Исходников приложения, естественно, не имеется.



1. ShowWindow(SW_HIDE);
2. Да. Окно здесь не нужно, т.к. рендер идёт в поверхность
3. Разумеется. SendMessage() или PostMessage()
Re: Сокрытие окна 3D приложения и захват картинки
От: CTpaHHoe Россия http://ctpahhoe.blogspot.com/
Дата: 17.11.08 09:41
Оценка:
Здравствуйте, ProtecT, Вы писали:

PT>2. Можно ли произвести захват картинки из такого (скрытого) окна?

PT>3. Можно ли посылать в него события от клавы/мышки?

Передо мной пример подобного захвата (ссылка1 ссылка2) Здесь всё реализовано на перехватах API. И таких примеров в google code достаточно много — легко находятся по ключевым словам DETOUR_TRAMPOLINE и DirectX/DirectSound/D3D

Соответственно события клавиатуры-мыши можно посылать, делая вызовы к родным интерфейсам.

Скрыть окно наверняка можно, однако предполагаю некоторые трудности — приложение ведь может работать с главной поверхностью (primary surface).

А какая конечная цель вопроса — может быть найдутся способы решить проще?
сразу к делу, без приветов. осторожно, злой антиспам
Re[2]: Сокрытие окна 3D приложения и захват картинки
От: CTpaHHoe Россия http://ctpahhoe.blogspot.com/
Дата: 17.11.08 09:43
Оценка:
G>3. Разумеется. SendMessage() или PostMessage()
а это точно работает с D3D?
сразу к делу, без приветов. осторожно, злой антиспам
Re[2]: Сокрытие окна 3D приложения и захват картинки
От: ProtecT  
Дата: 17.11.08 12:50
Оценка:
CTH>А какая конечная цель вопроса — может быть найдутся способы решить проще?

Цель: Запуск ресурсоемких/тяжелых 3D приложений на мощной графической станции (q6600/9800GTX) и трансляция видеопотока легким клиентам по локалке (1 Gbit). Возможен запуск нескольких 3D приложений одновременно.

Что нужно:
1. запустить в скрытом (в худшем случае — свернутом) состоянии 3D приложение. Так, чтобы компьютером можно было бы пользоваться.
2. захватывать картинку с его окна и сохранять в файл/транслировать в сеть.
3. Передавать в запущенное приложение управляющие последовательности (с клавы/мыши)
Re[3]: Сокрытие окна 3D приложения и захват картинки
От: Bonavena Аргентина  
Дата: 20.11.08 16:01
Оценка:
Здравствуйте, ProtecT, Вы писали:

CTH>>А какая конечная цель вопроса — может быть найдутся способы решить проще?


PT>Цель: Запуск ресурсоемких/тяжелых 3D приложений на мощной графической станции (q6600/9800GTX) и трансляция видеопотока легким клиентам по локалке (1 Gbit). Возможен запуск нескольких 3D приложений одновременно.


А чем обычный ремут десктоп не подходит?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.