Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- # Filename main.py
- import psutil
- from ctypes import *
- from ctypes.wintypes import *
- from struct import *
- OpenProcess = windll.kernel32.OpenProcess
- ReadProcessMemory = windll.kernel32.ReadProcessMemory
- GetLastError = windll.kernel32.GetLastError
- CloseHandle = windll.kernel32.CloseHandle
- PROCESS_ALL_ACCESS = 0x1F0FFF
- class TrackManiaTimer(object):
- def __init__(self):
- self.pid = None
- self.process_name = "ManiaPlanet.exe"
- self.offsets = [0x37C, 0x3C, None]
- self.time = None
- self.timelast = None
- self.address = 0x0163B4D8
- self.restarts = 0
- self.finishes = 0
- def get_pid(self):
- for proc in psutil.process_iter():
- try:
- if (proc.name() == self.process_name):
- self.pid = proc.pid
- except (PermissionError, psutil.AccessDenied):
- pass
- def read_process_memory(self):
- processHandle = OpenProcess(PROCESS_ALL_ACCESS, False, self.pid)
- length = 4
- data = ""
- read_buff = create_string_buffer(length)
- count = c_ulong(0)
- current_address = self.address
- for offset in self.offsets:
- if not ReadProcessMemory(processHandle, current_address, cast(read_buff, LPVOID), length, byref(count)):
- return -1
- else:
- val = read_buff.value
- result = int.from_bytes(val, byteorder='little')
- if(offset != None):
- current_address = result+offset
- else:
- return result
- def loop(self):
- old_timer = -1
- try:
- while(True):
- new_timer = self.read_process_memory()
- if new_timer != old_timer:
- old_timer = new_timer
- if (new_timer == 0):
- self.restarts += 1
- elif (new_timer == 4294967295):
- self.finishes += 1
- except (KeyboardInterrupt):
- print("Starts: %d" % self.restarts)
- print("Finishes: %d" % self.finishes)
- def main():
- t = TrackManiaTimer()
- t.get_pid()
- t.loop()
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement