# write_to_cpp.py[淘股吧]
import ctypes
from ctypes import wintypes
import struct
import time

kernel32 = ctypes.WinDLL( kernel32 , use_last_error=True)

# 打开进程
OpenProcess = kernel32.OpenProcess
OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
OpenProcess.restype = wintypes. HAND LE

# 写内存
WriteProcessMemory = kernel32.WriteProcessMemory
WriteProcessMemory.argtypes = [
wintypes.HANDLE,
wintypes.LPVOID,
wintypes. LPCV OID,
ctypes.c_size_t,
ctypes.PO INTE R(ctypes.c_size_t)
]
WriteProcessMemory.restype = wintypes.BOOL

# 读内存(顺便用来验证写入结果)
ReadProcessMemory = kernel32.ReadProcessMemory
ReadProcessMemory.argtypes = [
wintypes.HANDLE,
wintypes.LPCVOID,
wintypes.LPVOID,
ctypes.c_size_t,
ctypes.POINTER(ctypes.c_size_t)
]
ReadProcessMemory.restype = wintypes.BOOL

CloseHandle = kernel32.CloseHandle

# 权限:读 + 写 + 操作
PROC ESS_VM_READ = 0x0010
PROCESS_VM_WRITE = 0x0020
PROCESS_VM_ OPER ATION = 0x0008

def write_int(h_process, address, value):
写入 int (4字节)
data = struct.pack(‘<i‘, value) # ‘<i‘ = 小端序 int
buf = (ctypes.c_ubyte * len(data))(*data)
written = ctypes.c_size_t(0)

ok = WriteProcessMemory(
h_process,
ctypes.c_void_p(address),
buf,
len(data),
ctypes.byref(written)
)
return ok

def write_float(h_process, address, value):
写入 float (4字节)
data = struct.pack(‘<f‘, value)
buf = (ctypes.c_ubyte * len(data))(*data)
written = ctypes.c_size_t(0)

ok = WriteProcessMemory(
h_process,
ctypes.c_void_p(address),
buf,
len(data),
ctypes.byref(written)
)
return ok

def write_string(h_process, address, text):
写入 C 风格字符串 (自动补 \0)
data = text.encode(‘gbk‘) + b‘\x00‘ # 末尾加结束符
buf = (ctypes.c_ubyte * len(data))(*data)
written = ctypes.c_size_t(0)

ok = WriteProcessMemory(
h_process,
ctypes.c_void_p(address),
buf,
len(data),
ctypes.byref(written)
)
return ok

# ==================== 主程序 ====================
def main():
# ====== 改成你 C++ 打印的真实值 ======
PID = 15184
ADDR_SIGNAL = 0x4a7030 # g_signal
ADDR_P RICE = 0x4a7034 # g_price
ADDR_MSG = 0x472040 # g_msg
# ======================================

access = PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION
h = OpenProcess(access, False, PID)

if not h:
err = ctypes.get_last_error()
print(f 打开进程失败,错误码: {err} )
print( 解决:右键 -> 以管理员身份运行 )
return

print( ✓ 成功打开进程,开始写入... )
print()

# 写入测试
count = 0
while True:
count += 1

# 写 int
ok1 = write_int(h, ADDR_SIGNAL, count * 10)

# 写 float
ok2 = write_float(h, ADDR_PRICE, 999.5 + count)

# 写字符串
ok3 = write_string(h, ADDR_MSG, f count={count} )

print(f 第 {count} 次写入: int={‘✓‘ if ok1 else ‘✗‘} float={‘✓‘ if ok2 else ‘✗‘} str={‘✓‘ if ok3 else ‘✗‘} )

time.sleep(2)

CloseHandle(h)

if __name__ == __main__ :
main()