| 傳輸 | 基於 Winsock 的 RFC 6455,SHA-1 來自 CNG;文本 = JSON,二進制 = tap;每條連接一個線程(協議) |
| 按鍵、文字、指針 | 入隊 + PostMessage(hwnd, WM_LHI);子類化的 WndProc(遊戲線程)設置虛擬狀態,用 WM_KEYDOWN/WM_KEYUP、WM_CHAR、WM_MOUSEMOVE + 虛擬光標(鉤住的 GetCursorPos)調用遊戲的 WndProc,按真實輸入處理(MainGameCore::WndProc_PC::onKeyboardAction → HIDControllerGameCoreDesktop::onKeyDown)。派發後回覆 |
| 按鈕、滾輪、視角 | GameInput v2(GameInputRedist.dll)忽略窗口消息:鉤住 IGameInputReading::GetMouseState、GetKeyCount、GetKeyState;GetCurrentReading 在設備上報前取得虛擬讀數 |
| 不搶前臺 | launch:CreateProcessW + SW_SHOWNOACTIVATE;鉤住 ShowWindow、SetWindowPos、SetActiveWindow、BringWindowToTop、SetForegroundWindow;Z 序最底;吞掉 WM_ACTIVATEAPP(0)/WM_KILLFOCUS/WM_ACTIVATE(inactive)(不暫停)。鉤子在 load() 中安裝(窗口在 enable() 之前已存在)。偽造的“獲得焦點”跳過默認的 WM_ACTIVATE(鉤住的 DefWindowProcW)。BEDD_RETURN_FOCUS:遊戲啟動時若被激活,要重新聚焦的窗口 |
| 屏蔽真實輸入 | 吞掉 WM_KEY*/WM_MOUSE*/WM_INPUT/WM_POINTER*;虛擬化 ClipCursor(空操作)、SetCursorPos、GetCursorPos、GetPhysicalCursorPos、GetAsyncKeyState、GetKeyState、GetKeyboardState、GetForegroundWindow/GetActiveWindow/GetFocus(遊戲窗口)、GetRawInputData/GetRawInputBuffer(丟棄) |
| 截圖 | PrintWindow(PW_RENDERFULLCONTENT)(被遮擋/在屏幕外也可),WIC |
| 克隆 | 從不寫入原實例(LeviLauncher.exe instance list --json)。%LOCALAPPDATA%\BeDD\instances\<gameVersion>-<slot>:硬鏈接(跨卷時複製),獨立的 mods\、世界、選項;改動的文件整體替換,不原地編輯。加載器從 exe 所在文件夾解析(保持 exe 名):數據在其 Minecraft Bedrock 中 |
| 管理器 | BeDD.exe,每個登錄會話一個:DWM 縮略圖;launch 在調用方進程樹之外啟動它;通過發現文件附加(manager);關閉它會發送 close。遊戲窗口:從創建起就是屏幕外的工具窗口(鉤住 CreateWindowExW:enable() 前無消息泵),丟棄 SetWindowPos 移動,由監視器復位 |