Создать оверлейный экран во время работы игры/программы?

Кто-нибудь знает, как я могу создать наложение экрана во время работы программы? В основном во время игры. Если кто-то использовал xFire или Steam, они используют эту функцию.

Я создал winform, который запускает игру/программу, а затем сворачивает. Можно ли создать оверлей в той же winform? Спасибо за помощь! :)


person Joey Morani    schedule 03.04.2010    source источник


Ответы (1)


Я предполагаю, что вы имеете в виду оверлей.

Нет, создать его для большинства игр с помощью Windows Forms невозможно. Вам нужно будет прикрепить к поверхности DX вручную. Лучший способ сделать это — использовать собственный C/C++; теоретически возможно сделать это с помощью C#, но это будет чрезвычайно медленно и неуклюже.

person Dan Story    schedule 03.04.2010
comment
Ага, извини. Я имел в виду наложение, а не переполнение. Итак, могу ли я запустить программу на C++, когда программа на C# запускает игру? process.start может быть? Любая идея, как заставить программу C++ накладывать игру? Может быть, при нажатии определенной клавиши? Это означало бы, что программа C++ должна работать все время. - person Joey Morani; 03.04.2010
comment
Обычно процесс оверлея запускается перед игрой и ожидает создания поверхности DX в игровом процессе, а затем подключается. Вы можете автоматически отключить оверлей, когда игра уничтожает поверхность DX, если вы не хотите, чтобы он зависал без дела. ждем, когда он снова запустится. - person Dan Story; 03.04.2010
comment
Ну, вы частично ошибаетесь - вы можете присоединить управляемый код к неуправляемому, и это не так уж плохо. - person Migol; 03.04.2010
comment
Конечно, вы можете присоединить управляемый код для процесса управления к неуправляемому, но если вы попытаетесь использовать управляемый код для всего графического кода (используя PInvoke для связи с DX), он будет неработоспособен из-за накладных расходов на переключение контекста/упорядочивание на всех но самые мощные компьютеры. Вы, конечно, могли бы использовать SlimDX, чтобы преодолеть разрыв, но это библиотека C++/CLI, и поэтому вы больше не делаете это на C#. - person Dan Story; 04.04.2010
comment
просто небольшое исправление, SlimDX не C++/CLI, поскольку он доступен для Xbox 360. - person Matthew Olenik; 02.08.2010