当前位置: 首页 > 知识库问答 >
问题:

获取另一个窗口中按钮的句柄

干弘深
2023-03-14

使用Inspect.exe我可以看到应用程序组件的树结构中存在一个按钮,但我找不到获取该按钮句柄的方法。这是控件的Inspect.exe输出:

How found:  Selected from tree...
Name:   "Options"
ControlType:    UIA_ButtonControlTypeId (0xC350)
LocalizedControlType:   "Button"
BoundingRectangle:  {l:805 t:286 r:821 b:302}
IsEnabled:  true
IsOffscreen:    false
IsKeyboardFocusable:    true
HasKeyboardFocus:   false
ProcessId:  4380
RuntimeId:  [2A.103FA.2.F6EBAC8.0]
AutomationId:   ""
ClassName:  "NetUISimpleButton"
IsControlElement:   true
IsContentElement:   false
ProviderDescription:    "[pid:4380,hwnd:0x0 Main(parent link):Unidentified Provider (unmanaged:mso.dll)]"
IsPeripheral:   [Not supported]
LiveSettingProperty:    [Not supported]
HelpText:   "Options"
FlowsFrom:  [Not supported]
OptimizeForVisualContent:   [Not supported]
Annotation.AnnotationAuthor:    [Not supported]
Annotation.AnnotationTypeId:    [Not supported]
Annotation.Author:  [Not supported]
Annotation.DateTime:    [Not supported]
Annotation.Target:  [Not supported]
Drag.DropEffect:    [Not supported]
Drag.DropEffects:   [Not supported]
Drag.GrabbedItems:  [Not supported]
Drag.IsGrabbed: [Not supported]
DropTarget.DropTargetEffect:    [Not supported]
DropTarget.DropTargetEffects:   [Not supported]
LegacyIAccessible.ChildId:  0
LegacyIAccessible.DefaultAction:    "Press"
LegacyIAccessible.Description:  ""
LegacyIAccessible.Help: "Options"
LegacyIAccessible.KeyboardShortcut: ""
LegacyIAccessible.Name: "Options"
LegacyIAccessible.Role: push button (0x2B)
LegacyIAccessible.State:    focusable (0x100000)
LegacyIAccessible.Value:    ""
ObjectModel.UnderlyingObjectModel:  [Error: calling getter for this property: hr=0xFFFFFFFF80070057 - The parameter is incorrect.]
SpreadsheetItem.AnnotationObjects:  [Not supported]
SpreadsheetItem.AnnotationTypes:    [Not supported]
SpreadsheetItem.Formula:    [Not supported]
Style.ExtendedProperties:   [Not supported]
Style.FillColor:    [Not supported]
Style.FillPatternColor: [Not supported]
Style.FillPatternStyle: [Not supported]
Style.Shape:    [Not supported]
Style.StyleId:  [Not supported]
Style.StyleName:    [Not supported]
Transform2.CanZoom: [Not supported]
Transform2.ZoomLevel:   [Not supported]
Transform2.ZoomMinimum: [Not supported]
Transform2.ZoomMaximum: [Not supported]
IsAnnotationPatternAvailable:   [Not supported]
IsDragPatternAvailable: [Not supported]
IsDockPatternAvailable: false
IsDropTargetPatternAvailable:   [Not supported]
IsExpandCollapsePatternAvailable:   false
IsGridItemPatternAvailable: false
IsGridPatternAvailable: false
IsInvokePatternAvailable:   true
IsItemContainerPatternAvailable:    false
IsLegacyIAccessiblePatternAvailable:    true
IsMultipleViewPatternAvailable: false
IsObjectModelPatternAvailable:  [Not supported]
IsRangeValuePatternAvailable:   false
IsScrollItemPatternAvailable:   true
IsScrollPatternAvailable:   false
IsSelectionItemPatternAvailable:    false
IsSelectionPatternAvailable:    false
IsSpreadsheetItemPatternAvailable:  [Not supported]
IsSpreadsheetPatternAvailable:  [Not supported]
IsStylesPatternAvailable:   [Not supported]
IsSynchronizedInputPatternAvailable:    false
IsTableItemPatternAvailable:    false
IsTablePatternAvailable:    false
IsTextChildPatternAvailable:    [Not supported]
IsTextEditPatternAvailable: [Not supported]
IsTextPatternAvailable: false
IsTextPattern2Available:    [Not supported]
IsTogglePatternAvailable:   false
IsTransformPatternAvailable:    false
IsTransform2PatternAvailable:   [Not supported]
IsValuePatternAvailable:    false
IsVirtualizedItemPatternAvailable:  false
IsWindowPatternAvailable:   false
FirstChild: "" Image
LastChild:  "" Image
Next:   "Show Menu" Button
Previous:   [null]
Other Props:    Object has no additional properties
Children:   "" Image
Ancestors:  "" SplitButton
    "Contacts" Pane
    "" Pane
    "" Custom Control
    "" Pane
    "" pane
    "Lync" window
    "Desktop" pane
    [ No Parent ]

