using System.Runtime.InteropServices;
using System.Threading;
using System.Drawing;
const uint WM_MOUSEMOVE = 0x0200;
const uint WM_LBUTTONDOWN = 0x0201;
const uint WM_LBUTTONUP = 0x0202;
const uint WM_LBUTTONDBLCLK = 0x0203;
[DllImport("User32.Dll", EntryPoint = "PostMessageA")]
static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
private static int MAKEPARAM(int l, int h)
{
return ((l & 0xffff) | (h << 0x10));
}
private static void DoubleClick(IntPtr hWnd, Point point)
{
bool f1 = PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKEPARAM(point.X, point.Y));
bool f2 = PostMessage(hWnd, WM_LBUTTONDOWN, 0, MAKEPARAM(point.X, point.Y));
bool f3 = PostMessage(hWnd, WM_LBUTTONUP, 0, MAKEPARAM(point.X, point.Y));
bool f4 = PostMessage(hWnd, WM_LBUTTONDBLCLK, 0, MAKEPARAM(point.X, point.Y));
Thread.Sleep(200);
bool f5 = PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKEPARAM(point.X, point.Y));
bool f6 = PostMessage(hWnd, WM_LBUTTONDOWN, 0, MAKEPARAM(point.X, point.Y));
bool f7 = PostMessage(hWnd, WM_LBUTTONUP, 0, MAKEPARAM(point.X, point.Y));
bool f8 = PostMessage(hWnd, WM_LBUTTONDBLCLK, 0, MAKEPARAM(point.X, point.Y));
}
private static void Click(IntPtr hWnd, Point point)
{
bool f1 = PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKEPARAM(point.X, point.Y));
bool f2 = PostMessage(hWnd, WM_LBUTTONDOWN, 0, MAKEPARAM(point.X, point.Y));
bool f3 = PostMessage(hWnd, WM_LBUTTONUP, 0, MAKEPARAM(point.X, point.Y));
Thread.Sleep(150);
bool f4 = PostMessage(hWnd, WM_MOUSEMOVE, 0, MAKEPARAM(point.X, point.Y));
bool f5 = PostMessage(hWnd, WM_LBUTTONDOWN, 0, MAKEPARAM(point.X, point.Y));
bool f6 = PostMessage(hWnd, WM_LBUTTONUP, 0, MAKEPARAM(point.X, point.Y));
}
需要注意的是, 我们在发送Click或DoubleClick的时候, 句柄(hWnd) 要找准确 方法才会有效。
比如我们要向Notepad 的编辑区域发送消息, 如果只找到Notepad句柄是不够的, 我们需要这个编辑区域的句柄才可以。
请参考:
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/b04153ff-e4fb-4500-a8e4-3a685208af57/