[英]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.