| View previous topic :: View next topic | 
	
	
		| Author | Message | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Sat Jan 06, 2018 8:10 pm    Post subject: CE losing game process after reboot |   |  
				| 
 |  
				| Using CE in old game, where after finish round, game going reboot (complete restart - close game to windows and run it again) After reboot game, CE losing process and must reboot trainer too.
 How make auto detect game process?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| OldCheatEngineUser Whateven rank
 
  Reputation: 20 
 Joined: 01 Feb 2016
 Posts: 1586
 
 
 | 
			
				|  Posted: Sat Jan 06, 2018 8:53 pm    Post subject: |   |  
				| 
 |  
				| if its your trainer you can let it go inside a loop, something like while loop to to refresh every 100ms and search for the specific process name and attach to it. 
 if you are not into lua then don't worry, we have great people here will post a nice and shiny script for you if needed.
 _________________
 
 About Me;
I Use CE Since Version 1.X, And Still Learning How To Use It Well!
 Jul 26, 2020
 
  	  | STN wrote: |  	  | i am a sweetheart. | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Sun Jan 07, 2018 9:30 am    Post subject: |   |  
				| 
 |  
				| so i can do that only by lua script? |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Sun Jan 07, 2018 9:57 am    Post subject: |   |  
				| 
 |  
				| Hm, in the GUI you can go to edit->settings->General Settings->Automatically Attach... and add the process name and then check the "Even autoattach when another process has already been selected" and it'll find it when you close and reopen the process but I'm not certain if you can enable those from a trainer so that it would work for other people without them having to do anything (the always autoattach part, setting the process name is simple and done in the generated script for every trainer)... 
 Some looking at celua.txt and testing and this seems to work:
 
 
  	  | Code: |  	  | getAutoAttachList().add('Tutorial-i386.exe')
 local settings = getSettings() -- stored in windows registry (eg. regedit)
 local originalAA = settings.Value['Always AutoAttach']
 
 -- setup to restore value when closed (may need to be adjusted to use CETrainer etc.)
 MainForm.OnClose = function(...)
 settings.Value['Always AutoAttach'] = originalAA
 return caFree
 end
 
 settings.Value['Always AutoAttach'] = 1
 reloadSettingsFromRegistry()
 
 | 
 
 note that if you open the same process again CE will switch to the newest process even if the old one hasn't closed. Probably not an issue in this case but perhaps something to be aware of for other uses (could probably disable always autoattach after attaching to the process to prevent that and then detect when the process has been killed and re-enable it)
 
 
 For other knowledgeable people: When I tried to call any existing OnClose action CE didn't want to actually close however (the mainform would disappear but the process would be open and so would the lua engine form I pasted the script in), eg.
 
  	  | Code: |  	  | getAutoAttachList().add('Tutorial-i386.exe') local settings = getSettings()
 local originalAA = settings.Value['Always AutoAttach']
 
 -- setup to restore value when closed (may need to be adjusted to use CETrainer etc.)
 local originalOnClose = MainForm.OnClose
 MainForm.OnClose = function(...)
 settings.Value['Always AutoAttach'] = originalAA
 local CloseAction
 if originalOnClose then
 CloseAction = originalOnClose(...)
 end
 return CloseAction or caFree
 end
 
 settings.Value['Always AutoAttach'] = 1
 reloadSettingsFromRegistry()
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Sun Jan 07, 2018 12:47 pm    Post subject: |   |  
				| 
 |  
				| thanks so much. In CE work very well, later i check ur script in trainer but previous i have another problem.
 
 Have two green addresses, but they was not stable. Every game reboot values changing. (on pic they were 1&2 but after game reboot they could be 3&4 , 5&6, 8&9 etc.)
 Want create two buttons to switch dynamic values like on picture below but how?
 
   |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Sun Jan 07, 2018 4:08 pm    Post subject: |   |  
				| 
 |  
				| As long as the addresses are static (or you have pointers or a registered symbol etc.) it's simple enough 
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx local swapValuesHotKeyKeys = {VK_F}
 swapValuesHotKey = createHotKey(function()
 local first = 0xAC35B8
 local second = 0x703530
 writeInteger(first, readInteger(second))
 end
 end, swapValuesHotKeyKeys)
 | 
 
 if you want to swap both values so that 1 becomes 2 and 2 becomes 1 then instead of just writing the second value use
  	  | Code: |  	  | local firstValue, secondValue = readInteger(first), readInteger(second) --read firstValue, secondValue = secondValue, firstValue -- swap
 -- write
 writeInteger(first, firstValue)
 writeInteger(second, secondValue)
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Sun Jan 07, 2018 4:45 pm    Post subject: |   |  
				| 
 |  
				| something goes wrong 
   Or i dont know what i do.
 
 Last edited by !BEWARE! on Tue Jan 09, 2018 10:20 am; edited 1 time in total
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Sun Jan 07, 2018 6:08 pm    Post subject: |   |  
				| 
 |  
				| Hm, looking at the code I'd bet that VK_F isn't defined in defines.lua, VK_F1 etc. would be but the f key itself uses the ascii value eg. string.byte('F',1) or 70. Though that's not the error I'd expect for it lol... 
 
 So, actually there are a couple mistakes there, sorry, first the VK thing, also createHotKey should be createHotkey, and finally there's an extra end that shouldn't be there. Here's a tested example
 
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx local swapValuesHotKeyKeys = {VK_F2}
 swapValuesHotKey = createHotkey(function()
 local first = 0xAC35B8
 local second = 0x703530
 writeInteger(first, readInteger(second))
 end, swapValuesHotKeyKeys)
 
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Mon Jan 08, 2018 3:30 am    Post subject: |   |  
				| 
 |  
				| Dont work. changed button to f5 and put in my adresses. but got new error msg: "malformed number near '007C35B8' i dont understand it
   
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
 local swapValuesHotKeyKeys = {VK_F5}
 swapValuesHotKey = createHotkey(function()
 local first = 007C35B8
 local second = 00B83530
 writeInteger(first, readInteger(second))
 end, swapValuesHotKeyKeys)
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Mon Jan 08, 2018 9:58 am    Post subject: |   |  
				| 
 |  
				| That's because you can't have letters in decimal numbers, you have to prefix hex numbers with 0x, see the given example   
 Though you can also pass them as strings, in which case getAddress will be used internally to determine the actual address, that way you can use symbols like 'game.exe+5234' or 'INJECT' registered from a script, and getAddress will read numbers as hex. A lot of CE's functions will work with string addresses for that reason.
 
 eg.
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
 local swapValuesHotKeyKeys = {VK_F5}
 swapValuesHotKey = createHotkey(function()
 local first = '007C35B8'
 local second = '00B83530'
 writeInteger(first, readInteger(second))
 end, swapValuesHotKeyKeys)
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Mon Jan 08, 2018 11:06 am    Post subject: |   |  
				| 
 |  
				| Damn, Im blind Those values changing adress
  but they was green and i thought adress was static. My bad   But if i fix adresses manualy script work
   Is any other way to catch them? maybe for descriptions?
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Mon Jan 08, 2018 11:48 am    Post subject: |   |  
				| 
 |  
				| Hm, green usually is static   
 You can try to find a pointer using the pointer scanner (with pointer maps, you can "encode" a pointer in a string address eg. '[[game.exe+323]+4]+24' so the code really wouldn't change) or create a script to copy the addresses somewhere when they are accessed and then use that as a pointer (make sure it's a registered symbol so it's recognized outside the script) , or if you don't mind doing a scan each time to find them yourself then you can use memory records (of course, this method works with either pointer option above as well) eg.
 
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx local swapValuesHotKeyKeys = {VK_F5}
 swapValuesHotKey = createHotkey(function()
 local getmr = getAddressList().getMemoryRecordByDescription
 local first = getmr('first') -- gets memory record with name/description 'first'
 local second = getmr('second') -- ^ but 'second'
 first.Value = second.Value
 end, swapValuesHotKeyKeys)
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Mon Jan 08, 2018 3:39 pm    Post subject: |   |  
				| 
 |  
				| Thanks Now work pretty good
   Btw. how make Execute script automatic? After start CE i must hit button to get it work
 Could you also add code to restore back first value by other key?
 I have no idea how to made this
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| FreeER Grandmaster Cheater Supreme
 
 ![]() Reputation: 53 
 Joined: 09 Aug 2013
 Posts: 1091
 
 
 | 
			
				|  Posted: Mon Jan 08, 2018 6:29 pm    Post subject: |   |  
				| 
 |  
				| execute script on attach 
  	  | Code: |  	  | onOpenProcess = function(pid) reinitializeSymbolhandler()
 local al = getAddressList()
 al.disableAllWithoutExecute()
 al.getMemoryRecordByDescription('enable on attach').Active = true
 swapValueBackup = nil -- part of restore script
 end
 | 
 
 and second hotkey to restore value
 
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx swapValueBackup = nil -- needs to be reset when process is closed since the value is random
 local swapValuesHotKeyKeys = {VK_F5}
 local swapValuesBackHotKeyKeys = {VK_F6}
 
 local getmr = getAddressList().getMemoryRecordByDescription
 local first = getmr('first')
 local second = getmr('second')
 
 swapValuesHotKey = createHotkey(function()
 if not swapValueBackup then swapValueBackup = first.Value end -- this is new (saves value before overwriting)
 first.Value = second.Value
 end, swapValuesHotKeyKeys)
 
 swapValuesBackHotKey = createHotkey(function()
 if not swapValueBackup then return end
 first.Value = swapValueBackup
 end, swapValuesBackHotKeyKeys)
 | 
 
 Though it kind of seems like you could have one hotkey that toggles back and forth (if it's never written back on it's own) eg
 
 
  	  | Code: |  	  | -- see defines.lua and https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx swapValueBackup = nil -- needs to be reset when process is closed since the value is random
 local swapValuesHotKeyKeys = {VK_F5}
 
 swapValuesHotKey = createHotkey(function()
 local getmr = getAddressList().getMemoryRecordByDescription
 local first = getmr('first')
 if not swapValueBackup then
 swapValueBackup = first.Value
 local second = getmr('second')
 first.Value = second.Value
 else
 first.Value = swapValueBackup
 end
 end, swapValuesHotKeyKeys)
 | 
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		| !BEWARE! !BEWARE! Deletes post on answer
 
  Reputation: 0 
 Joined: 26 Jun 2013
 Posts: 57
 Location: !BEWARE!
 
 | 
			
				|  Posted: Tue Jan 09, 2018 8:53 am    Post subject: |   |  
				| 
 |  
				| In execute script must write PID manual to get it work? But PID every start game is different so i need little help how to get it work. 
 Script to swap values is almost perfect. Turn on and off work fine but manual reset CE after game reboot is a bit problematic because game rebooting many times. Its strange game construction but anyway ,I have idea...
 "first" and "second" loading correct values when i start the match. In the rest time (in main menu, lobby and also after game restart) they count always 0. Would be great to use this fact and create term like this "When 'first' value 0 - clear clipboard from old value"
 |  | 
	
		| Back to top |  | 
	
		|  | 
	
		|  |