From select list method (v1) -- 5mo ago.
replaces value with string instead. Cons stops update timer (count) yet new records will be added anyway.
Code: Select all
Strings_v1 = registerFormAddNotification(function(form)
if (form.ClassName == 'TfrmChangedAddresses') then
createTimer(100, function()
form.cbDisplayType.Items.add("String")
form.uptotask = createTimer(form)
form.uptotask.Interval = 100
form.uptotask.OnTimer = function() -- timer is synchronized by default. Hurray.
if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
getMemoryViewForm().DisassemblerView.SelectedAddress =
tonumber(form.Changedlist.Selected.Caption, 16)
getMemoryViewForm().bringToFront()
elseif form.cbDisplayType.ItemIndex == 7 then
form.Timer1.Enabled = false;
for i = 0, form.Changedlist.Items.Count - 1 do
form.Changedlist.Items.Item[i].SubItems[0] = readString(form.Changedlist.Items.Item[i].Caption)
end
elseif not form.Timer1.Enabled then
form.Timer1.Enabled = true
end
end
end)
end
end)
Right click method (v2) -- 5mo ago.
Code: Select all
local str_isWide
if utf8 then
str_isWide = function(str)
for _, codepoint in utf8.codes(str) do
if codepoint > 127 then
return true
end
end
return false
end
end
Strings_v2 = registerFormAddNotification(function(form)
if (form.ClassName == 'TfrmChangedAddresses') then
createTimer(100, function()
form.showasString = createMenuItem(form.Changedlist.PopupMenu)
form.showasString.caption = "Show as string"
form.Changedlist.PopupMenu.Items.add(form.showasString)
form.showasString.OnClick = function(self, sender)
if not self.Checked then
self.Checked = true
form.colz = form.Changedlist.Columns.add()
form.colz.Width = 255
form.colz.Caption = " // String //"
for i = 0, form.Changedlist.Items.Count - 1 do
form.Changedlist.Items.Item[i].SubItems.add("")
end
else
self.Checked = false
form.colz.destroy()
for i = 0, form.Changedlist.Items.Count - 1 do
form.Changedlist.Items.Item[0].SubItems.clear()
end
end
end
form.Changedlist.OnInsert = function() -- let timer read string as soon as timer can (set by interval)
synchronize(function()
form.Changedlist.Items.Item[form.Changedlist.Items.Count - 1].SubItems.add("")
end)
end
form.uptotask = createTimer(form)
form.uptotask.Interval = 100
form.uptotask.OnTimer = function()
if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
getMemoryViewForm().DisassemblerView.SelectedAddress =
tonumber(form.Changedlist.Selected.Caption, 16)
getMemoryViewForm().bringToFront()
elseif form.showasString.Checked then
for i = 0, form.Changedlist.Items.Count - 1 do
if form.showasString.Checked then
form.Changedlist.Items.Item[i].SubItems[2] = str_isWide and
readString(
form.Changedlist.Items.Item[i].Caption) or
readString(
form.Changedlist.Items.Item[i].Caption, 255, true)
end
end
end
end
end)
end
end)
Register custom string type (v3) -- before post.
has similarity with concept v1. Yet
using registercustomtype with in lua causes problems executing code from lua engine
Code: Select all
Strings_v3W = registerCustomTypeLua("Wide-String", 0x1, function(...)
local buffer = {...}
return readString(buffer[#buffer], 255, true)
end, function() end, false, true)
-- Wide_String.destroy()
Strings_v3 = registerCustomTypeLua("String", 0x1, function(...)
local buffer = {...}
return readString(buffer[#buffer])
end, function(...) end, false, true)
-- String.destroy()
Code partially owned By Dark-Byte and this persons software Cheat Engine.
