单击另一个应用程序中的按钮

sam*_*sam 5 c#

我想要你使用SendMessagePostMessage按下另一个应用程序中的按钮

我有一个示例代码通过获取Window Handle来执行此操作,但它不起作用

我还使用"WinDowse"获取所需信息.这是代码

private const uint BM_CLICK = 0x00F5;
private const uint WM_LBUTTONDOWN = 0x0201;
private const uint WM_LBUTTONUP = 0x0202;

private void PushOKButton(IntPtr ptrWindow)
{
    WindowHandle = FindWindow(null, "Form1"); 
    if (ptrWindow == IntPtr.Zero)
      return;

    IntPtr ptrOKButton = FindWindowEx(ptrWindow, IntPtr.Zero, "Button", "&Yes");

    if (ptrOKButton == IntPtr.Zero)
      return;

    SendMessage(ptrOKButton, WM_LBUTTONDOWN, 0, 0);
    SendMessage(ptrOKButton, WM_LBUTTONUP, 0, 0);
    SendMessage(ptrOKButton, BM_CLICK, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

在c#中有一个Compelete Suloution?

Gre*_*jan 0

你的总体思路是正确的。自动化总是有技巧的。

按钮向下/向上与单击的原始操作非常接近,但并不完全相同。你会想要考虑

  1. 您点击的坐标 - 有些按钮不喜欢在 0,0 处点击边缘
  2. 鼠标的位置 - 鼠标在开始或结束时位于按钮之外可能会导致其无法工作
  3. 单击时间 - 有时快速单击会被忽略,添加一个小延迟(例如 10 毫秒)

BM_Click 是一条额外的 win32 消息,当鼠标单击按钮时发送 - 如果控件是单独使用此消息的正确类型,则这是更短的方法并且更容易。

我们做了一些努力来防止诸如使用 WM_GetText 来从外部应用程序编辑密码之类的事情,请注意,根据目标应用程序,您可能还会遇到问题。

不幸的是,我现在没有 C# 示例代码供您使用。

也许您可以研究一下AutoIT以节省一些时间。