Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想用SendMessage发送鼠标点击,但它';它不工作了,我的代码怎么了?_C#_Sendmessage_User32 - Fatal编程技术网

C# 我想用SendMessage发送鼠标点击,但它';它不工作了,我的代码怎么了?

C# 我想用SendMessage发送鼠标点击,但它';它不工作了,我的代码怎么了?,c#,sendmessage,user32,C#,Sendmessage,User32,我想用SendMessage发送鼠标点击,但它不工作,我的代码怎么了? Int window不是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

我想用SendMessage发送鼠标点击,但它不工作,我的代码怎么了?
Int window不是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));
    }
[DllImport(“user32.dll”)]
公共静态外部int SendMessage(int hWnd、uint Msg、int wParam、int lParam);
[DllImport(“user32.dll”)]
公共静态外部程序int FindWindow(字符串lpClassName,字符串lpWindowName);
私人建筑WM_RBUTTONDOWN=0x0204;
私人建筑WM_RBUTTONUP=0x0205;
私有int MAKELPARAM(int p,int p_2)
{
return((p_2文本区域)是记事本应用程序主窗口的子窗口

(使用Spy++在Windows 10上拍摄的屏幕截图)

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

用于从已获取的子窗口句柄中获取子窗口句柄

请确保仅使用有效句柄调用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));
}
警告:这是特定于实现的。您永远无法知道记事本是否会在将来的版本中继续像这样构建。尽管在我看来,在所有Windows应用程序中,记事本可能是最有可能保持不变的应用程序。

我尝试这样做

  • 我在记事本(红色矩形)的编辑器区域中使用spy++查找编辑区域的句柄(红色圆圈)
  • 从1开始。我在SendMessage的参数中使用红色圆圈的句柄
  • 我的理解正确吗? 点击按钮后,我的记事本不会更新任何内容


    …这对我有用

    如何检测它是否有效?在(500500)处是否有记事本窗口并希望它显示它的上下文菜单?注意坐标与窗口的客户端坐标相对应,而不是绝对的屏幕坐标。你可以使用一个像Windows间谍工具这样的工具来查看消息是否被接收。还要考虑。我在(500500)检查记事本的窗口(全屏)。是textarea。在我的代码中,它必须显示menubox(撤消、剪切、复制、粘贴、删除等),但它不显示。是
    SedMessage
    0的返回值(表示消息成功传递)?如果它不为零,请调用
    GetLastError
    。建议wParam值应该是MK_RBUTTON而不是0。我使用int x=SendMessage(window,WM_RBUTTONDOWN,0,MAKELPARAM(500500));调用my function x=0后,您将其发送到错误的窗口。记事本中可响应右键单击的可编辑区域是FindWindow返回的窗口的子窗口。请使用Spy++实用程序获取详细信息。