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

d3d hook код, ошибка...


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

Во общем надыбал d3d хук, по статье он должен быть рабочий(выводить текст) на 100%, но у меня ошибка:

"error C2373: 'DirectFunctions::temporaly_EndScene' : redefinition; different type modifiers"

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

http://webfile.ru/09...20cf44a94339272

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

/*---------------------------------------------------------------------------*/

Привет! DXHook.h:

class DirectFunctions
{
public:
HRESULT WINAPI temporaly_EndScene(LPDIRECT3DDEVICE9 pDevice);
};

/*---------------------------------------------------------------------------*/

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

Да, если записать так тогда вылазит две ошибки:

Error 1 error C2440: 'type cast' : cannot convert from 'HRESULT (__stdcall DirectFunctions::* )(LPDIRECT3DDEVICE9)' to 'PBYTE' ....\RenderD3DText\DllMain.cpp 13 1 RenderD3DText

Error 2 error C2660: 'DetourFunction' : function does not take 1 arguments ....\RenderD3DText\DllMain.cpp 13 1 RenderD3DText

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

Тебе всё сказано, что не может он функцию к массиву байт привести.

Объяви функцию как статичную, рано тебе еще об ООП думать.

И в коде сделать так reinterpret_cast<PBYTE>(&DirectFunctions::temporaly_EndScene).

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

А вы вот мне пишете как надо сделать это у вас все нормально работает мой проэкт с вашими изменениями?

А то я вот записал и так и так и опять ошибки...

Error 3 error LNK1281: Unable to generate SAFESEH image. ...\RenderD3DText\Release\RenderD3DText.dll RenderD3DText

Error 1 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(detours.obj) RenderD3DText

Error 2 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(disasm.obj) RenderD3DText

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

А вы вот мне пишете как надо сделать это у вас все нормально работает мой проэкт с вашими изменениями?

А то я вот записал и так и так и опять ошибки...

Error 3 error LNK1281: Unable to generate SAFESEH image. ...\RenderD3DText\Release\RenderD3DText.dll RenderD3DText

Error 1 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(detours.obj) RenderD3DText

Error 2 error LNK2026: module unsafe for SAFESEH image. ...\RenderD3DText\RenderD3DText\detours.lib(disasm.obj) RenderD3DText

Ну выруби ты SAFESEH в настройках компилятора, ё-маё!

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

Да да, все нагуглил и сделал, во общем dll'ка скомпилировалась но тольку просто ноль, после инжекта ничего нету.. Креша нету это норм, но и текста нету тоже.. Хотя на видео из которого я этот код и взял все норм работало... Попробую покопаться в коде, надо хоть посмотреть перехватывает ли во обще endSceen..

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

Вот такой вот подход подойдет?

https://yadi.sk/d/6slQHKnlZbccg

если че... C#

в проекте, в Preferences добавляешь

DXC.dll

EasyHook.dll

SharpDX.D3DCompiler.dll

SharpDX.Direct3D10.dll

SharpDX.Direct3D11.dll

SharpDX.Direct3D11.Effects.dll

SharpDX.Direct3D9.dll

SharpDX.dll

SharpDX.DXGI.dll

остальные кидаеш в папку с exe.


CaptureProcess _captureProcess;
int processId = 0;
Process _process;

private void button1_Click(object sender, EventArgs e)
{
if (_captureProcess == null)
{
button1.Enabled = false;
AttachProcess();
}
else
{
HookManager.RemoveHookedProcess(_captureProcess.Process.Id);
_captureProcess.CaptureInterface.Disconnect();
_captureProcess = null;
}

if (_captureProcess != null)
{
button1.Text = "Detach";
button1.Enabled = true;
}
else
{
button1.Text = "Atach";
button1.Enabled = true;
}
}

private void AttachProcess()
{
string exeName = textBox2.Text; // Имя процесса

Process[] processes = Process.GetProcessesByName(exeName);
foreach (Process process in processes)
{
// Simply attach to the first one found.

// If the process doesn't have a mainwindowhandle yet, skip it (we need to be able to get the hwnd to set foreground etc)
if (process.MainWindowHandle == IntPtr.Zero)
{
continue;
}

// Skip if the process is already hooked (and we want to hook multiple applications)
if (HookManager.IsHooked(process.Id))
{
continue;
}

Direct3DVersion direct3DVersion = Direct3DVersion.Direct3D10;
direct3DVersion = Direct3DVersion.AutoDetect;

CaptureConfig cc = new CaptureConfig()
{
Direct3DVersion = direct3DVersion,
ShowOverlay = true
};

processId = process.Id;
_process = process;

var captureInterface = new CaptureInterface();
try
{
_captureProcess = new CaptureProcess(process, cc, captureInterface);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}


break;
}
System.Threading.Thread.Sleep(10);

if (_captureProcess == null)
{
MessageBox.Show("В списке процессов не найдень: '" + exeName + "'");
}
}

private void button2_Click(object sender, EventArgs e)
{
_captureProcess.CaptureInterface.DisplayInGameText("Текст который надо показат в чужом окне", 20, 20, 20); // цыферки положения размер
}

Код целиком не мой, взял с интернета, (http://spazzarama.co...ct3d-api-hooks/ (имя автора не нашел))

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

Пробовал на играх:

Lineage2 C6 - работает

B&S (RU) - зависает после аттача

Need for speed shift - работает

Need for Speed Rivals - зависает после аттача

CS 1.6(D3DMode) - не происходит ничего после аттача.

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

Пробовал на играх:

Lineage2 C6 - работает

B&S (RU) - зависает после аттача

Need for speed shift - работает

Need for Speed™ Rivals - зависает после аттача

CS 1.6(D3DMode) - не происходит ничего после аттача.

забыл сказать, "Корректно работает в играх, где DirectX9 версия" 10 и 11 версия пока не корректно, возможно вообще не будет работать.

Может из за этого? Версии директ икса проверь.

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

Ну B&S'ка и CS 1.6 на d3dx9.dll работают вроде бы... Ну а по остальным возможно и да, особенно NFS Rivas точно не на d3dx9... Ну а так то по тебе я нашел короче какойт-то код, который ищет d3dDevice не по таблице а по сигнатуре, и вот он как раз нормально во всех играх работает(кроме NFS Rivas). Сейчас буду его ковырять что б оставить только кусок кода который выводит текст, а то там что-то типа менюшки при чом даже функциональная. И кстати код на C++..

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

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

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

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