簡體   English   中英

單擊其他進程中其他窗口的按鈕

[英]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而不是pidSetWindowsHookEx (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM