c++ - 尝试将鼠标按下和向上事件发送到 C++ 中的绘图 Canvas 应用程序/窗口

标签 c++ mouse mouseevent draw

我正在尝试编写一个简单的程序,将鼠标光标移动到屏幕上的 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/

相关文章:

javascript - 如何在 Cheerp(C++ 到 JavaScript 转换器)中保留变量名称

c++ - 我们可以在 C++ 类的成员函数中使用 cin>> 吗?

Java - 相对于 JFrame 的光标位置

google-maps-api-3 - 谷歌地图——在点击事件期间检测metaKey状态?

javascript - 使用鼠标滚轮插件更改背景图像

c++ - (opencv rc1) 是什么导致 Mat 乘法比每像素乘法慢 20 倍?

c++ - 了解以下 C++ 函数定义

java - Java Swing鼠标拖拽回调速度

vue.js - 未定义Vue.js引用错误(event.target)

reactjs - 在 React 中,onMouseEnter 或悬停无法按预期工作