【发布时间】:2014-04-20 19:45:52
【问题描述】:
我是 WinAPI 新手,我已经创建了一个空窗口。现在我想为 Cheat Engine 的教程程序做一个小技巧。我已经知道,如何更改其他进程内存中的值。但是,一旦我在教程程序中更改了一个值,我就不得不单击“下一步”按钮。所以我的问题是:是否可以将点击命令发送到另一个进程的窗口?我有一个窗口句柄、一个进程句柄和进程 ID(如果不是一样)。
我对按钮的唯一了解是,它们的文本始终是“下一个”。
这是我的代码的缩短版本:
HWND hWnd = FindWindow (NULL, L"Window's title"); // Search startup window
DWORD pid; // Get process id
GetWindowThreadProcessId (hWnd, &pid);
HANDLE hProc = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid); // Get access to process
DWORD base = 0x789ABCDE; // Get value of static pointer
ReadProcessMemory (hProc, &base, &base, 4, NULL);
WORD offset = 0xBCDE; // Write to memory
WriteProcessMemory (hProc, (void *)(base + offset), (void *)5000, 4, NULL);
// Send click command (???)
对不起,如果我的英语和/或一些技术术语不正确,但我是 Win32 的新手。
编辑:
我发现,本教程禁止所有内存访问,所以我的项目永远不会工作。此外,当我尝试为教程程序安装第二个 Windows 程序时,GetLastError(); 总是返回 ERROR_INVALID_PARAMETER。我必须在SetWindowsHookEx (WH_CALLWNDPROC, &fnHook, NULL, pid); 中使用hProc 而不是pid 吗?
【问题讨论】:
-
使用spy++获取按钮id。
-
为什么不使用自动化?
-
我没有spy++(VS2013 Express);自动化?
-
是自动化。这是在不同进程中调用 gui 操作的受支持方式。在这里很难看出入侵进程内存的相关性。
-
您的编辑没有多大意义。你似乎在随意尝试。再次,有人想知道为什么您不会使用自动化。你为什么要让自己的生活变得艰难?
标签: c winapi sendmessage