--[===[ Author: YoucefHam Email: youcefham20@gmail.com Discord: YoucefHam#5634 ADD to Memory Viewer window the Menu "Window" "Vertical", => The default Cheat Engine window. "Horizontal", => Make the Found list and Address List Side by Side. "Auto Switch", => Enable/Disable change mode automatically when the windows is maximized ADD to Memory Viewer window the Menu "Code" & "Hex" "Code", => Hide/Show the Hex Viewer. "Hex", => Hide/Show the Disassembler. ]===] local function MemoViwe_Wide_Window(MemoView) local MemoView = MemoView or getMemoryViewForm() if MemoView.Menu.Items.miWideWindow ~= nil then return end local MemoView_WW_State = false local MemoView_WW_State_ = false local MemoView_WWDisassembler_State = false local MemoView_WWHexView_State = false local MemoView_WW_AutoSwitch = false local SavePosition_State = true local Splitter = MemoView['Splitter1'] local Disassembler = MemoView['Panel1'] local HexView = MemoView['Panel4'] local function MemoView_miWWVerticalClick() end local function MemoView_miWWHorizontalClick() end local function MemoView_miWWAutoSwitchClick() end local function MemoViewWW_AddMenu() end local function MemoView_miWWDisassemblerClick() end local function MemoView_miWWHexViewClick() end local function MemoView_WWLoadPosition() end local function MemoView_WWSavePosition() end local CESettings = getSettings('Wide Window\\MemoView') if CESettings.Value['MemoView_WW_AutoSwitch'] ~= '' then if CESettings.Value['MemoView_WW_AutoSwitch'] == 'true' then MemoView_WW_AutoSwitch = true else MemoView_WW_AutoSwitch = false end else CESettings.Value['MemoView_WW_AutoSwitch'] = tostring(MemoView_WW_AutoSwitch) end -- Set Default values for MemoView if #(CESettings.getBinaryValue(MemoView.Name..'_Pos_NV')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(MemoView.Top) Form_Pos.writeDword(MemoView.Left) Form_Pos.writeDword(MemoView.Width) Form_Pos.writeDword(MemoView.Height) CESettings.setBinaryValue(MemoView.Name..'_Pos_'..'NV',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(MemoView.Name..'_Pos_NH')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(MemoView.Top) Form_Pos.writeDword(MemoView.Left) Form_Pos.writeDword(MemoView.Width * 1.8) Form_Pos.writeDword(MemoView.Height) CESettings.setBinaryValue(MemoView.Name..'_Pos_'..'NH',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(MemoView.Name..'_Pos_MV')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(-5) Form_Pos.writeDword(-5) Form_Pos.writeDword(getScreenWidth()) Form_Pos.writeDword(getScreenHeight() * 0.95) CESettings.setBinaryValue(MemoView.Name..'_Pos_'..'MV',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(MemoView.Name..'_Pos_MH')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(-5) Form_Pos.writeDword(-5) Form_Pos.writeDword(getScreenWidth()) Form_Pos.writeDword(getScreenHeight() * 0.95) CESettings.setBinaryValue(MemoView.Name..'_Pos_'..'MH',Form_Pos) Form_Pos.destroy() end -- Set Default values for HexView if #(CESettings.getBinaryValue(HexView.Name..MemoView.Name..'_Pos_'..'NV')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(0) Form_Pos.writeDword(0) Form_Pos.writeDword(MemoView.Width) Form_Pos.writeDword(MemoView.Height / 2) CESettings.setBinaryValue(HexView.Name..MemoView.Name..'_Pos_'..'NV',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(HexView.Name..MemoView.Name..'_Pos_NH')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(0) Form_Pos.writeDword(0) Form_Pos.writeDword(MemoView.Width / 2) Form_Pos.writeDword(MemoView.Height) CESettings.setBinaryValue(HexView.Name..MemoView.Name..'_Pos_'..'NH',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(HexView.Name..MemoView.Name..'_Pos_MV')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(0) Form_Pos.writeDword(0) Form_Pos.writeDword(MemoView.Width) Form_Pos.writeDword(MemoView.Height / 2) CESettings.setBinaryValue(HexView.Name..MemoView.Name..'_Pos_'..'MV',Form_Pos) Form_Pos.destroy() end if #(CESettings.getBinaryValue(HexView.Name..MemoView.Name..'_Pos_MH')) <= 0 then local Form_Pos = createStringStream() Form_Pos.writeDword(0) Form_Pos.writeDword(0) Form_Pos.writeDword(MemoView.Width / 2) Form_Pos.writeDword(MemoView.Height) CESettings.setBinaryValue(HexView.Name..MemoView.Name..'_Pos_'..'MH',Form_Pos) Form_Pos.destroy() end --[[ Save form position (Top, Left, Width, Height) ]] function MemoView_WWSavePosition(Form,Condition,Status) if Condition == true then local Form_Pos = createStringStream() Form_Pos.writeDword(Form.Top) Form_Pos.writeDword(Form.Left) Form_Pos.writeDword(Form.Width) Form_Pos.writeDword(Form.Height) CESettings.setBinaryValue(Form.Name..(Form.Parent and Form.Parent.Name or '')..'_Pos_'..Status,Form_Pos) Form_Pos.destroy() end end --[[ Load and set form position (t:Top, l:Left, w:Width, h:Height) ]] function MemoView_WWLoadPosition(Form,Conditions,properties,Status) if Conditions == true then if (properties ~= '' or properties ~= nil) and string.match(properties:lower(),'[tlwh]+') ~= nil then local Form_Pos = createStringStream() Form_Pos.write( CESettings.getBinaryValue(Form.Name..(Form.Parent and Form.Parent.Name or '')..'_Pos_'..Status)) if #(CESettings.getBinaryValue(Form.Name..(Form.Parent and Form.Parent.Name or '')..'_Pos_'..Status)) <= 0 then return end if string.match(properties:lower(),'[t]+') ~= nil then Form_Pos.Position = 0 Form.Top = Form_Pos.readDword() end if string.match(properties:lower(),'[l]+') ~= nil then Form_Pos.Position = 4 Form.Left = Form_Pos.readDword() end if string.match(properties:lower(),'[w]+') ~= nil then Form_Pos.Position = 8 Form.Width = Form_Pos.readDword() end if string.match(properties:lower(),'[h]+') ~= nil then Form_Pos.Position = 12 Form.Height = Form_Pos.readDword() end Form_Pos.destroy() end end end --Set window to Vertical mode function MemoView_miWWVerticalClick() if not MemoView_WW_State then return end MemoView_WW_State = false SavePosition_State = false MemoView.Menu.Items.miWideWindow.miWWHorizontal.Checked = false MemoView.Menu.Items.miWideWindow.miWWVertical.Checked = true --Make Items Visible Splitter.Visible = true --Splitter Disassembler.Visible = true --Disassembler Disassembler.Constraints.MinWidth = 0 Disassembler.Constraints.MinHeight = 100 HexView.Visible = true --HexView HexView.Constraints.MinWidth = 0 HexView.Constraints.MinHeight = 100 --Adjust HexView to the bottom of the window HexView.Align = alBottom -- HexView.Top = Splitter.Top + Splitter.Height -- HexView.Left = Splitter.Left HexView.BorderSpacing.Left = 0 --Adjust Splitter to the bottom of the Disassembler Splitter.Align = alBottom Splitter.Top = HexView.Top - Splitter.Height Splitter.Left = HexView.Left --Adjust Disassembler to the Top Disassembler.Align = alClient Disassembler.Top = 0 Disassembler.Left = 0 Disassembler.BorderSpacing.Right = 0 --Load MemoView Width MemoView_WWLoadPosition( MemoView, MemoView.WindowState ~= 'wsMinimized', 'w', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') --Load Disassembler Height MemoView_WWLoadPosition( HexView, true , 'h', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') if Disassembler.Height > MemoView.Height then Disassembler.Height = MemoView.Height / 2 MemoView_WWSavePosition( HexView, true , (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') end SavePosition_State = true end --Set window to Horizontal mode function MemoView_miWWHorizontalClick() if MemoView_WW_State then return end MemoView_WW_State = true SavePosition_State = false MemoView.Menu.Items.miWideWindow.miWWVertical.Checked = false MemoView.Menu.Items.miWideWindow.miWWHorizontal.Checked = true --Make Items Visible Splitter.Visible = true --Splitter Disassembler.Visible = true --Disassembler Disassembler.Constraints.MinWidth = 100 Disassembler.Constraints.MaxWidth = 0 Disassembler.Constraints.MinHeight = 100 Disassembler.Constraints.MaxHeight = 0 HexView.Visible = true --HexView HexView.Constraints.MinWidth = 100 HexView.Constraints.MaxWidth = 0 HexView.Constraints.MinHeight = 100 HexView.Constraints.MaxHeight = 0 --Adjust HexView to the right of the window HexView.Align = alRight HexView.BorderSpacing.Left = 2 --Adjust Splitter to the right of the Disassembler Splitter.Align = alRight Splitter.Top = HexView.Top Splitter.Left = HexView.Left - Splitter.Width --Adjust Disassembler to the Left Disassembler.Align = alClient Disassembler.Top = 0 Disassembler.Left = 0 Disassembler.BorderSpacing.Right = 5 --Load MemoView Width MemoView_WWLoadPosition( MemoView, MemoView.WindowState ~= 'wsMinimized', 'w', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'H') --Load Disassembler Width MemoView_WWLoadPosition( HexView, true , 'w', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'H') if Disassembler.Width > MemoView.Width then Disassembler.Width = MemoView.Width / 2 MemoView_WWSavePosition( HexView, true , (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'H') end SavePosition_State = true end --Set window to Auto Switch if window Maximized function MemoView_miWWAutoSwitchClick(sender) sender.Checked = true if MemoView_WW_AutoSwitch == true then MemoView_WW_AutoSwitch = false sender.RadioItem = true else MemoView_WW_AutoSwitch = true sender.RadioItem = false if not MemoView_WW_State and MemoView.WindowState == 'wsMaximized' then MemoView_miWWHorizontalClick() MemoView_WWLoadPosition( HexView, true , 'w', 'MH') end end CESettings.Value['MemoView_WW_AutoSwitch'] = tostring(MemoView_WW_AutoSwitch) end --Show/Hide Disassembler function MemoView_miWWHexViewClick() if MemoView_WW_State then if Disassembler.Visible == false then --Show Dissem H MemoView_WWDisassembler_State = false Splitter.Visible = true Disassembler.Enabled = true Disassembler.Visible = true MemoView_WW_State = false MemoView_miWWHorizontalClick() --Load Disassembler Width MemoView_WWLoadPosition( HexView, true , 'w', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'H') else --Hide Dissem H if HexView.Visible == false then MemoView_miWWDisassemblerClick() end MemoView_WWDisassembler_State = true Splitter.Visible = false Disassembler.Enabled = false Disassembler.Visible = false HexView.Align = alClient end else if Disassembler.Visible == false then --Show Dissem V MemoView_WWDisassembler_State = false Splitter.Visible = true Disassembler.Enabled = true Disassembler.Visible = true MemoView_WW_State = true MemoView_miWWVerticalClick() --Load Disassembler Width MemoView_WWLoadPosition( HexView, true , 'h', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') else --Hide Dissem V if HexView.Visible == false then MemoView_miWWDisassemblerClick() end MemoView_WWDisassembler_State = true Splitter.Visible = false Disassembler.Enabled = false Disassembler.Visible = false HexView.Align = alClient end end end --Show/Hide Hex View function MemoView_miWWDisassemblerClick() if MemoView_WW_State then if HexView.Visible == false then --Show Hxd H MemoView_WWHexView_State = false Splitter.Visible = true HexView.Enabled = true HexView.Visible = true MemoView_WW_State = false MemoView_miWWHorizontalClick() --Load Disassembler Width MemoView_WWLoadPosition( HexView, true , 'w', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'H') else --Hide Hxd H if Disassembler.Visible == false then MemoView_miWWHexViewClick() end MemoView_WWHexView_State = true Splitter.Visible = false HexView.Enabled = false HexView.Visible = false end else if HexView.Visible == false then --Show Hxd V MemoView_WWHexView_State = false Splitter.Visible = true HexView.Enabled = true HexView.Visible = true MemoView_WW_State = true MemoView_miWWVerticalClick() --Load Disassembler Width MemoView_WWLoadPosition( HexView, true , 'h', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') else --Hide Hxd V if Disassembler.Visible == false then MemoView_miWWHexViewClick() end MemoView_WWHexView_State = true Splitter.Visible = false HexView.Enabled = false HexView.Visible = false Disassembler.Align = alClient end end end -- Save Splitter position when Moved if Splitter.OnMoved ~= nil then if Old_Splitter_OnMoved == nil then local Old_Splitter_OnMoved = Splitter.OnMoved end end Splitter.OnMoved = function(...) MemoView_WWSavePosition( HexView, true , (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..(MemoView_WW_State and 'H' or 'V' )) if Old_Splitter_OnMoved ~= nil then Old_Splitter_OnMoved(...) end end --Save window position when resized if MemoView.OnResize ~= nil then if Old_MemoView_OnResize == nil then local Old_MemoView_OnResize = MemoView.OnResize end end MemoView.OnResize = function(...) MemoView_WWSavePosition(MemoView , MemoView.WindowState ~= 'wsMinimized' and SavePosition_State == true , (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..(MemoView_WW_State and 'H' or 'V')) if Old_MemoView_OnResize ~= nil then Old_MemoView_OnResize(...) end end --Save window position when moved or resized if MemoView.OnChangeBounds ~= nil then if Old_MemoView_OnChangeBounds == nil then local Old_MemoView_OnChangeBounds = MemoView.OnChangeBounds end end MemoView.OnChangeBounds = function(...) MemoView_WWSavePosition(MemoView , MemoView.WindowState ~= 'wsMinimized' and SavePosition_State == true , (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..(MemoView_WW_State and 'H' or 'V')) if Old_MemoView_OnChangeBounds ~= nil then Old_MemoView_OnChangeBounds(...) end end --Set window to Horizontal mode when window is Maximized if MemoView.OnWindowStateChange ~= nil then if Old_MemoView_OnWindowStateChange == nil then local Old_MemoView_OnWindowStateChange = MemoView.OnWindowStateChange end end MemoView.OnWindowStateChange = function(...) if Old_MemoView_OnWindowStateChange ~= nil then Old_MemoView_OnWindowStateChange(...) end if MemoView.WindowState == 'wsMinimized' then return end SavePosition_State = false if MemoView.WindowState == 'wsMaximized' then MemoView_WW_State_ = MemoView_WW_State if MemoView_WW_State == false then if MemoView_WW_AutoSwitch == true then MemoView_miWWHorizontalClick() SavePosition_State = false MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'MH') MemoView_WWLoadPosition( HexView, true , 'w', 'MH') else MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'MV') MemoView_WWLoadPosition( HexView, true , 'h', 'MV') end else MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'MH') MemoView_WWLoadPosition( HexView, true , 'w', 'MH') end elseif MemoView.WindowState == 'wsNormal' then if MemoView_WW_State == true then if MemoView_WW_State_ == false then MemoView_miWWVerticalClick() SavePosition_State = false MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'NV') MemoView_WWLoadPosition( HexView, true , 'h', 'NV') else MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'NH') MemoView_WWLoadPosition( HexView, true , 'w', 'NH') end else if MemoView_WW_State_ == true then MemoView_miWWHorizontalClick() SavePosition_State = false MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false , 'w', 'NH') MemoView_WWLoadPosition( HexView, true , 'w', 'NH') else MemoView_WWLoadPosition( MemoView, MemoView_Compact_State == false, 'w', 'NV') MemoView_WWLoadPosition( HexView, true , 'h', 'NV') end end end SavePosition_State = true end --Set window to Vertical mode when Showing Memory View if MemoView.OnShow ~= nil then if Old_MemoView_OnShow ~= nil then local Old_MemoView_OnShow = MemoView.OnShow end end MemoView.OnShow = function(...) if CESettings.Value['MemoView_WW_AutoSwitch'] == 'true' then MemoView_WW_AutoSwitch = true if MemoView.WindowState == 'wsMaximized' and MemoView_WW_AutoSwitch == true then MemoView_WW_State_ = false MemoView_miWWHorizontalClick() end MemoView_WWHexView_State = false MemoView_WWDisassembler_State = false else MemoView_WW_AutoSwitch = false MemoView_WW_State = false MemoView_WW_State_ = false end if Old_MemoView_OnShow ~= nil then return Old_MemoView_OnShow(...) end end --Set window to Vertical mode when Closing Memory View if MemoView.OnClose ~= nil then if Old_MemoView_OnClose ~= nil then local Old_MemoView_OnClose = MemoView.OnClose end end MemoView.OnClose = function(sender,option) if HexView.Visible == false then MemoView_miWWDisassemblerClick() end if Disassembler.Visible == false then MemoView_miWWHexViewClick() end MemoView_WWHexView_State = false MemoView_WWDisassembler_State = false MemoView_miWWVerticalClick() if Old_MemoView_OnClose ~= nil then return Old_MemoView_OnClose(sender,option) else return option end end --Set window to Vertical mode when showing Memory View if MemoView.OnShow ~= nil then if Old_MemoView_OnShow ~= nil then Old_MemoView_OnShow = MemoView.OnShow end end MemoView.OnShow = function (sender) if Old_MemoView_OnShow ~= nil then Old_MemoView_OnShow(sender) end MemoView_WWHexView_State = false MemoView_WWDisassembler_State = false MemoView_WW_State = true MemoView_WW_State_ = false MemoView_miWWVerticalClick() --Load MemoView Width MemoView_WWLoadPosition( MemoView, true, 'tl', (MemoView.WindowState == 'wsNormal' and 'N' or 'M')..'V') end --Add the wide window menu to new memory browser window if MemoView.Newwindow1.OnClick ~= nil then if Old_MemoView_Newwindow1_onClick ~= nil then Old_MemoView_Newwindow1_onClick = MemoView.Newwindow1.OnClick end end MemoView.Newwindow1.OnClick = function (sender) if Old_MemoView_Newwindow1_onClick ~= nil then Old_MemoView_Newwindow1_onClick(sender) end local MemoView_ = createMemoryView() MemoView_.show() MemoView_.caption = MemoView_.caption..' '..(MemoView_.Name):gsub('MemoryBrowser_','') MemoView_.bringToFront() MemoViwe_Wide_Window(MemoView_) end -- Create Menu Window local function addMenuItem(MenuItem, caption, onClick, Name, RadioItem, Checked) local newItem = createMenuItem(MenuItem) MenuItem.add(newItem) newItem.Caption = caption newItem.OnClick = onClick newItem.Name = Name or '' newItem.RadioItem = RadioItem or false newItem.Checked = Checked or false return newItem end local miWideWindow = addMenuItem(MemoView.Menu.Items,translate('&Window'),nil,'miWideWindow',false, false) addMenuItem(miWideWindow,translate('&Vertical'), MemoView_miWWVerticalClick,'miWWVertical',false,true) addMenuItem(miWideWindow,'-') addMenuItem(miWideWindow,translate('&Horizontal'), MemoView_miWWHorizontalClick,'miWWHorizontal') addMenuItem(miWideWindow,'-') addMenuItem(miWideWindow,translate('&Auto Switch'), MemoView_miWWAutoSwitchClick,'miWWAutoSwitch',not MemoView_WW_AutoSwitch,true) addMenuItem(MemoView.Menu.Items,translate('&Code'), MemoView_miWWDisassemblerClick,'miWWCode') addMenuItem(MemoView.Menu.Items,translate('&Hex'), MemoView_miWWHexViewClick,'miWWHex') return true end createThread(function() local StartTime = os.clock() local TimeOut = false while getMemoryViewForm() == nil do sleep(2000) if (os.clock() - StartTime >= 120) then TimeOut = true end end if not TimeOut then MemoViwe_Wide_Window() end end)