[英]SendMessage C++ Right mouse button doesn't work left mouse button works?
我想用 SendMessage 來完成我的遠程控制程序的一部分。 案例我認為它會控制計算機程序而不會使它獲得焦點。
這是我的演示。 我使用 windows mspaint 來測試它。 當我發布“左鍵按下”時它會起作用,所以我確定我的 HWND 是正確的(繪圖區域句柄由 spy++ 或一些類似工具獲得)。 它在我的 mspaint 中的“繪圖區域”中繪制了一個點。 但是當我選擇一種顏色並運行以下代碼時。 它不起作用。 在同一個 mspaint 程序上,我的繪圖區域沒有任何反應。
這是我的代碼:
#include <stdio.h>
#include <Windows.h>
int main(){
HWND hwnd;
printf("Please input your handle\n");
scanf("%d", &hwnd);
int x = 100, y = 100;
//int right = SendMessageA(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y)); //It works
int wrong = SendMessageA(hwnd, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(x, y)); //It doesn't work
printf("%d", wrong);
printf("%d", GetLastError());
return 0;
}
我很困惑,因為這兩行是如此相似。 mspaint 中是否有任何錯誤?
我很困惑,因為這兩行是如此相似。 mspaint 中是否有任何錯誤?
這兩行代碼可以成功執行,並且它們確實向目標窗口發送WM_LBUTTONDOWN
和WM_RBUTTONDOWN
消息。 我可以通過定位一個自己創建的窗口應用程序並在其中監視鼠標消息來確認這一點。 因此,差異可能取決於 mspaint 應用程序如何處理鼠標左鍵和右鍵單擊。
以下代碼適用於鼠標左鍵和右鍵。 你可以試試。
int x = 100, y = 100;
// Left mouse button click
int lResult = SendMessageA(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
Sleep(500);
lResult = SendMessageA(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
x += 10;
// Right mouse button click
int rResult = SendMessageA(hwnd, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(x, y));
Sleep(500);
rResult = SendMessageA(hwnd, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(x, y));
printf("Done.");
上面代碼的測試結果:
注意:正如其他社區已經指出的那樣,使用SendInput
而不是SendMessage
來合成擊鍵、鼠標動作和按鈕點擊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.