-- Author: AylinCE -- Source: https://forum.cheatengine.org/viewtopic.php?p=5795321#5795321 -- Usage: -- - Copy this LUA file into CE's autorun folder -- ============================================================================ -- OpenDialog Preview Pane Controller Module (ByAylinCE) -- ============================================================================ local DialogPreviewManager = {} local tempFile = os.getenv("TEMP") .. "\\ce_reg_cmd.txt" -- Helper function to execute registry commands via cmd silencer local function execRegCmd(cmdStr) local fullCmd = string.format('cmd.exe /c "reg.exe %s > "%s" 2>&1"', cmdStr, tempFile) runCommand(fullCmd) local f = io.open(tempFile, "r") if f then f:close() os.remove(tempFile) end end --- Configures the preview pane state for OpenDialog -- @param state number: 0 = Force Disable Preview Pane, 1 = Force Enable Preview Pane function DialogPreviewManager.setPreviewState(state) local advKey = [[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]] local cidKey = [[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CIDOpen]] local mruKey = [[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\CIDSizeMRU]] if state == 1 then -- ENABLE PREVIEW PANE (1): -- Set registry flag to 1 execRegCmd(string.format('add "%s" /v "ShowPreviewPane" /t REG_DWORD /d 1 /f', advKey)) -- Send Alt+P key combination to toggle preview pane on if cached as hidden local t = createTimer(nil, false) t.Interval = 50 local tries = 0 t.OnTimer = function(sender) tries = tries + 1 local hwnd = findWindow(nil, MainForm.OpenDialog1.Title) if hwnd and hwnd ~= 0 then executeCodeLocalEx('user32.SetForegroundWindow', hwnd) executeCodeLocalEx('user32.keybd_event', 0x12, 0, 0, 0) -- Alt Down executeCodeLocalEx('user32.keybd_event', 0x50, 0, 0, 0) -- P Down executeCodeLocalEx('user32.keybd_event', 0x50, 0, 2, 0) -- P Up executeCodeLocalEx('user32.keybd_event', 0x12, 0, 2, 0) -- Alt Up sender.destroy() return end if tries >= 10 then sender.destroy() end end t.Enabled = true else -- DISABLE PREVIEW PANE (0): -- Clear cache to reset dialog geometry and set registry flag to 0 execRegCmd(string.format('delete "%s" /f', cidKey)) execRegCmd(string.format('delete "%s" /f', mruKey)) execRegCmd(string.format('add "%s" /v "ShowPreviewPane" /t REG_DWORD /d 0 /f', advKey)) end end -- ============================================================================ -- USAGE EXAMPLE -- ============================================================================ MainForm.OpenDialog1.Title = "Open File" MainForm.OpenDialog1.Options = '[ofHideReadOnly, ofFileMustExist, ofEnableSizing]' -- Test 0: Disabled (Close) -- Test 1: Enabled (Open) DialogPreviewManager.setPreviewState(0) --[[ if MainForm.OpenDialog1.execute() then print("Selected File: " .. MainForm.OpenDialog1.FileName) end ]]--