Directing mouse events [DllImport(“user32.dll”)] click, double click

杀马特。学长 韩版系。学妹 提交于 2019-11-27 12:31:05

问题


I tried [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y);

and it works pretty fine to move the cursor to the desired point. I have never tried such kind of a DLL import before but it works :). However I want more what else can I extract? Mainly I want to make double click, click or use wheel options without any mouse input, just the code how can I do that? and how can I check what else is included in user32dll?

Thanx


回答1:


[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;

You should Import and Define these Constant's to work with Mouse using Win32API

Use method's below to do Mouse Operation's

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);
}

If you want to do a Mouse Drag you should First Send MouseDown(Mouse Click) and keep it Clicked While Changing the Mouse Position than Send MouseUp(Release Click) something like this .

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



回答2:


Using long type raises an "PInvoke" error.

We should use int type:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, 
                      int dwData, int dwExtraInfo);

[Flags]
public enum MouseEventFlags
{
    LEFTDOWN = 0x00000002,
    LEFTUP = 0x00000004,
    MIDDLEDOWN = 0x00000020,
    MIDDLEUP = 0x00000040,
    MOVE = 0x00000001,
    ABSOLUTE = 0x00008000,
    RIGHTDOWN = 0x00000008,
    RIGHTUP = 0x00000010
}

public static void LeftClick(int x, int y)
{
    Cursor.Position = new System.Drawing.Point(x, y);
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}

source: http://www.pinvoke.net/default.aspx/user32.mouse_event




回答3:


Take a look at pinvoke.net for a listing of the available APIs. Code examples and the import statements are included. You can also expand the selection on the left to see the available APIs for each DLL.



来源:https://stackoverflow.com/questions/8739523/directing-mouse-events-dllimportuser32-dll-click-double-click

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!