1

我觉得真的很愚蠢,因为我在我的代码中找不到问题......我想用 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);

不工作,我不明白为什么。已经尝试调试,但它只是没有向窗口发送任何消息。如果我用 pX 和 pY 调用它,它会再次按预期工作。不是一个大问题,因为我可以用 x 和 y 值来做,但它对我来说是更多的代码:P btw。也用自己的点结构尝试过。

所以我错过了什么吗?

4

0 回答 0