我正在尝试编写一个简单的程序,将鼠标光标移动到屏幕上的 X、Y 位置,发送鼠标按下事件,再次移动光标,然后释放鼠标以绘制一条线
我尝试使用 SendInput 和 mouse_events 取得了一些成功,但不是我想要的。
int main(int argc, char *argv[])
{
tagINPUT inp;
tagMOUSEINPUT mi;
DWORD moveFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);
DWORD downFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
DWORD upFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
mi.dwFlags = moveFlags;
mi.dx = 5000;
mi.dy = 2000;
inp.type = INPUT_MOUSE;
inp.mi = mi;
SendInput(1, &inp, sizeof inp);
tagMOUSEINPUT mi2;
tagINPUT inp2;
SetCursorPos(1500, 500);
mi2.dwFlags = downFlags;
inp2.type = INPUT_MOUSE;
inp2.mi = mi2;
SendInput(1, &inp2, sizeof inp2);
SetCursorPos(500,200);
mi2.dwFlags = upFlags;
inp2.type = INPUT_MOUSE;
inp2.mi=mi2;
SendInput(1, &inp2, sizeof inp2);
return 0;
}
非常基本的尝试,只是移动、单击、移动和释放。
基本上,这适用于常规用户控件。如果说 Chrome 是最上面的窗口,它会突出显示一些文本。我可以移动 x/y 使其点击屏幕上的按钮/用户控件...
这也将在选择橡皮擦函数时才在MSpaint中绘制所需的行。如果我尝试使用 Brushtool,什么也不会发生。如果我试图在 Flash 窗口上绘图 (http://doodle.no.de),也是一样;
我已经尝试使用 0x0201 和 0x0202 作为我的 leftdown 和 leftup(它们都是 WM_ 等价物)并且它们的行为完全相同。
有什么想法吗?
最佳答案
如果您使用 Mouse_event,则很容易完成此任务。这是我想出的代码,希望对您有所帮助。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int pos1, pos2, pos3, pos4;
cout << "Enter x coordinate: "; //starting point
cin >> pos1;
cout << "Enter y coordinate: ";
cin >> pos2;
cout << "Enter x coordinate: "; //ending point
cin >> pos3;
cout << "Enter y coordinate: ";
cin >> pos4;
SetCursorPos(pos1,pos2);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0); //clicks on canvas
Sleep(30); //puts small delay between next click
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // holds down left mouse button
Sleep(300);
SetCursorPos(pos3,pos4);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); //releases left mouse button
return 0;
}
关于c++ - 尝试将鼠标按下和向上事件发送到 C++ 中的绘图 Canvas 应用程序/窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935742/