我想用SendMessage发送鼠标点击但它没有用,我的代码有什么问题?

时间:2017-09-19 17:50:09

标签: c# sendmessage user32

我想用SendMessage发送鼠标点击但它不能正常工作,我的代码有什么问题?
Int窗口不为0,但仍无法正常工作。

    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);

    [DllImport("user32.dll")]
    public static extern int FindWindow(string lpClassName, string lpWindowName);

    private const uint WM_RBUTTONDOWN = 0x0204;
    private const uint WM_RBUTTONUP = 0x0205;
    private int MAKELPARAM(int p, int p_2)
    {
        return ((p_2 << 16) | (p & 0xFFFF));
    }
    public void ClickOnPoint(System.Drawing.Point p)
    {
        int window = FindWindow(null, "Untitled - Notepad");
        //System.Windows.Forms.MessageBox.Show(window + "\n" );
        SendMessage(window, WM_RBUTTONDOWN, 0, MAKELPARAM(500,500));
        SendMessage(window, WM_RBUTTONUP, 0, MAKELPARAM(500, 500));
    }

2 个答案:

答案 0 :(得分:1)

我尝试这样做。

  1. 我使用spy ++在记事本(红色矩形)的编辑区域中找到编辑区域的处理(红色圆圈) enter image description here
  2. 从1.我在SendMessage的参数中使用Red Circle中的Handle enter image description here
  3. 我能正确理解吗? 点击按钮后..我的记事本没有更新任何内容。

    ......这项工作对我来说enter image description here

答案 1 :(得分:0)

“textarea”是记事本应用程序主窗口的子窗口。

enter image description here

(使用Spy ++在Windows 10上截图)

我们需要该子窗口的窗口句柄,它没有标题和“EDIT”类,并将鼠标单击消息发送到该子窗口以显示其上下文菜单。

使用this answer从您已经获得的子窗口句柄中获取子窗口句柄。

请务必仅使用有效句柄调用API函数:

if(IsWindow(hWndChild))
{
    SendMessage(hWndChild, WM_RBUTTONDOWN, MK_RBUTTON, MAKELPARAM(p.X, p.Y));
    SendMessage(hWndChild, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(p.X, p.Y));
}

警告:这是特定于实现的。您永远不会知道在未来的版本中是否会继续像这样构建记事本。虽然,IMO,在所有Windows应用程序中,它可能最有可能保持不变。

相关问题