Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизНе стираемое окно. Найти похожие ветки
← →
alpet (2005-01-20 11:24) [0]Надо организовать нестираемое окно, средствами GDI. Что бы оно всегда и везде было видно, и в полноэкранных приложениях вроде игр и видеопроигрываетелей.
Сейчас оно выводится, но не всегда сразу, и регулярно затирается, что вызывает мерцание.
← →
TUser © (2005-01-20 11:41) [1]Я в таймере прописывал что-то типа Show или SetForegroundWindow - не помню точно. Это означает, что даже если твое Always on top - окошко перекроется какой-нибудь игрой или фильмом, - все равно через заданный интервал времени оно снова поЯВИтся. Вроде бы, FlashGet так же делает.
← →
alpet (2005-01-20 11:53) [2]В том то и проблема, что кода игра например работает, происходит запись в видеопамять, без отсечки области окон (DirectX). Я тут прикупил книгу "Программирование графики для Windows", и расматриваю различные методы отсечки. Когда окно работает в монопольном режиме (ввод) забираю все процессорные ресурсы, что бы не мерцало, но этот метод мне сильно не нравиться, как и приостановка потоков игры.
← →
DVM © (2005-01-20 12:06) [3]
> alpet (20.01.05 11:53) [2]
Такое возможно только в сотрудничестве с видеодрайвером. Но как конкретно это делается знают, пожалуй, только создатели драйверов для конкретных видеокарт. И не у всех драйверов такое есть. У NVidia лого так выводится.
← →
alpet (2005-01-21 11:47) [4]Проблема сейчас больше в другом: иногда просто не происходит рисование поверх изображения в игре, и приходится давать ей дополнительные кванты процессорного времени. Из-за чего это может быть, каким образом Direct3D может заблокировать вывод?
← →
wal © (2005-01-21 16:09) [5]А если через оверлей замутить?
Типа того http://www.delphimaster.ru/articles/directx/index.html
С уважением.
← →
Sapersky (2005-01-21 23:10) [6]А если через оверлей замутить?
Вряд ли получится. Насколько я могу судить, в полноэкранном режиме допускается одновременная работа только одного DX-приложения, хотя бы потому, что оно захватывает всю видеопамять, в т.ч. выделенную ранее другими приложениями.
GDI рисует прямо на экран (первичную поверхность, которая общая для всех), поэтому и может "мерцать" одновременно с DX.
Но ИМХО "мерцание окном" - варварский метод :)
Более тонкий (но и более сложный) - перехват DX-функций (методов DX-интерфейсов). Пример есть в составе библиотеки madCollection (madCodeHook) - ссылку не помню, но найти, думаю, можно без проблем.
← →
Eraser © (2005-01-21 23:33) [7]Sapersky
перехват DX-функций
А если приложение (игра) использует OpenGL? ;-)
Кроме "варарского" метода, других универсальных в виндовозе не сделаешь...
← →
Sapersky (2005-01-22 11:44) [8]А если приложение (игра) использует OpenGL? ;-)
Тогда перехват ф-ий OpenGL - это даже проще, т.к. это просто ф-ии, а не методы интерфейсов.
По теории перехвата ф-ий - см. книгу Рихтера (на сайте Подгорецкого есть).
Метод, действительно, не очень универсальный - нужно писать отдельно не только для OGL/DX, но и для каждой версии DX (для последних, по крайней мере).
← →
alpet (2005-01-27 17:07) [9]Мне бы сейчас хватило просто узнать заблокирована поверхность или нет. После разблокировки, я заморожу игру и нарисую окно.
Приложение кстати можно попробывать, его назначение как и у ArtMoney - взлом игр, только более изощеренный.
Доступно к скачиванию с сайтов:
www.alpet.hotmail.ru
www.idleman.narod.ru
← →
xShadow © (2005-01-27 18:09) [10]
> alpet (27.01.05 17:07) [9]
Серьёзная работа проделана!
← →
alpet (2005-01-28 14:30) [11]Я бы сказал что она только начата. Попробую воспользоваться оверлеями, вдруг поможет.
← →
alpet (2005-01-31 11:20) [12]Однако лучше и не пытатся. Многие игры используют оверлей для вывода вводных мультиков, и после такого вмешательства могут упасть. Надо что-то другое. Плохо что рендеринг происходит на уровне ядра, и грузит проц, даже когда все потоки игры приостановлены. Как можно отбить ресурсы у Direct3D, помимо завышения приоритетов?
← →
Eraser © (2005-01-31 14:44) [13]Без драйверов ядра тут никак не обойтись...
← →
alpet (2005-01-31 18:30) [14]Драйверы это будущее, когда дизассемблер заработает.
Мне сейчас бы больше подошел способ убеждения игры, в том что пользователь перешел к другой программе (собственно через ALT-TAB). Я пробывал посылать различные сообщения вроде WM_ACTIVATE, да все без толку.
← →
Sapersky (2005-01-31 18:40) [15]Ну вот, вспомнил ссылку, могу носом ткнуть:
http://www.madshi.net
Да, относительно трудоёмко, да, нужно разбираться в 3D API. Но результат должен быть наилучшим из всех возможных - вместо отбивания ресурсов и прочего насилия мы аккуратно встраиваемся в процесс рендеринга, так что игра ничего и не заметит :)
← →
alpet (2005-02-01 14:53) [16]Насколько я понял использовать перехват DX API. Не знаю справлюсь ли даже. Помоему для этой задачи есть и более простые решения.
Я заметил что при нажатии (без отпускания) ALT-TAB уверенно возникает окно с иконками других приложений. У меня тоже создаются окна, но в качестве элементов управления и дочерние по отношению к окну игры. Эти на этих окнах многие игры успешно рисуют, а на возникающем после нажатия ALT-TAB не могут, более того многие игры замирают. Как можно подобное окно создать?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c