【问题标题】:VB .NET Automation of selecting options in menu strip of external programVB .NET 自动选择外部程序菜单条中的选项
【发布时间】:2016-06-19 13:22:25
【问题描述】:

我正在尝试使用 VB .NET 自动化外部应用程序。外部应用程序是用 VB .NET 编写的,并使用 win 表单。使用 Spy++,我可以编辑文本字段并按下按钮等。但是,我不确定如何从菜单中选择一个项目。

在应用程序的顶部是一个菜单,它也有子菜单和二级子菜单,类似于here。 Spy++ 将整个菜单条视为一个元素,如果我有菜单条的句柄,我不知道如何选择一个项目。

到目前为止,我只是通过以下方式自动化应用程序:

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As String) As Integer

也许有一个处理这样的菜单的api,但我还没有找到。

希望有人能启发我:)

【问题讨论】:

    标签: vb.net winapi


    【解决方案1】:

    在 WinForms 中,有两种不同类型的菜单。较旧的 MainMenu 控件实现了本机 Win32 样式的菜单,您可以使用 standard Windows API functions 操作这些菜单。较新的 MenuStrip 控件是一个完全由所有者绘制的菜单栏,用 C# 编写,旨在模仿 2000 年的 Microsoft Office 应用程序的外观。不幸的是,许多 WinForms 应用程序使用丑陋的 MenuStrip 控件,因为它 (A) 是默认控件,并且 (B) 使在菜单项上显示图像更容易。因为 MenuStrip 是用 C# 编写的,并且与本机 Win32 菜单实现无关,所以不能使用标准 API 函数与之交互。 Spy++ 将其显示为单个控件,实际上是一个黑盒子。

    不过,大多数其他 WinForms 控件(如按钮和文本框)都是原生 Win32 控件的包装器,因此您可以使用 Spy++ 查看它们并使用标准 Windows API 函数与它们交互。 (当然,您不应该调用这些函数的 ANSI 版本,除非您正在编写 VB 6 应用程序。)

    如果您绝对必须操作另一个应用程序的内部,那么您应该使用UI Automation 来执行此操作。这适用于真实控件和虚假控件。

    【讨论】:

    • 谢谢。以前研究过 UI 自动化并记得发现它令人困惑。但是,再次查看它并开始了解更多。这实际上是我需要的答案 - 您的明确指导使我走上了正确的轨道:) 对于寻找编码示例的其他人,我发现了这个(我认为是 C#):stackoverflow.com/questions/29119171/…,这很容易适应 VB。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2022-10-17
    • 2021-10-29
    • 2012-01-24
    • 2011-05-25
    • 2015-03-28
    • 2015-10-12
    相关资源
    最近更新 更多