[英]Click button of other window from other process
我是WinAPI的新手,并且已经创建了一个空窗口。 现在,我想对Cheat Engine的教程程序进行一些修改。 我已经知道,如何更改其他进程的内存中的值。 但是,一旦我在教程程序中更改了值,就不得不单击“下一步”按钮。 所以我的问题是: 是否可以将click命令发送到另一个进程的窗口? 我有窗口的句柄,进程的句柄和进程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的新手。
编辑:我发现,该教程禁止所有内存访问,因此我的项目将永远无法进行。 另外, GetLastError();
当我尝试为教程程序安装第二个Windows过程时,总是返回ERROR_INVALID_PARAMETER
。 我一定要使用hProc
而不是pid
在SetWindowsHookEx (WH_CALLWNDPROC, &fnHook, NULL, pid);
?
最简单的方法是使用SendMessage()发送WM_LBUTTONDOWN,然后将WM_LBUTTONUP消息发送到给定的窗口,例如
// x, y are the coords
SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
在您的特定情况下,这可能行不通; 如果您要单击的位置实际上是在子窗口或弹出窗口中,那么您只是“单击”了错误的窗口,并且很多应用程序都依赖于其他消息。
更可靠的方法是调用SetWindowsHookEx(WH_MOUSE,...),然后通过给定的挂钩过程“播放”鼠标消息。 几十年来我还没有做到这一点,所以不能真正地详细讨论它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.