【问题标题】:How do I click and edit text fields in apps?如何单击和编辑应用程序中的文本字段?
【发布时间】:2022-11-17 19:22:17
【问题描述】:

我已经能够使用 autohotkey 制作一个脚本,但它使用了一系列冗长的 SendInputs 命令 手动移动鼠标并单击文本字段。

我想弄清楚如何使用 Acc 库单击特定的文本字段并输入新值。

我的问题是没有固体绝对的菜鸟关于如何完成如此简单的任务的友好解释。我花了一整天的时间搜索 autohotkey 论坛,但没有找到任何可以充分解释其工作原理的内容。我也搜索了谷歌,但在其他 autohotkey 网站上没有任何帮助;我在 YouTube 上搜索了任何可以提供帮助的教程,但唉,El Zilcho

我需要 autohotkey 进入 Davinci Resolve(免费和强大的版本)并在检查器窗口中选择一个文本字段,特别是缩放文本字段,例如,使用 Acc 库。

我什至不知道如何开始着手去做。我使用 Accessible Info Viewer 来查找特定的标识属性来查找文本字段,但当我遇到以下问题时,我立即遇到了困难:

  1. 选择文本字段,然后
  2. 与其交互,即双击文本字段并用值替换当前值

    我尽我所能找到任何有助于完成任务的东西,但找不到任何相关信息。如果我看起来不称职,我真的很抱歉,我真的找不到任何适合初学者的东西来了解这些东西是如何工作的。对不起 :(

    编辑:22/4/2 我一直在做大量的挖掘,这是迄今为止我能拼凑的最多的东西:

    #+j:: 
    WinGet, hWnd, ID, A
    vAcc := Acc_Get("Object", "4.2.2.1.1.2.4.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1", 0, "ahk_id" hWnd)
    %vAcc%.accDoDefaultAction(0)
    return
    

    我找到了识别当前窗口并读回对象路径值的代码,所以我想“创建一个包含缩放文本框位置的变量”。 从那里,调用变量并调用我认为是执行所述对象动作的函数。 重申一下,我需要在缩放框中输入一个新值。手动双击它并输入一个值。我已经制作了一个使用 SendInput 命令执行此操作的脚本,但是我希望能够在激活热键之前绝对不需要将面板置于特定位置的情况下实现此效果。

【问题讨论】:

  • 请在以后的帖子中删除所有不相关的聊天和不必要的噪音。这不是聊天室或论坛。这是一个技术问答网站,所以在解释问题时请简明扼要,尽量减少冗长的措辞。您可能需要查看 help center 页面,尤其是 How to Ask,以改善您在这里的体验。
  • 对不起伙计,我是超级新人
  • 是的,我可以看到。 :-) 这就是为什么我从你的帖子中删除了不相关的内容,并为你未来在这里的体验提供了一些建议。
  • 如果您使用 Window Spy(应该与您的 Autohotkey 安装一起安装),您可以获得控件的 ID。使用命令“ControlSend”向其发送文本。例如。如果缩放控件命名为 zoomX 并且窗口命名为“Davinci Resolve”,并且您想要 2.00 的缩放,请尝试:#+j:: ControlSend , zoomX, 2, Davinci Resolve

标签: automation autohotkey ui-automation


【解决方案1】:

请改用UIAutomation。它是 Acc/MSAA 框架的继承者。

这是 example1 代码

#NoEnv
#SingleInstance force
SetTitleMatchMode, 2

;#include <UIA_Interface> ; Uncomment if you have moved UIA_Interface.ahk to your main Lib folder
#include ..LibUIA_Interface.ahk

Run, notepad.exe
UIA := UIA_Interface() ; Initialize UIA interface
WinWaitActive, ahk_exe notepad.exe
npEl := UIA.ElementFromHandle("ahk_exe notepad.exe") ; Get the element for the Notepad window
documentEl := npEl.FindFirstByType("Document") ; Find the first Document control (in Notepad there is only one). This assumes the user is running a relatively recent Windows and UIA interface version 2+ is available. In UIA interface v1 this control was Edit, so an alternative option instead of "Document" would be "UIA.__Version > 1 ? "Document" : "Edit""
documentEl.Highlight() ; Highlight the found element
documentEl.Value := "Lorem ipsum" ; Set the value for the document control. 
; Equivalent ways of setting the value:
; documentEl.CurrentValue := "Lorem ipsum"
; documentEl.SetValue("Lorem ipsum")
ExitApp

使用一些查找方法(FindFirstByName, FindFirstByType, ...)得到你想要点击的元素,然后调用element.Click()。

UIAutomation Github wiki

【讨论】:

  • 请不要只发布一些工具或库作为答案。至少在答案本身中展示 how it solves the problem
  • 谢谢杜剑锋。我相信 cigien 在您发布编辑的过程中发现了您而没有意识到。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2017-12-16
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多