2010-04-15 13 views
13

Czy ktoś może mi powiedzieć, jak podłączyć/nałożyć grę DirectX w C#?Hook/Overlay to gra DirectX?

Próbowałem uzyskać pełnoekranowe okienko C#, które nakładałoby się na grę, ale tak się nie stanie. Po krótkich poszukiwaniach dowiedziałem się, że muszę podpiąć grę, a następnie wyświetlić okno C#.

Czy ktoś może wyjaśnić, jak to zrobić? Czy byłbym w stanie wyświetlić formularz C# w grze DirectX?

+0

Ktoś? Jeśli ktoś widział nakładkę Steam lub xFire, chcę tego w ten sposób. Użytkownicy mogą surfować po sieci podczas grania w gry itp. –

Odpowiedz

5

(ujawnienie: Pracuję dla tej firmy)

Wypróbuj nasz Deviare API, ma funkcjonalność do przechwytywania obiektów COM z C#. Jest to zestaw obiektów COM, które mogą być używane z dowolnego języka programowania (obsługującego COM). Artykuł z kodem źródłowym pokazujący jak do przechwytywania wideo i dodać nakładki jest dostępna: instrumenting Direct3D applications to capture video and calculate FPS

COM Spy Console i Direct Sound Capture są dwa przykłady, które implementuje konsolę do podłączenia obiektów COM, takich jak DirectX.

Mam nadzieję, że to pomaga.

+0

Dzięki. Złożyłem wniosek o to.Czy mógłbyś wyjaśnić, w jaki sposób mogę uzyskać interfejs API Deviare, aby podłączyć grę Directx i wyświetlić coś? Dzięki jeszcze raz. –

+1

Możesz zadawać pytania na odpowiednich forach. Moją rekomendacją jest wykorzystanie artykułów jako punktu wyjścia. –

+1

To nie rozwiązuje problemu dla innych. Opisz, czym jest rozwiązanie. –

2

Ponieważ nie masz bezpośredniego dostępu do DirectX z C#, może to być trudne.

Z mojego ograniczonego rozumienia pojęcia:

DirectX Haki składa się z mocowania do kontekstu DirectX i manipulowania go, to może/nie może wymagać brudząc z pamięci innego programu, coś, co jest najlepiej dostosowane do C/C++

mogę się mylić, choć jednak jest to zaawansowany temat i moja gut mówi mi, może masz problemy pod .NET

+0

Co powiesz na podpięcie się za pomocą C++, a następnie uruchomienie programu C# z poziomu haka? Czy to nie sprawiłoby, że program C# się pokaże, czy też nie działa tak? –

+0

Nie, nie można wyświetlać programu C# w niezarządzanym C++ w ten sposób. Jedną z powszechnych sugestii jest użycie C++/CLI dla zarządzanego/niezarządzanego połowicznego interfejsu opakowania C++ z DirectX, ale także połowa "zarządzanej" biblioteki, którą C# może bezpośrednio wywołać. Ale wygląda brzydko. Spazzarrama (Justin S. ^) przykład podpięcia i nakładania działa doskonale i był nieocenionym zasobem. – Jason

16

Możesz spróbować my example on hooking the Direct3D 9 API using C#. To wykorzystuje EasyHook, open source. NET, który pozwala zainstalować haki z kodu zarządzanego do niezarządzanych funkcji.

Stosowany jest również SlimDX - jest to otok zarządzany przez otwarte środowisko wokół bibliotek Direct3D.

Podstępną częścią zahaczania jest określenie adresów funkcji wirtualnych obiektów COM. Odbywa się to w powyższym przykładzie za pomocą małej biblioteki pomocniczej języka C++, która znajduje adresy z tabeli VTable. [Aktualizacja: jest tam opublikowany komentarz pokazujący, jak uzyskać wskaźniki funkcji z VTable w C# również - biorąc pod uwagę IntPtr do obiektu com]

Przykład ten przechwytuje metodę EndScene IDirect3DDevice9, która jest również tam, gdzie chciałby narysować dowolne nakładki. Jeśli chodzi o wyświetlanie formularza w nakładce, nie jestem pewien, czy będzie tak łatwo - chodzi mi o to, że możesz renderować obraz z wystarczającą łatwością, ale będziesz musiał przechwycić dane wejściowe i ręcznie odpowiedzieć/przekazać zdarzenia do formularza w pytanie właściwie. Powodzenia!

+1

Oto zaktualizowana wersja, która ma bardzo prosty przykład nakładki - również 100% C#: [Direct3D 9 , 10 nakładek] (http://spazzarama.wordpress.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks/) –