C#中通过API访问弹窗按钮

问题描述 投票:0回答:2

我正在结构设计软件中构建插件,并使用 C# 来访问 API。所有的几何定义、材料、验证等都很好。我使用应用程序中的按钮来运行计算。计算完成后,会弹出附加窗口。

enter image description here

作为递归过程的一部分,我尝试使用 SendMessage 从 API 自动按“是”,但我无法使其工作。代码如下所示:

    [DllImport("user32.dll")]
    public static extern int FindWindow(string lpclassName, string lpWindowName);
    [DllImport("user32.dll")]
    public static extern int SendMessage(int hWnd, uint msg, int wParam, int lParam);

    int WindowToFind = FindWindow(null, "Autodesk Robot Structural Analysis Professional 2014");
    SendMessage(WindowToFind, WM_LBUTTONDOWN, 0, 0);

有谁知道更好的方法来解决这个问题(也许是 mouse_event)?

非常感谢您的帮助。

最好的,

c#
2个回答
0
投票

在较高的层面上,我会给出一些选择:

  1. 使用 Windows API 和 AutomationElement 类。 您应该能够执行“调用”自动化模式来单击按钮。 对我来说,这将是执行此操作的首选方式。

  2. 使用Windows API加SendInput使用键盘(或鼠标)点击按钮。

查看 AutomationElement 类:http://msdn.microsoft.com/en-us/library/system.windows.automation.automationelement%28v=vs.110%29.aspx

您可能需要找到“uispy”或其他一些实用程序来查看 AutomationElements。 另一种选择是等待窗口标题更改为您要查找的内容 - 假设对话框的窗口标题与主窗口不同。

一些有用的 api 是:

[DllImport( "user32.dll", SetLastError = true )]
public static extern IntPtr GetForegroundWindow();


/// <summary>
/// gets the window title of the foreground window
/// </summary>
public static string GetWindowTitle()
{
   return GetWindowText( GetForegroundWindow() );
}

public static string GetWindowText( IntPtr hWnd )
{
   int length = GetWindowTextLength( hWnd );
   StringBuilder text = new StringBuilder( length + 1 );
   GetWindowText( hWnd, text, text.Capacity );
   return text.ToString();
}

[DllImport( "user32.dll", SetLastError = true, CharSet = CharSet.Auto )]
public static extern int GetWindowTextLength( IntPtr hwnd );

[DllImport( "user32.dll" )]
private static extern int GetWindowText( IntPtr hWnd, StringBuilder lpString, int nMaxCount );

您可以使用键盘输入来发送按键:

你可以看看这个:

http://inputsimulator.codeplex.com/


0
投票

这是一个非常古老的线程,但如果将来有人遇到这个:

// switch Interactive flag off to avoid any questions that need user interaction in Robot
        iapp.Interactive = 0;
© www.soinside.com 2019 - 2024. All rights reserved.