使用SendInput C+模拟阻力+; 在C++中有人知道如何用SendInput模拟鼠标拖动吗?我想以编程方式移动桌面上的图标。我希望序列(将鼠标移动到A)->(按下左键)->(将鼠标移动到B)->(释放左键)可以工作,但它不能工作。鼠标移动到A,然后移动到B,但图标不移动。 我认为Drag'n'Drop(SHDoDragDrop())不适合此任务-它需要IDataObject和IDropSource才能工作。 感谢您的任何提示或想法。

使用SendInput C+模拟阻力+; 在C++中有人知道如何用SendInput模拟鼠标拖动吗?我想以编程方式移动桌面上的图标。我希望序列(将鼠标移动到A)->(按下左键)->(将鼠标移动到B)->(释放左键)可以工作,但它不能工作。鼠标移动到A,然后移动到B,但图标不移动。 我认为Drag'n'Drop(SHDoDragDrop())不适合此任务-它需要IDataObject和IDropSource才能工作。 感谢您的任何提示或想法。,c++,simulation,drag,sendinput,C++,Simulation,Drag,Sendinput,抱歉,这不是答案-只是我试图实现目标的代码片段。目标可以通过不同的方式实现,但我对这个特别的目标感兴趣 INPUT inputs[4] = { 0 }; inputs[0].type = INPUT_MOUSE; inputs[0].mi.dx = (from.x * 65535) / screen_w; inputs[0].mi.dy = (from.y * 65535) / screen_h; inputs[0].mi.mouseData = 0; inputs[0].mi.time =

抱歉,这不是答案-只是我试图实现目标的代码片段。目标可以通过不同的方式实现,但我对这个特别的目标感兴趣

INPUT inputs[4] = { 0 };

inputs[0].type = INPUT_MOUSE;
inputs[0].mi.dx = (from.x * 65535) / screen_w; inputs[0].mi.dy = (from.y * 65535) / screen_h;
inputs[0].mi.mouseData = 0; inputs[0].mi.time = 0;
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;

inputs[1].type = INPUT_MOUSE;
inputs[1].mi.dx = (from.x * 65535) / screen_w; inputs[1].mi.dy = (from.y * 65535) / screen_h;
inputs[1].mi.mouseData = 0; inputs[1].mi.time = 0;
inputs[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;

inputs[2].type = INPUT_MOUSE;
inputs[2].mi.dx = (to.x * 65535) / screen_w; inputs[2].mi.dy = (to.y * 65535) / screen_h;
inputs[2].mi.mouseData = 0; inputs[2].mi.time = 0;
inputs[2].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;

inputs[3].type = INPUT_MOUSE;
inputs[3].mi.dx = (to.x * 65535) / screen_w; inputs[3].mi.dy = (to.y * 65535) / screen_h;
inputs[3].mi.mouseData = 0; inputs[3].mi.time = 0;
inputs[3].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;

UINT uSent = SendInput(4, inputs, sizeof(INPUT));

答案很简单-应该为每个操作逐个调用SendInput()。此外,在每次调用之后,可能需要添加Sleep()一段时间。通常在参数为10时工作,但有时系统需要更长的睡眠时间。

请显示您尝试的实际代码,该代码不适用于您。或者,桌面是一个,因此您可以使用
ListView\u HitTest()
ListView\u SetItemPositiion/32()
而不必操纵鼠标。