这个是在找资料的时候找到的,CSDN论坛上转的别人的 但是程序会动鼠标,感觉不好看,就把鼠标移动后又移动回原来的位置 运行后根本看不出来 using System; using System.Drawing; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace startMenu { public partial class Form1 { [StructLayout(LayoutKind.Sequential)] //定义一个表示上下左右的结构 struct NativeRECT { public int left; public int top; public int right; public int bottom; } [Flags] //定义鼠标动作 enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } #region 定义需要用到的Windows API [DllImport("user32.dll")] static extern bool SetCursorPos(int X, int Y); [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [DllImport("user32.dll")] static extern IntPtr FindWindow(string strClass, string strWindow); [DllImport("user32.dll")] static extern IntPtr FindWindowEx(HandleRef hwndParent, HandleRef hwndChildAfter, string strClass, string strWindow); [DllImport("user32.dll")] static extern bool GetWindowRect(HandleRef hwnd, out NativeRECT rect); #endregion private Point startPosition; private Point endPosition; private void button1_Click() { startPosition.X = Cursor.Position.X; startPosition.Y = Cursor.Position.Y; NativeRECT rect; //找到任务栏 IntPtr ptrTaskbar = FindWindow("Shell_TrayWnd", null); if (ptrTaskbar == IntPtr.Zero) { MessageBox.Show("No taskbar found."); return; } //找到任务栏上的开始菜单按钮 IntPtr ptrStartBtn = FindWindowEx(new HandleRef(this, ptrTaskbar), new HandleRef(this, IntPtr.Zero), "Button", null); if (ptrStartBtn == IntPtr.Zero) { MessageBox.Show("No start button found."); return; } //获取开始菜单按钮的上下左右坐标点 GetWindowRect(new HandleRef(this, ptrStartBtn), out rect); //计算出开始菜单按钮的中央位置坐标 endPosition.X = (rect.left + rect.right) / 2; endPosition.Y = (rect.top + rect.bottom) / 2; //将鼠标定位到开始菜单按钮的中央位置 SetCursorPos(endPosition.X, endPosition.Y); //模拟鼠标左键按下动作 mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero); mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero); SetCursorPos(startPosition.X, startPosition.Y); } public static void Main(String[] args) { new Form1().button1_Click(); } } }