点击button可以用sendmessage来完成,但是toolstrip只能获取到整体的句柄,里面的按钮却获取不到,因此使用移动鼠标并点击的方法来模拟完成。
使用到的api定义:
[DllImport("user32")]
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
const int MOUSEEVENTF_LEFTDOWN = 0x0002;
const int MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int GetWindowRect(IntPtr hwnd, out Rect lpRect);
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out Point pt);
public struct Rect
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
获取toolstrip的矩形,这个得到的是屏幕位置。
GetWindowRect(_toolbar, out rect);
移动并点击:
int y = rect.Top + int.Parse(txtTop.Text);
int x = rect.Right - int.Parse(txtRight.Text);
SetForegroundWindow(_mainWin);
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
x,y是针对toolstrip矩形的right和top的偏移量。