using System.Runtime.InteropServices; namespace Daybreak.API; internal unsafe static partial class NativeMethods { public const int STD_OUTPUT_HANDLE = -11; public const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004; public const uint ENABLE_PROCESSED_OUTPUT = 0x0001; public const int WM_KEYDOWN = 0x0100; public const int WM_KEYUP = 0x0101; public const int WM_CHAR = 0x0102; public const int VK_LEFT = 0x25; public const int VK_RIGHT = 0x27; public const uint MEM_COMMIT = 0x1000; public const uint MEM_RESERVE = 0x2000; public const uint PAGE_EXECUTE_READWRITE = 0x40; [LibraryImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool AllocConsole(); [LibraryImport("kernel32.dll", SetLastError = true)] public static partial nint GetConsoleWindow(); [LibraryImport("kernel32.dll", SetLastError = true)] public static partial nint GetStdHandle(int nStdHandle); [LibraryImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool GetConsoleMode(nint hConsoleHandle, out uint lpMode); [LibraryImport("kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool SetConsoleMode(nint hConsoleHandle, uint dwMode); [LibraryImport("user32.dll")] public static partial nint SendMessageW(nint hWnd, int Msg, nint wParam, nuint lParam); [LibraryImport("kernel32.dll", SetLastError = true)] public static partial nint VirtualAlloc( nint lpAddress, nuint dwSize, uint flAllocationType, uint flProtect); [LibraryImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool VirtualProtect( void* lpAddress, nuint dwSize, uint flNewProtect, out uint lpflOldProtect); // Window enumeration public delegate bool EnumWindowsProc(nint hwnd, nint lParam); [LibraryImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static partial bool EnumWindows(EnumWindowsProc lpEnumFunc, nint lParam); [LibraryImport("user32.dll", SetLastError = true)] public static partial uint GetWindowThreadProcessId(nint hWnd, out uint lpdwProcessId); [LibraryImport("user32.dll", SetLastError = true, StringMarshalling = StringMarshalling.Utf8)] public static partial int GetClassNameA(nint hWnd, byte* lpClassName, int nMaxCount); [LibraryImport("kernel32.dll")] public static partial uint GetCurrentProcessId(); }