SendMessage与Point无法正常工作

时间:2016-12-27 01:04:01

标签: c# point sendmessage lparam

我感到非常愚蠢,因为我无法在代码中找到问题... 我想用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。也尝试了自己的点结构。

我错过了什么?

0 个答案:

没有答案