--version 1.05
local colorTable = {-1,0x008000,0xff8000,0x95004a,0x0000ff,0x0080c0,0x8000ff,0x0000a0}
local usedColors = {}
for pid,wndCaption in pairs(getWindowlist()) do
for i=1,#wndCaption do
if wndCaption[i]:match('Cheat Engine %d+%.[%.%d]+.*#%d+') then
local colorID = tonumber(wndCaption[i]:match('#(%d+)')) or 'ignore'
usedColors[colorID]=true
break
end
end
end
if (usedColors[1]==true) then
local color
local colorID=2
for i=2,#colorTable do --find unused color
if not usedColors[i] then color = colorTable[i]; colorID=i; break; end
end
local function allowedTForms(formClassName)
local someTForms = {
['TAbout']=1,
['TChangeOffset']=1,
['TFindDialogForm']=1,
['TFindWindow']=1,
['TFormDesigner']=1,
['TFormMemoryRegions']=1,
['TFoundCodeDialog']=1,
['TFrmMemoryRecordDropdownSettings']=1,
['THotKeyForm']=1,
['TInputboxTop']=1,
['TMemoryBrowser']=1,
['TObjectInspectorDlg']=1,
['TProcessWindow']=1,
['TReplaceDialogForm']=1,
['TformAddressChange']=1,
['TfrmAAEditPrefs']=1,
['TfrmAccessedMemory']=1,
['TfrmAssemblyScan']=1,
['TfrmAutoInject']=1,
['TfrmBreakpointlist']=1,
['TfrmChangedAddresses']=1,
['TfrmCodeFilter']=1,
['TfrmCodecaveScanner']=1,
['TfrmDissectCode']=1,
['TfrmEnumerateDLLs']=1,
['TfrmFillMemory']=1,
['TfrmFindStatics']=1,
['TfrmLuaEngine']=1,
['TfrmMemoryAllocHandler']=1,
['TfrmMemoryViewEx']=1,
['TfrmMemviewPreferences']=1,
['TfrmPEInfo']=1,
['TfrmPointerScannerSettings']=1,
['TfrmReferencedFunctions']=1,
['TfrmReferencedStrings']=1,
['TfrmRescanPointer']=1,
['TfrmSetupPSNNode']=1,
['TfrmStacktrace']=1,
['TfrmStringMap']=1,
['TfrmStringPointerScan']=1,
['TfrmStructureCompare']=1,
['TfrmStructures2']=1,
['TfrmStructuresConfig']=1,
['TfrmThreadlist']=1,
['TfrmTrainerGenerator']=1,
['TfrmUltimap']=1,
['TfrmUltimap2']=1,
['TfrmWatchlist']=1,
['TfrmdissectWindow']=1,
['Tfrmpointerscanner']=1,
}
return someTForms[formClassName]~=nil
end
local function addNicePanels(form)
local canvas
local Panel1 = createPanel(form)
Panel1.Visible = false
--Panel1.Top = form.Height - 2
--Panel1.Left = 0
--Panel1.Height = 2
--Panel1.Width = form.Width
Panel1.Align = alBottom
Panel1.Constraints.MinHeight = 2
Panel1.Constraints.MaxHeight = 2
Panel1.Anchors = '[akBottom, akLeft, akRight]'
Panel1.bringToFront()
Panel1.Caption = ''
Panel1.Color = color
Panel1.BevelOuter = 0
--MainForm.Splitter1.Color = color
addNicePanels(MainForm)
addNicePanels(MainForm.frmAutoInject)
addNicePanels(getMemoryViewForm())
addNicePanels(getSettingsForm())
addNicePanels(getLuaEngine())
for i=0,getFormCount()-1 do
local formClassName = getForm(i).ClassName
if formClassName=='TAdvancedOptions' or formClassName=='TComments' or formClassName=='TTypeForm' then
addNicePanels(getForm(i))
end
end
local ap=getApplication()
ap.Title = ap.Title..' #'..colorID
registerFormAddNotification(function (form)
--print(form.className)
if not allowedTForms(form.className) then return end
local t=createTimer()
t.Interval = 1
t.OnTimer = function (timer)
timer.destroy()
addNicePanels(form)
end
end)
else
local ap=getApplication()
ap.Title = ap.Title..' #1'
end
A little detail: But, ultimately, it works fine.
First of all, thanks for all your labor.
Here's a detail:
1. CE open, 2.CE green border and clear.
1. CE closed. Once again CE:
2 green border CE happening in my hand.
Sometimes I open three trainer and look at the code differences.
With the color difference, which the Trainer is original, I understand.
Thanks again.
A cheap fix would be perhaps add an instance id (1,2,3..) to the window title, and then based that apply the different colors.
I guess the numbering won't be the solution.
1. CE open = Colorless
2. CE open = Green border.
1. If CE is closed and opened again, 2. CE becomes
and again we have 2 green borders.
An idea for the solution:
It is possible to compare "if" and "elseif" to the opened CE margins.
Code:
if count>1 then
local colorTable = {0x008000,0xff8000,0x95004a,0x0000ff,0x0080c0,0x8000ff,0x0000a0}
local color = colorTable[count-1] or 0
Oh I think I understood,
If for example we have a primary CE window open.
and then we open another (secondary) window, it should have green borders.
But if we close now primary CE window, and then re-open again CE, we'll have 2 windows with both green.
if we open third window, and close any of the first two, and re-open again, then the new window will have the very same color of the third...
Basically duplicate of colors.
Solution:
Replace this code:
Code:
local processList = createStringlist()
getProcesslist(processList)
local count=0
for i=0,processList.Count-1 do
if (processList[i]:match('cheatengine%-i386.exe')) or
(processList[i]:match('cheatengine%-x86_64.exe')) then
count=count+1
end
end
processList.destroy()
with this code:
(it uses application class, and getWindowList fetches the title of application class as a title, so we use that title as a tag).
Code:
local app,it,count = getApplication(),{},1; -- it is instanceTable, a temporary table where I store used ID's.
function inTable(t,V)
for k,v in pairs(t or{})do
if(v==V)then return true;end;
end;return false;
end
for pid,uselessTab in pairs(getWindowlist()) do
if (uselessTab[0]:match("(Cheat Engine [%d%.]+)")) then -- try to match Cheat Engine X.X.X....
local isInstance = tonumber(uselessTab[0]:match("%*(%d+)$")); -- tryna fetch given id for that window
if (isInstance) then
table.insert(it,isInstance);
while (inTable(it,count)) do
count = count + 1;
end
end
end
end
app.Title = table.concat({app.Title," - *", count},"") -- generates new application title, based on available id;
_________________
HEY Hitler
Do you get lazy when making trainers?
Well no more!
My CETrainer will generate it for you in seconds, so you won't get lazy!
Oh I think I understood,
If for example we have a primary CE window open.
and then we open another (secondary) window, it should have green borders.
But if we close now primary CE window, and then re-open again CE, we'll have 2 windows with both green.
if we open third window, and close any of the first two, and re-open again, then the new window will have the very same color of the third...
Basically duplicate of colors.
Solution:
Replace this code:
Code:
local processList = createStringlist()
getProcesslist(processList)
local count=0
for i=0,processList.Count-1 do
if (processList[i]:match('cheatengine%-i386.exe')) or
(processList[i]:match('cheatengine%-x86_64.exe')) then
count=count+1
end
end
processList.destroy()
with this code:
(it uses application class, and getWindowList fetches the title of application class as a title, so we use that title as a tag).
Code:
local app,it,count = getApplication(),{},1; -- it is instanceTable, a temporary table where I store used ID's.
function inTable(t,V)
for k,v in pairs(t or{})do
if(v==V)then return true;end;
end;return false;
end
for pid,uselessTab in pairs(getWindowlist()) do
if (uselessTab[0]:match("(Cheat Engine [%d%.]+)")) then -- try to match Cheat Engine X.X.X....
local isInstance = tonumber(uselessTab[0]:match("%*(%d+)$")); -- tryna fetch given id for that window
if (isInstance) then
table.insert(it,isInstance);
while (inTable(it,count)) do
count = count + 1;
end
end
end
end
app.Title = table.concat({app.Title," - *", count},"") -- generates new application title, based on available id;
And the solution works perfectly. Thanks @DaSpamer
Main nicer ones: While the designer is not on duty,
Another designer takes over the task.
This is a great team work.
This team is never destroyed.
Thanks again. @mgr.inz.Player, @DaSpamer _________________
Joined: 07 Nov 2008 Posts: 4438 Location: W kraju nad Wisla. UTC+01:00
Posted: Sat Feb 23, 2019 6:14 am Post subject:
Aylin wrote:
1. CE open, 2.CE green border and clear.
1. CE closed. Once again CE:
2 green border CE happening in my hand.
I didn't take such use case into account.
Sometimes, I'm using two or three CE instances at once. I'm also testing few CE versions (or CE built with different Lazarus/FPC versions) that way.
This is why I wrote this extension.
Anyway, I added "getApplication().Title and getWindowlist()" modifications to the first post. _________________
Joined: 07 Nov 2008 Posts: 4438 Location: W kraju nad Wisla. UTC+01:00
Posted: Mon Aug 26, 2019 3:38 pm Post subject:
should be:
Code:
for pid,wndCaption in pairs(getWindowlist()) do
for i=1,#wndCaption do
if wndCaption[i]:match('Cheat Engine %d%.[%.%d]* #%d+') then
local colorID = tonumber(wndCaption[i]:match('#(%d+)')) or 'ignore'
usedColors[colorID]=true
break
end
end
end
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum