单击sendmessage API中的按钮

Pra*_*nga 2 c# api native

如何在C#中的sendmessage API中模拟按钮单击?

Meh*_*dad 5

C代码:

#include <Windows.h>
//...
SendMessage(hWndButton, BM_CLICK, 0, 0);
Run Code Online (Sandbox Code Playgroud)

C#代码:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

...
Button myButton = ...;
const int BM_CLICK = 0x00F5;
SendMessage(myButton.Handle, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

但请注意,在C#中,您可以轻松地做到:

myButton.PerformClick();
Run Code Online (Sandbox Code Playgroud)

  • 绝对*没有*理由使用 `SendMessage` 在你自己的应用程序中点击一个按钮(你可以使用 `myButton.Handle` 来获取它的句柄)。.NET Framework 中的每个 `Button` 控件都有一个 [`PerformClick` 方法](http://msdn.microsoft.com/en-us/library/system.windows.forms.button.performclick.aspx),您可以用于模拟按钮点击。使用`SendMessage`的*唯一*原因是如果你想在*另一个*应用程序中点击一个按钮,在这种情况下你还必须P/Invoke `FindWindow`和`GetWindow`来确定该按钮的句柄. (2认同)