这个按钮的特殊之处在于它没有hwnd值。(hwnd: 0x0)。这是我试图获得对该按钮的引用的内容:

currentWindow = FindWindowEx((IntPtr)hwnd, IntPtr.Zero, null, "Options");

在本例中,hwnd变量是包含按钮的应用程序主窗口的句柄。

在阅读FindWindowEx的留档时,看起来似乎有多种方法可以使用不同的参数,我觉得我已经尝试了所有方法。我在类参数中尝试了“NetUISimpleButton”,以及“Button”。我在窗口名称和控件名称“Options”中尝试了null,如上所述。我尝试了这两个字段中这些值的每一种组合。我还尝试了在主窗口的子窗口之后为子窗口指定一个值。我甚至尝试了将IntPtr。前两个参数都为零。

我开始认为这个hwnd:0x0是一个不祥的预兆,这意味着我根本没有访问这个按钮的选项。如果是这样的话,我还有其他选择吗?我只是想在应用程序中打开一个辅助窗口,这样我就可以再点击几个按钮和单选。

共有1个答案

龚奕
2023-03-14

UI自动化非常简单。这是我使用的代码,以防有人感兴趣。

int hwnd = FindWindow("CommunicatorMainWindowClass", null);

AutomationElement lync = AutomationElement.FromHandle((IntPtr)hwnd);
AutomationElement optionsButton = lync.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "Options"));
((InvokePattern)optionsButton.GetCurrentPattern(InvokePattern.Pattern)).Invoke();
 类似资料:
  • 我需要一些帮助。我在最后写下了我的问题,并将首先解释我的代码到底应该做什么: 我正在制作一个与其他程序进行通信的程序。我需要我的软件能够点击另一个程序上的按钮,我相信这样做的合适代码是: 具有 但是,我不知道如何获取hWnd,它是同时运行的另一个程序的特定窗口上的特定按钮的句柄。我在某个地方读到,我可能会做以下事情: 哪里: 但是,我对FindWindowEX()函数有一些问题。 问题1:我看到的

  • 本文向大家介绍python3 tkinter实现点击一个按钮跳出另一个窗口的方法,包括了python3 tkinter实现点击一个按钮跳出另一个窗口的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python3 tkinter实现点击一个按钮跳出另一个窗口的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我有一个netbeans Java应用程序,该应用程序在启动时应显示JFrame(StartUpWindow类扩展为JFrame类),并带有一些选项,然后用户单击一个按钮,然后关闭JFrame并打开一个新的(MainWindow类)。 因此,我该如何正确执行此操作。我显然在StartupWindow中的按钮上设置了一个单击处理程序,但是我应该在该处理程序中添加什么以便关闭StartUp

  • 我有我的UIController类和一个按钮方法类。按钮方法类包含按钮操作的所有代码。我需要能够使用按钮方法类中控制器类中的按钮。例如,我在控制器类中定义了这些 例如,单击按钮时,按钮锁定有一个动作事件 理想情况下,我希望按钮方法可以做到这一点: 出于各种原因,我不能将代码放在动作事件中,而将按钮对象放在参数中会让我的操作变得太混乱。那么如何将FXML对象放入button类中呢?

  • 我一直在Python3中学习tkinter,发现很难在网上找到好的留档和答案。为了帮助其他与同样的问题斗争的人,我决定发布一个简单问题的解决方案,这个问题似乎没有在线留档。 问题:创建一个类似向导的程序,向用户显示一系列窗口,用户可以在窗口之间移动,单击“下一步”和“上一步”按钮。 解决办法是: 创建一个根窗口 创建尽可能多的框架,以向用户显示窗口。将所有帧附着到根窗口 用所需的所有小部件填充每个