0
我需要在代码(c#.net)中的某些场景中模拟鼠标左键单击。 这个模拟必须完成,但它必须对用户不可见。所以当左键点击时,我将保存光标位置。在左键单击后,我应该将光标位置设置为保存值。 有问题。模拟鼠标左键单击目标,然后将鼠标移动到C#中的前一个位置.net
int save_cursur_x = Cursor.Position.X;
int save_cursur_y = Cursor.Position.Y;
int current_node_x = newGraphEditor.getCurrentNodeGlobalPosition_x();
int current_node_y = newGraphEditor.getCurrentNodeGlobalPosition_y();
LeftMouseClick(current_node_x, current_node_y);
Cursor.Position = new Point(save_cursur_x, save_cursur_y);
当最后一行(Cursor.Position =新的点(save_cursur_x,save_cursur_y))被移除左键点击目标位置正确地发生。但是,当我再补充一点线,左击发生在一个未知的位置(或者左键点击不会发生)
这是LeftMouseClick方法:
//This is a replacement for Cursor.Position in WinForms
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
//This simulates a left mouse click
public static void LeftMouseClick(int xpos, int ypos)
{
SetCursorPos(xpos, ypos);
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}
更新: 有一个选择代表目标位置设置的位置。此代理应该在您点击目标时正好运行。我认为问题在这里。在目标上点击左键后,这个委托就不会运行。将Cursor位置设置为之前的值后,代表运行。所以目标位置设置不正确,因为现在光标不在目标。(它的位置改变)
ItemEventHandler<IModelItem> selectionDelegate =
delegate (object source, ItemEventArgs<IModelItem> args)
{
var tag = ((INode)(args.Item)).Tag;
if (tag is HostInnerNodeTag)
{
currentNodeGlobalPosition_x = Cursor.Position.X;
currentNodeGlobalPosition_y = Cursor.Position.Y;
}
}
我认为线程有问题。不是错误的位置。我认为移动光标和左键单击有冲突 –
您是否尝试使用此代码'mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE,xpos,ypos,0,0);'? – user3811082
tagINPUT是什么? –