Комментарии 32
Статья хорошая, по делу и без буллшита.
Толькот вот __declspec(naked) — чисто Microsoft-specific, в GCC например работать не будет.
Толькот вот __declspec(naked) — чисто Microsoft-specific, в GCC например работать не будет.
И да, опечатка в статье — «играет тушь» :)
Подозреваю что в gcc и *.def файлы работать не будут и много что ещё.
Да, я в начале статьи указал, что работа ведётся в Visual Studio 2010. К сожалению, в таких мелочах производители различных компиляторов не договорились между собой о единых стандартах.
Будет очень полезно, если вы приведёте аналогичные по действиям участки кода для GCC :)
Будет очень полезно, если вы приведёте аналогичные по действиям участки кода для GCC :)
Ух, спасибо за статью, интересно получилось. А главное ничего усложнённого излишне нет.
Круто, надо будет попробовать.
Лично я добавлю еще возможность включать\выключать принудительное удерживание мыши в окне.
Лично я добавлю еще возможность включать\выключать принудительное удерживание мыши в окне.
Проверил на Героях III, работает, НО курсор мышки не соответствует действительности, т.е. бегает на пол окна и исчезает.
Поиграйтесь с параметрам UseCursor — должно помочь в случае, если игра берёт координаты от угла экрана, а не своего окна (что бывает часто).
Курсор заработал, но остались атефакты (диалог в правом углу)
и так же и в игре, не инвентарь ни диалоги невидно полностью.
и так же и в игре, не инвентарь ни диалоги невидно полностью.
Для Героев III лучше использовать HD mod ;)
Вопрос не программиста, но игрока: в теории это позволит играть в оконном режиме во всю «классику» — Arcanum, Baldur’s Gate, Fallout, Icewind Dale, Planescape?.. Это же прекрасно, спасибо вам большое!
По поводу Baldur's Gate: есть сборки все-в-одном, вроде Baldur's Gate Trilogy. Обычно туда включают www.gibberlings3.net/widescreen/, который позволяет или играть в окне, или подстроить игру под ваше разрешение экрана.
Забыл. Всем советую darktech.ucoz.ru/ эту сборку.
Замечательно! Задумывался о создании подобной библиотеки т.к. xsplit не поддерживает стрим при фулл скрине, а тут все готовенькое, спасибо.
Это очень круто, спасибо! Как раз была одна идейка, Ваша статья очень поможет.
А с новыми играми не пойдет? Попробовал со Steam CS 1.6. Вылетает ошибка при разных комбинациях параметров. Так и не удалось запустить.
Спасибо, интересная статья. А не знаете, вот Detours для подобного использовать возможно?
Еще на тему прокси-dll есть полезная библиотечка Proxocket netresec.com/?b=1119573
Подменяет Winsock и дампит весь трафик в файл.
Подменяет Winsock и дампит весь трафик в файл.
Но надо отметить, что работать будет только с действительно старыми играми, которые используют ddraw. А более новые работают напрямую с D3D9!Direct3DCreate9, и там подменять придётся не столько функции, сколько целый интерфейс.
По материалам статьи набросал программку, генерирующую на основе выбранной библиотеки проект Visual Studio, формата 2008 либо 2010.
Забирать здесь: Исполняемый файл / исходники (AutoIt).
Забирать здесь: Исполняемый файл / исходники (AutoIt).
Статья хорошая, но для Windows DLL такие чудеса — не новость. А вот кто-нибудь знает о подобном решении для Linux ELF? Причем не в принципе как сделать, это-то понятно, а именно готовое reusable решение — на изобретение всех велосипедов самому не хватит жизни. LD_PRELOAD не предлагать, интересует именно proxy решение.
А чем LD_PRELOAD не решение? Тут же подвох в том, что Windows ищет сначала в директории приложения, а потом уже в системных. В Linux такого нет, а значит и не получится без явного использования LD_PRELOAD.
Что значит не получится? Как может не получиться следующий финт: оригинальную libfoo.so переименованием в libfoo2.so, создаем proxy-so libfoo.so которая форвардит вызовы на libfoo2.so?
Проблема с LD_PRELOAD в том, что он очень fragile: его нужно установить, кто угодно может его сбросить, он имеет ограничения по правам. Мой usecase: злые вендоры не хотят обновлять Android на пользовательских девайсах. Пользователи пытаются делать это сами. Корпорация добра Google подыгрвает вендорам, постоянно меняя API/ABI, в основном, именно ради изменений (ну там тип переименовали, C++ ABI). Основная проблема с интерфейсом EGL, связывающим вендоровский OpenGL и графическую подсистему Android. Пользователи хотят выразить свое отношение к происходящему написанием ABI-адаптера, чтобы OpenGL из предыдущих версий можно было использовать с новыми версиями Android. Причем парадигматически верно, чтобы решение всех этих гугло-вндоровских закавык было простое, как бублик и прозрачное, аки слеза, чтобы даже ребенок мог понять, как плохо стараются делать хорошо гугловендоры со своей стороны.
;-)
Проблема с LD_PRELOAD в том, что он очень fragile: его нужно установить, кто угодно может его сбросить, он имеет ограничения по правам. Мой usecase: злые вендоры не хотят обновлять Android на пользовательских девайсах. Пользователи пытаются делать это сами. Корпорация добра Google подыгрвает вендорам, постоянно меняя API/ABI, в основном, именно ради изменений (ну там тип переименовали, C++ ABI). Основная проблема с интерфейсом EGL, связывающим вендоровский OpenGL и графическую подсистему Android. Пользователи хотят выразить свое отношение к происходящему написанием ABI-адаптера, чтобы OpenGL из предыдущих версий можно было использовать с новыми версиями Android. Причем парадигматически верно, чтобы решение всех этих гугло-вндоровских закавык было простое, как бублик и прозрачное, аки слеза, чтобы даже ребенок мог понять, как плохо стараются делать хорошо гугловендоры со своей стороны.
;-)
Возможно ли зуммировать игру в окне в X раз, в пропорции? Например, в 1.4 раза.
Многие игры, поддерживающие только 640х480 смотрятся на больших экранах слишком мелко.
Многие игры, поддерживающие только 640х480 смотрятся на больших экранах слишком мелко.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создание прокси-dll для запуска DirectDraw игр в окне