我感到非常愚蠢,因为我无法在代码中找到问题... 我想用SendMessage发送鼠标点击。所以我的代码是以下
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
private void MouseClick(IntPtr hWnd, int X, int Y)
{
SendMessage(hWnd, WM_LBUTTONDOWN, (IntPtr)0x1, CreateLParam(X, Y));
SendMessage(hWnd, WM_LBUTTONUP, (IntPtr)0x0, CreateLParam(X, Y));
}
private void MouseClick(IntPtr hwnd, System.Drawing.Point p)
{
SendMessage(hWnd, WM_LBUTTONDOWN, (IntPtr)0x1, CreateLParam(p.X, p.Y));
SendMessage(hWnd, WM_LBUTTONUP, (IntPtr)0x0, CreateLParam(p.X, p.Y));
}
和CreateLParam只是一个在LParam中转换x,y坐标的函数:
private static IntPtr CreateLParam(int x, int y)
{
return (IntPtr)(x | (y << 16));
}
正如你所看到的,我想用一个点来调用这个方法因为对我来说比总是有两个变量varX和varY更容易(并且如果它正在工作,也想在CreateLParam中更改它... ) 现在的问题是,呼叫
int X = //some value here
int Y = //some value here
MouseClick(appWnd, X, Y);
正在工作,但电话
int X = //some value here
int Y = //some value here
var p = new System.Drawing.Point(X, Y);
MouseClick(appWnd, p);
无效,我无法理解原因。已经尝试调试,但它只是没有向窗口发送任何消息。如果我用p.X和p.Y调用它,它会再次被检测到。这不是一个大问题,因为我可以用x和y值来做,但是对我来说代码更多:P btw。也尝试了自己的点结构。
我错过了什么?