C# 我想用SendMessage发送鼠标点击,但它';它不工作了,我的代码怎么了?
我想用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
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++实用程序获取详细信息。