1 (изменено: nullmdn, 2021-10-25 16:07:25)

Тема: AHK: Как переопределить CreateDevice в полноэкранном режиме.

Direct3DCreate9(SDKVersion)
{
   if !DllCall("GetModuleHandle","str",(a_windir)"\SysWOW64\d3d9", "PTR")
   {
      MsgBox Error Direct3DCreate9
      Return
   }
   return DllCall((a_windir)"\SysWOW64\d3d9\Direct3DCreate9", "uint", SDKVersion)
}

IDirect3D9_CreateDevice(this,Adapter,DeviceType,hFocusWindow,BehaviorFlags,pPresentationParameters,ByRef ppReturnedDeviceInterface)
{
   hr := DllCall(NumGet(NumGet(this+0)+64),"uint",this,"uint",Adapter,"uint",DeviceType,"uint",hFocusWindow,"uint",BehaviorFlags,"uint",pPresentationParameters,"uint*",ppReturnedDeviceInterface)
   if hr
      MsgBox Error IDirect3D9_CreateDevice
}

d3d := Direct3DCreate9("32") 
VarSetCapacity(D3DPRESENT_PARAMETERS, 48+2*A_PtrSize, 0) 
NumPut(1, D3DPRESENT_PARAMETERS, 0)
NumPut(1, D3DPRESENT_PARAMETERS, 4)
NumPut(1, D3DPRESENT_PARAMETERS, 24)
NumPut(1, D3DPRESENT_PARAMETERS, 24+2*A_PtrSize)
IDirect3D9_CreateDevice(d3d, 0, 1, 0, 0x00000040, &D3DPRESENT_PARAMETERS, device)
EndScene := NumGet(NumGet(device+0)+42*A_PtrSize)


Вы можете получить адрес EndScene в оконном режиме так же, как описано выше. Но я не могу получить адрес EndScene, потому что не могу использовать CreateDevice в полноэкранном режиме. Итак, я искал решение. Я слышал, что обходной путь - получить адрес EndScene с помощью уже определенного CreateDevice. Кто-нибудь знает, как это реализовать?

2

Re: AHK: Как переопределить CreateDevice в полноэкранном режиме.

Когда приложение в полноэкранном режиме только одно устройство может быть привязано.
Переключайте в оконный режим, получайте EndScene, после чего переключайтесь в fullscreen.
Ну и совет, не мучьте автохотки, она для таких вещей не предназначена.
Учите c++ и читайте https://www.unknowncheats.me/forum/index.php