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是什麼? –