python-tools-windows/PVZ/PVZZZB_C2_ai.py
2024-07-10 14:36:32 +08:00

71 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import win32api
import win32con
import win32process
import win32gui
from ctypes import c_int, byref, c_void_p, windll
from ctypes.wintypes import HANDLE
import time
def get_pid_by_window_title(title):
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd) == title:
hwnds.append(hwnd)
return True
hwnds = []
win32gui.EnumWindows(callback, hwnds)
pids = []
for hwnd in hwnds:
_, pid = win32process.GetWindowThreadProcessId(hwnd)
pids.append(pid)
return pids
def read_process_memory(pid, address):
hProcess = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
buffer = (c_int * 1)()
bytes_read = c_int(0)
success = windll.kernel32.ReadProcessMemory(HANDLE(hProcess), c_void_p(address), byref(buffer), 4, byref(bytes_read))
win32api.CloseHandle(hProcess)
if not success:
raise Exception("Failed to read process memory")
return buffer[0]
def write_process_memory(pid, address, value):
hProcess = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid)
value_c = c_int(value)
if not windll.kernel32.WriteProcessMemory(HANDLE(hProcess), c_void_p(address), byref(value_c), 4, None):
raise Exception("Failed to write process memory")
win32api.CloseHandle(hProcess)
def main():
window_title = "植物大战僵尸v2.2 "
pids = get_pid_by_window_title(window_title)
if len(pids) == 0:
print("No matching windows found.")
return
pid = pids[0] # 取第一个匹配的PID如果有多个窗口你可能需要调整逻辑
base_address = 0x2A9EC0
offset1 = 768
offset2 = 5560
final_address = base_address + offset1 + offset2
try:
original_value = read_process_memory(pid, final_address)
print(f"Original value: {original_value}")
new_value = 9420
write_process_memory(pid, final_address, new_value)
time.sleep(1)
modified_value = read_process_memory(pid, final_address)
print(f"Modified value: {modified_value}")
except Exception as e:
print(e)
if __name__ == "__main__":
main()