我在结构设计软件中构建一个插件,并且我使用C#来访问API。所有几何定义,材料,验证等都很好。我在应用程序中使用一个按钮来运行计算。完成计算后,会弹出附加的窗口。
作为递归过程的一部分,我试图自动按下"是"从使用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)?
非常感谢帮助。
最佳,
答案 0 :(得分:0)
在高层次上,我会提供一些选择:
使用Windows API和AutomationElement类。您应该能够执行“调用”自动化模式以单击该按钮。对我来说,这将是首选方法。
使用Windows API和SendInput使用键盘(或鼠标)单击按钮。
查看AutomationElement类:http://msdn.microsoft.com/en-us/library/system.windows.automation.automationelement%28v=vs.110%29.aspx
您可能希望找到“uispy”或其他一些用于查看AutomationElements的实用程序。另一种选择是等待窗口标题更改为您要查找的内容 - 假设对话框的窗口标题与主窗口不同。
一些有用的apis是:
[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 );
您可以使用键盘输入发送密钥:
你可以看看这个: