Перейти к содержанию

Нарисовать Windows Form в D3D9 игре


Рекомендуемые сообщения

Всем привет! Недавно реализовал полноценный d3d9 hook на C#

Теперь у меня стоит следующий вопрос - каким образом можно нарисовать Windows Form в D3D9 игре?

Это не какой-то там topmost, работает даже в полноэкранном режиме.

Пример на видео с 1:20 (видео не моё)

 

 

Ссылка на комментарий
Поделиться на другие сайты

Если это WinForm - то, откровенно говоря, я не представляю, как можно впихнуть управляемый код в неуправляемый. А если это обычное окно - то, в принципе, можно его сделать посредством вызовов WinAPI. Это, я думаю, вполне себе возможно.

Ссылка на комментарий
Поделиться на другие сайты

Где ты тут увидел д3д хук? Обычная вин формс (причем работает как диспетчер задач - поверх окон). + не факт что ксго в полноэкранном режиме, вдруг это в окне без рамки. Лично еще не видел ни 1 д3д меню сделанной на шарпе

  • Плюс 3
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Blackdots сказал:

Пример на видео

Это точно не: 

 

6 часов назад, Blackdots сказал:

d3d9 hook

а

 

1 час назад, roma91212 сказал:

Обычная вин формс

 

 

Ссылка на комментарий
Поделиться на другие сайты

Д3д хуки бесполезны в 2017 году, ВАК их палит на раз-два. Начиная с конца 2016 большинство читов используют оверлей для отрисовки. Хочешь такую форму на д3д, то рисуй прямоугольниками с основ окна, после выпадающее меню с анимацией и т.д

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

Спасибо за ответы, на сколько я знаю, обычный d3d overlay не будет работать если игру запустить в полноэкранном режиме (не fullscreen windowed, a fullscreen) или я ошибаюсь?

Все CS:GO читы которые я видел работают так-же и в полноценном фулскрине

Ссылка на комментарий
Поделиться на другие сайты

Только что, Blackdots сказал:

на сколько я знаю, обычный d3d overlay не будет работать если игру запустить в полноэкранном режиме (не fullscreen windowed, a fullscreen) или я ошибаюсь?

будет работать  d3d overlay

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Garik66 сказал:

Это точно не: 

 

Только что ещё раз попробовал таким методом, окно как-бы есть, если навести на него курсор то он будет меняться, но самого окна не видно и при клике игра сворачивается

 "В угол" . Garik66

 

Ссылка на комментарий
Поделиться на другие сайты

42 минуты назад, Blackdots сказал:

Только что ещё раз попробовал таким методом, окно как-бы есть, если навести на него курсор то он будет меняться, но самого окна не видно и при клике игра сворачивается

На видео я жму Alt Tab и, если ты жмёшь эти же клавиши, то конечно игра будет сворачиваться. Трейнер на видео не дописан, поэтому я и запускал игру в оконном режиме.

Видео снято, что бы подтвердить, что на видео, который ты привёл в пример, не d3d9 hook.

 

Ссылка на комментарий
Поделиться на другие сайты

51 minutes ago, Garik66 said:

На видео я жму Alt Tab и, если ты жмёшь эти же клавиши, то конечно игра будет сворачиваться. Трейнер на видео не дописан, поэтому я и запускал игру в оконном режиме.

Видео снято, что бы подтвердить, что на видео, который ты привёл в пример, не d3d9 hook.

 

Допустим, там не д3д хук, каким тогда образом форма появляется в полноэкранном режиме? Я много раз пробовал делать overlay, но из моего опыта просто overlay не работает в полном экране, надо запускать игру в окне.

Я могу записать на телефон, что такой способ не работает

Изменено пользователем Blackdots
Ссылка на комментарий
Поделиться на другие сайты

4 minutes ago, Blackdots said:

Допустим, там не д3д хук, каким тогда образом форма появляется в полноэкранном режиме? Я много раз пробовал делать overlay, но из моего опыта просто overlay не работает в полном экране, надо запускать игру в окне.

Я могу записать на телефон, что такой способ не работает

Я открою, возможно, страшную тайну, но "полноэкранный режим" - это окно с активной областью размером с весь экран. Почитай в MSDN про стили окон в Windows при их создании, там много интересных вещей связанных как с фокусом, так и с отрисовкой самих окон. 

Ссылка на комментарий
Поделиться на другие сайты

23 минуты назад, keng сказал:

Я открою, возможно, страшную тайну, но "полноэкранный режим" - это окно с активной областью размером с весь экран. Почитай в MSDN про стили окон в Windows при их создании, там много интересных вещей связанных как с фокусом, так и с отрисовкой самих окон. 

Кенг, я уже пытался сделать свою форму дочерней окна игры, делал форму передней (TopMost) но без результатов

З.Ы. делал я без внедрения в игру, или нужно создавать окно будучи в игровой памяти? (т.е. инжектить свою библиотеку)

Скрытый текст

[DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

        public Form1()
        {
            InitializeComponent();

            Process p = Process.GetProcessesByName("csgo")[0];

            SetParent(this.Handle, p.MainWindowHandle);

            new Thread(DoWork) { IsBackground = true }.Start();
        }

        private void DoWork()
        {
            while(true)
            {
                Invoke(new Action(() =>
                {
                    TopMost = true;
                }));
                Thread.Sleep(1);
            }
        }

 

// В угол по видимому не достаточно, читаем правила форума и фак, переделывать каждое сообщение на форуме у меня нет ни времени, ни желания. На первый раз устное предупреждение. Garik66

Ссылка на комментарий
Поделиться на другие сайты

20 минуты назад, Blackdots сказал:

делал форму передней (TopMost) но без результатов

Может это поможет.

А конкретно, что-то типа этого:

void UDF1::FormDeactivate(TObject *Sender)
{
     Application->RestoreTopMosts();
}

 

Ссылка на комментарий
Поделиться на другие сайты

53 минуты назад, Blackdots сказал:

З.Ы. делал я без внедрения в игру, или нужно создавать окно будучи в игровой памяти? (т.е. инжектить свою библиотеку)

 

Ещё скажи что хендл нулевой задавал и ждал появления окна в игре.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

6 minutes ago, partoftheworlD said:

 

Ещё скажи что хендл нулевой задавал и ждал появления окна.

Нет, я говорил, что окно появляется, но его не видно, курсор при навидении на край невидимого окна (в полноэкранной игре) меняется (т.е. resize) при попытке кликнуть или изменить размер окна которое и так не видно, игра сворачивается.

ЗЫ. Не стоит считать, что я не знаю что я делаю или говорю, 90% людей скажут, что реализовать d3d hook на чистом C# без оболочки C++ или чего-то там ещё невозможно, у меня хук на чистом C# без лишних библиотек а-ля EasyHook и без ассемблерных вставок. Я хочу узнать каким способом автор данного софта реализовал Winform внутри игры 

Изменено пользователем Blackdots
Ссылка на комментарий
Поделиться на другие сайты

54 минуты назад, Blackdots сказал:

Я хочу узнать каким способом автор данного софта реализовал Winform внутри игры 


Никаким, разбери его программу и посмотри, что d3d там вообще не используется и как говорили до этого игра использует оконный режим, а для установки поверх игры используется:

 

RunOnlyOneClass.ShowWindow((int)process.MainWindowHandle, 1);
RunOnlyOneClass.SetForegroundWindow(process.MainWindowHandle);
break;

 

// Global type: <Module>
// Entry point: CS_GO_Changer_v6.Program.Main
// Architecture: AnyCPU (32-bit preferred)
// This assembly contains unmanaged code.
// Runtime: .NET 4.0

ZLIoNNAlGek.jpg

 

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

Blackdots, посмотри, c purebasic не работает в полноэкраном, не отображается окно, другие не пробовал.

http://www.programmersforum.ru/showthread.php?t=69590&page=2

http://www.programmersforum.ru/showthread.php?t=4473

http://www.vbnet.ru/forum/show.aspx?id=146075

https://sim0n.wordpress.com/2009/03/29/c-creating-a-window-from-a-dll/

http://www.purebasic.info/phpBB3ex/viewtopic.php?f=7&t=4437&hilit=помогите+вставить+игру

http://www.purebasic.info/phpBB3ex/viewtopic.php?f=5&t=4442&hilit=помогите+вставить+игру

 

p.s как сообщил 

, то лучше подойдет, почитать с purebasic.

Изменено пользователем 2zolo2
Добавление
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Blackdots сказал:

Я хочу узнать каким способом автор данного софта реализовал Winform внутри игры 

Blackdots, кстати очень большая просьба, если всё-таки найдёшь решение как расположить форму над окном игры в полноэкранном режиме без Хука (если это конечно возможно), то выложи его в топике. Думаю это интересует многих на форуме.

Поэтому просьба не уподобляться некоторым пользователям, которые пишут: "Нашёл решение."                                                                    И всё - тема повисла.

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Blackdots сказал:

Нет, я говорил, что окно появляется, но его не видно, курсор при навидении на край невидимого окна (в полноэкранной игре) меняется (т.е. resize) при попытке кликнуть или изменить размер окна которое и так не видно, игра сворачивается.

ЗЫ. Не стоит считать, что я не знаю что я делаю или говорю, 90% людей скажут, что реализовать d3d hook на чистом C# без оболочки C++ или чего-то там ещё невозможно, у меня хук на чистом C# без лишних библиотек а-ля EasyHook и без ассемблерных вставок. Я хочу узнать каким способом автор данного софта реализовал Winform внутри игры 

Блин, ну тогда выложи хоть обычный перехват функции. Именно на чистом шарпе без всякой дряни.

Сделай тестовое приложение, а другим перехвати функцию, Думаю ваем интересно посмотреть как это можно реализовать.

Повторюсь, ни разу не видел перехват, ни д3д, ни обычной функции

Ссылка на комментарий
Поделиться на другие сайты

Just now, roma91212 said:

Блин, ну тогда выложи хоть обычный перехват функции. Именно на чистом шарпе без всякой дряни.

Сделай тестовое приложение, а другим перехвати функцию, Думаю ваем интересно посмотреть как это можно реализовать.

Повторюсь, ни разу не видел перехват, ни д3д, ни обычной функции

Вот кроме шуток, объясни мне, пожалуйста, какой смысл в том, чтобы использовать managed-среду (C#) для таких вот извращений?

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Just now, keng said:

Вот кроме шуток, объясни мне, пожалуйста, какой смысл в том, чтобы использовать managed-среду (C#) для таких вот извращений?

А почему бы и нет?)

Лично для меня C# читается и пишется на много проще, чем C++ да и по каким-то причинам я не хочу писать ни на чём кроме C#, но это уже личное.

Во-вторых, могу с уверенностью сказать, что перехватывать и вызывать функции игры на C# не сложнее, чем на C++

Мелкая обфускация и античиты а-ля VAC отпадают

На счёт скорости: пока-что не проверял, но по скольку .NET при запуске переводится в машинный код, не думаю, что эта разница в производительности будет существенно сказываться.

Иии.. то ощущение.

 

Вопрос знающим: WPF по-сути рисуется с помощью D3D, в теории должно быть возможно нарисовать WPF форму внутри д3д игры, сейчас буду делать reasearch по этому поводу, но если есть кто вкурсе как это реализовать - прошу.

Ссылка на комментарий
Поделиться на другие сайты

29 минуты назад, roma91212 сказал:

 Думаю ваем интересно посмотреть как это можно реализовать.

Повторюсь, ни разу не видел перехват, ни д3д, ни обычной функции


Ну посмотри. на C# по аналогии, только вместо ассемблерных вставок, там используются массивы байт вроде как. Как по мне на C++проще хук делать или всякие внутриигровые функции вызывать с объяевленим прототипа, да и интерфейс можно прикрутить например с помощью CLI(если ручками лень прописывать интерфейс)

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

В общем, ничего на нашёл.

Обговорили с человеком и остановились на том, что это не винформа, а очень сильно похожая менюшка на д3д.

Так же если кликнуть на иконку на верху слева (на окне) то не появляется меню, хотя должно.

Изменено пользователем Blackdots
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.