How I can send mouse click in powershell?
If you don't feel like writing your own function, the Windows Automation Snapin for Powershell has a Send-Click function. Alternatively you can import some functionality from the windows API using mouse_event although I would recommend SendInput as it supersedes mouse_event. Below is a fully functional sample that uses P/Invoke to get the functionality you want and send a left click to a specified screen coordinate.
$cSource = @'using System;using System.Drawing;using System.Runtime.InteropServices;using System.Windows.Forms;public class Clicker{//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx[StructLayout(LayoutKind.Sequential)]struct INPUT{ public int type; // 0 = INPUT_MOUSE, // 1 = INPUT_KEYBOARD // 2 = INPUT_HARDWARE public MOUSEINPUT mi;}//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx[StructLayout(LayoutKind.Sequential)]struct MOUSEINPUT{ public int dx ; public int dy ; public int mouseData ; public int dwFlags; public int time; public IntPtr dwExtraInfo;}//This covers most use cases although complex mice may have additional buttons//There are additional constants you can use for those cases, see the msdn pageconst int MOUSEEVENTF_MOVED = 0x0001 ;const int MOUSEEVENTF_LEFTDOWN = 0x0002 ;const int MOUSEEVENTF_LEFTUP = 0x0004 ;const int MOUSEEVENTF_RIGHTDOWN = 0x0008 ;const int MOUSEEVENTF_RIGHTUP = 0x0010 ;const int MOUSEEVENTF_MIDDLEDOWN = 0x0020 ;const int MOUSEEVENTF_MIDDLEUP = 0x0040 ;const int MOUSEEVENTF_WHEEL = 0x0080 ;const int MOUSEEVENTF_XDOWN = 0x0100 ;const int MOUSEEVENTF_XUP = 0x0200 ;const int MOUSEEVENTF_ABSOLUTE = 0x8000 ;const int screen_length = 0x10000 ;//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx[System.Runtime.InteropServices.DllImport("user32.dll")]extern static uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);public static void LeftClickAtPoint(int x, int y){ //Move the mouse INPUT[] input = new INPUT[3]; input[0].mi.dx = x*(65535/System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width); input[0].mi.dy = y*(65535/System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height); input[0].mi.dwFlags = MOUSEEVENTF_MOVED | MOUSEEVENTF_ABSOLUTE; //Left mouse button down input[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN; //Left mouse button up input[2].mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(3, input, Marshal.SizeOf(input[0]));}}'@Add-Type -TypeDefinition $cSource -ReferencedAssemblies System.Windows.Forms,System.Drawing#Send a click at a specified point[Clicker]::LeftClickAtPoint(600,600)
Here is the older method:
#import mouse_eventAdd-Type -MemberDefinition '[DllImport("user32.dll")] public static extern void mouse_event(int flags, int dx, int dy, int cButtons, int info);' -Name U32 -Namespace W;#left mouse click[W.U32]::mouse_event(6,0,0,0,0);
6 is 0x02 | 0x04, LMBDown | LMBUp from the documentation
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx
And here is moving and clicking
#move 10% along x and 10% along y and send left mouse click[W.U32]::mouse_event(0x02 -bor 0x04 -bor 0x8000 -bor 0x01, .1*65535, .1 *65535, 0, 0);