c# - 定向鼠标事件 [DllImport ("user32.dll")] 单击,双击

标签 c# user32

我试过了 [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y);

并且将光标移动到所需点时效果很好。我以前从未尝试过这种 DLL 导入,但它有效:)。但是我想要更多我还能提取什么? 主要是我想在没有任何鼠标输入的情况下双击、单击或使用滚轮选项,只是代码我该怎么做?以及如何检查 user32dll 中还包含什么?

谢谢

最佳答案

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
private const uint MOUSEEVENTF_LEFTDOWN = 0x02;
private const uint MOUSEEVENTF_LEFTUP = 0x04;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x08;
private const uint MOUSEEVENTF_RIGHTUP = 0x10;

您应该导入并定义这些常量以使用 Win32API 与鼠标一起工作

使用下面的方法进行鼠标操作

void sendMouseRightclick(Point p)
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}

void sendMouseDoubleClick(Point p)
{
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);

Thread.Sleep(150);

    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);
}

void sendMouseRightDoubleClick(Point p)
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);

    Thread.Sleep(150);

    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}

void sendMouseDown()
{
    mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
}

void sendMouseUp()
{
    mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
}

如果您想进行鼠标拖动,您应该首先发送 MouseDown(鼠标单击)并在更改鼠标位置时保持单击状态,而不是像这样发送 MouseUp(释放单击)。

sendMouseDown();
Cursor.Position = new Point(30,30);
sendMouseUp();

关于c# - 定向鼠标事件 [DllImport ("user32.dll")] 单击,双击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8739523/

相关文章:

c# - 在 Newtonsoft.Json 中添加多个合约解析器

c# - 从非托管代码 : SAFEARRAY 调用托管 COM

c# - LINQ to Entities实体初始化

c++ - LoadLibrary ('user32.dll' ) 返回 14007

c# - 如何从服务获取登录用户的事件窗口

c# - 在 Entity Framework Code First 中忽略基类型是否也会忽略子类?

c# - 尝试从 user32.dll 的 GetWindowText() 读取窗口时发生类型为 'System.ExecutionEngineException' 的未处理异常

c# - 当外部应用程序的窗口移动时移动窗口

c# - 如何获取应用程序的事件 ChildWindow?

c# - 从窗口获取唯一标识