diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index f02baa890..0c5f80c21 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -76,7 +76,7 @@ internal class InterfaceManager : IDisposable, IServiceType private bool isOverrideGameCursor = true; [ServiceManager.ServiceConstructor] - private InterfaceManager() + private InterfaceManager(SigScanner sigScanner) { this.dispatchMessageWHook = Hook.FromImport( null, "user32.dll", "DispatchMessageW", 0, this.DispatchMessageWDetour); @@ -86,6 +86,24 @@ internal class InterfaceManager : IDisposable, IServiceType this.fontBuildSignal = new ManualResetEvent(false); this.address = new SwapChainVtableResolver(); + this.address.Setup(); + + this.presentHook = Hook.FromAddress(this.address.Present, this.PresentDetour); + this.resizeBuffersHook = Hook.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour); + + Log.Verbose("===== S W A P C H A I N ====="); + Log.Verbose($"Present address 0x{this.presentHook!.Address.ToInt64():X}"); + Log.Verbose($"ResizeBuffers address 0x{this.resizeBuffersHook!.Address.ToInt64():X}"); + + var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8"); + Log.Verbose($"WndProc address 0x{wndProcAddress.ToInt64():X}"); + this.processMessageHook = Hook.FromAddress(wndProcAddress, this.ProcessMessageDetour); + + this.setCursorHook.Enable(); + this.presentHook.Enable(); + this.resizeBuffersHook.Enable(); + this.dispatchMessageWHook.Enable(); + this.processMessageHook.Enable(); } [UnmanagedFunctionPointer(CallingConvention.ThisCall)] @@ -982,10 +1000,9 @@ internal class InterfaceManager : IDisposable, IServiceType } [ServiceManager.CallWhenServicesReady] - private void ContinueConstruction(SigScanner sigScanner, Framework framework) + private void ContinueConstruction() { - this.address.Setup(sigScanner); - framework.RunOnFrameworkThread(() => + this.framework.RunOnFrameworkThread(() => { while ((this.GameWindowHandle = NativeFunctions.FindWindowEx(IntPtr.Zero, this.GameWindowHandle, "FFXIVGAME", IntPtr.Zero)) != IntPtr.Zero) { @@ -1004,23 +1021,6 @@ internal class InterfaceManager : IDisposable, IServiceType { Log.Error(ex, "Could not enable immersive mode"); } - - this.presentHook = Hook.FromAddress(this.address.Present, this.PresentDetour, true); - this.resizeBuffersHook = Hook.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour, true); - - Log.Verbose("===== S W A P C H A I N ====="); - Log.Verbose($"Present address 0x{this.presentHook!.Address.ToInt64():X}"); - Log.Verbose($"ResizeBuffers address 0x{this.resizeBuffersHook!.Address.ToInt64():X}"); - - var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8"); - Log.Verbose($"WndProc address 0x{wndProcAddress.ToInt64():X}"); - this.processMessageHook = Hook.FromAddress(wndProcAddress, this.ProcessMessageDetour); - - this.setCursorHook.Enable(); - this.presentHook.Enable(); - this.resizeBuffersHook.Enable(); - this.dispatchMessageWHook.Enable(); - this.processMessageHook.Enable(); }); }