如何使用SendMessage()发送鼠标动作

时间:2015-03-05 10:43:37

标签: c# winforms mouseevent

我试图写一个简单的窗体,包含按钮, 其中一个按钮是将鼠标点击发送到活动应用程序,如记事本。所以我将点击按钮,按钮会将鼠标事件发送到记事本或任何应用程序。

它只发送右键单击或单击,
我为dll定义编写了这段代码:

[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 lbClassName,     StringlbWindowName);

// for events

private const uint WM_RBUTTONDOWN = 0x0204;
private const uint WM_RBUTTONUP = 0x0205;

//事件处理程序

private void button6_Click(object sender, EventArgs e)
{
    int window = FindWindow(null, "Notepad");
    SendMessage(window, WM_RBUTTONDOWN, 0, 0);
    SendMessage(window, WM_RBUTTONUP, 0, 0);
}

这不起作用!!

如何知道发送的鼠标点击次数?
为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

首先,您需要更正DllImport签名...

static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

然后你需要在FindWindow调用上设置一个断点并检查它确实返回一个包含窗口句柄值的IntPtr。

然后运行Spy ++并检查记事本是否与您的呼叫返回的实际窗口句柄相同。设置Spy ++将所有消息记录到记事本中,看它是否确实到达了目标窗口。