guxago
guxago

Reputation: 51

Simulate mouse move

I have ListView with Images in my UserControl. When I am bringing the picture I have is redraw the picture when removing the mouse from the image picture nourish old. But when I am bringing a second time on the same picture does not want to repaint but when I take away for the chapels of ListView and again navozhu works. I thought I could make an imitation mouse. Or tell me something better.

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

It work but I see a glimmer of the mouse.

Upvotes: 4

Views: 6157

Answers (1)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186823

In order to simulate mouse moves, its buttons' clicks etc. you may try mouse_event API function. Be careful, it works with mickeys not pixels:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx

[DllImport("User32.dll",
            EntryPoint = "mouse_event",
            CallingConvention = CallingConvention.Winapi)]
internal static extern void Mouse_Event(int dwFlags,
                                        int dx,
                                        int dy,
                                        int dwData,
                                        int dwExtraInfo);

[DllImport("User32.dll",
            EntryPoint = "GetSystemMetrics",
            CallingConvention = CallingConvention.Winapi)]
internal static extern int InternalGetSystemMetrics(int value);
...
    
// Move mouse cursor to absolute position to_x, to_y and make left button click:
int to_x = 500;
int to_y = 300;

int screenWidth = InternalGetSystemMetrics(0);
int screenHeight = InternalGetSystemMetrics(1);
       
// Mickey X coordinate
int mic_x = (int) System.Math.Round(to_x * 65536.0 / screenWidth);
// Mickey Y coordinate
int mic_y = (int) System.Math.Round(to_y * 65536.0 / screenHeight);
    
// 0x0001 | 0x8000: Move + Absolute position
Mouse_Event(0x0001 | 0x8000, mic_x, mic_y, 0, 0);
// 0x0002: Left button down
Mouse_Event(0x0002, mic_x, mic_y, 0, 0);
// 0x0004: Left button up
Mouse_Event(0x0004, mic_x, mic_y, 0, 0);

Upvotes: 10

Related Questions