如何从窗口获取文本内容

2023-12-10

我有一个展示一本书的窗口。下面的两个较小的框中,有打开的书的页码和卷信息。我可以轻松获取该信息,如下所示:

ControlGetText, volume, ThunderRT6TextBox3      
ControlGetText, page, ThunderRT6TextBox2

然后我的脚本使我的鼠标指针移动到一个按钮。单击它,会弹出一个新窗口。在该窗口中,有更多与该书相关的文本信息,例如出版商、作者姓名、版本等。我想检索该信息。但是当我尝试相同的策略时它不起作用,例如:

ControlGetText, data, RichTextWndClass3

两种情况之间的唯一区别是,这两个小框是可编辑的,您可以输入文本,而该窗口是静态的。

我尝试了许多其他选项,例如:SendEvent ^a这相当于 control + a,它应该选择所有内容。我尝试暂停,但它永远不会选择。我尝试使用脚本手动双击该窗口。它有效,并且像这样选择了一个单词。即使如此,SendEvent ^a 也不会执行任何操作。 但是,如果我执行 SendEvent ^{insert},则所选单词将被复制到我的剪贴板。

我尝试了更多的组合:

ControlSend ahk_class ThunderRT6FormDC, ^a
ControlSend ClassNN RichTextWndClass3, ^a

and

ControlSend ThunderRT6FormDC, ^a
ControlSend RichTextWndClass3, ^a

它们都不起作用。所有文本选择不会在该窗口中显示出来。

我剩下的唯一选择是让脚本手动选择整个文本。然而,这是缓慢且非常荒谬的。此外,在 Window Spy 的“可见窗口文本”部分下,文本都在那里。我尝试了很多其他的可能性,但我已经束手无策了。我如何直接收获该文本?


编辑 - 窗口的文本显示在 Window Spy 的标题下:TitleMatchMode=slow Visible Text,而不是标题:Visible Window Text


编辑 - 我跟你谈过两个窗户。第一个我得到卷和页码。第二个需要通过按按钮弹出。 这两个窗口具有相同的类名: ahk_class ThunderRT6MDIForm 这有什么问题吗?


编辑 - 结论是我不可能直接从第二个窗口获取该文本。因此,我选择了蹩脚、无聊的手动方法。我向活动窗口发送 {shift down},然后单击窗口底部。然后我将选择保存到剪贴板。它有效,但它只是愚蠢的。请帮我找到一种比这个更优雅的解决方案。

这是我使用的代码:

ControlGetText, volume, ThunderRT6TextBox3 

ControlGetText, page, ThunderRT6TextBox2 

Click, 110, 70 

sleep 1000

SendInput {shift down}

click 29, 490

SendInput {shift up}

sleep 1000

SendInput, ^{ins} 

sleep 100

有趣的是,真正的键盘按键,例如 a b c 是不可能的。但我可以发送 ctrl、shift 和 ins。正如我上面提到的,^c 也给出了问题,就像 ^a 给出了问题一样。


该例程将完成从活动窗口获取和返回以下文本部分的工作: - EdtWindowTextFastVisible - EdtWindowTextSlowVisible - EdtWindowTextFastHidden - EdtWindowTextSlowHidden

MyGetWindowText(ByRef EdtWindowTextFastVisible, ByRef EdtWindowTextSlowVisible, ByRef EdtWindowTextFastHidden,ByRef EdtWindowTextSlowHidden)
{
; Source: https://code.google.com/p/autohotkey-cn/source/browse/trunk/Source/AHK_Window_Info/AHK_Window_Info_v1.7.ahk?r=6
EdtWindowTextFastVisible =
EdtWindowTextSlowVisible =
EdtWindowTextFastHidden =
EdtWindowTextSlowHidden =

WindowControlTextSize = 32767
VarSetCapacity(WindowControlText, WindowControlTextSize)
WinGet, WindowUniqueID, ID, A

;Suggested by Chris
WinGet, ListOfControlHandles, ControlListHwnd, ahk_id %WindowUniqueID% ; Requires v1.0.43.06+.
Loop, Parse, ListOfControlHandles, `n
{
    text_is_fast := true
    If not DllCall("GetWindowText", "uint", A_LoopField, "str", WindowControlText, "int", WindowControlTextSize)
    {
        text_is_fast := false
        SendMessage, 0xD, WindowControlTextSize, &WindowControlText,, ahk_id %A_LoopField% ; 0xD is WM_GETTEXT
    }
    If (WindowControlText <> ""){
        ControlGet, WindowControlStyle, Style,,, ahk_id %A_LoopField%
        If (WindowControlStyle & 0x10000000)
        { ; Control is visible vs. hidden (WS_VISIBLE).
            If text_is_fast
            EdtWindowTextFastVisible = %EdtWindowTextFastVisible%%WindowControlText%`r`n
            Else
            EdtWindowTextSlowVisible = %EdtWindowTextSlowVisible%%WindowControlText%`r`n
        } Else
        { ; Hidden text.
            If text_is_fast
            EdtWindowTextFastHidden = %EdtWindowTextFastHidden%%WindowControlText%`r`n
            Else
            EdtWindowTextSlowHidden = %EdtWindowTextSlowHidden%%WindowControlText%`r`n
        }
    }
}

;EdtWindowTextFastVisibleFull := ShowOnlyAPartInGui("EdtWindowTextFastVisible", EdtWindowTextFastVisible, 400)
;EdtWindowTextSlowVisibleFull := ShowOnlyAPartInGui("EdtWindowTextSlowVisible", EdtWindowTextSlowVisible, 400)
;EdtWindowTextFastHiddenFull := ShowOnlyAPartInGui("EdtWindowTextFastHidden", EdtWindowTextFastHidden, 400)
;EdtWindowTextSlowHiddenFull := ShowOnlyAPartInGui("EdtWindowTextSlowHidden", EdtWindowTextSlowHidden, 400)

Return
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从窗口获取文本内容 的相关文章

随机推荐

  • 如何将所有网络流量重定向到特定页面?

    有没有办法将我网站的所有流量重定向到特定页面 我的免费主机确实支持 PHP 不确定这是否适合于此 谢谢 如果您的主机基于 Apache 并支持模组重写 用那个 例如 WordPress 典型的重写 将对不存在的文件 文件夹的请求重定向到in
  • std::数组的向量

    以下声明通过编译检查 int arr 3 vector
  • 如何将 Perlin 噪声值标准化到范围 [0, 1]?

    我正在使用 numpy 数组来保存柏林噪声值 有人告诉我 二维数组中的柏林噪声值分别在 0 7 0 7 范围内 但这似乎并非如此 至少对于凯斯曼来说不是 noise 库 当我调整八度 持久性和空白度的参数时 我会使用不同的库 但我找不到任何
  • Powerpoint VBA - 更改配色方案

    我需要通过 VBA 代码将演示文稿的配色方案更改为 Office 2007 2010 我怎样才能做到这一点 我尝试了类似下面的方法 但似乎不起作用 ActivePresentation ColorSchemes Add ActivePres
  • 如何在 laravel 5.3 中显示当前日期的日期名称?

    我想在 laravel 5 3 中打印当前日期的名称 我可以通过以下方式获取当前日期 上面的代码打印 25 但我希望它打印星期四 我应该怎么做 Try this
  • 有没有办法在密码文本模式下设置 ASP.NET 文本框密码字符?

    我希望当用户输入文本时 它应该显示 而不是一个简单的星号 有没有办法 在win forms的TextBox中有一个属性PasswordChar 它在web中有何相似之处 不 这是特定于浏览器的 也许你可以用 javascript 来伪造这个
  • 如何在 Delphi XE 中国际化我的应用程序?

    我正在使用 Delphi 中包含的翻译管理器 xe8 但在旧版本中应该相同 我转到 Projet gt 语言 gt 添加 选择英语 然后我翻译文本 这里是按钮 我全部更新并编译 我得到了 exe 和 enu 文件 它是法语的 当我转到 Pr
  • matlab中的KNN算法

    我正在研究拇指识别系统 我需要实现 KNN 算法来对我的图像进行分类 根据this 它只有 2 个测量值 通过这些测量值计算找到最近邻居的距离 但在我的例子中 我有 400 张 25 X 42 的图像 其中 200 个用于训练 200 个用
  • Spring Boot REST · @Constraint 用于删除?

    我正在开发一个使用 Spring Boot REST HATEOAS Hibernate 和 PostgreSQL 的系统后端 为了验证 我开始使用以下类extend org springframework validation Valid
  • LibGDX 移动旋转相机

    我在使用 LibGDX 构建的应用程序中遇到了一种情况 我需要相机能够旋转 并且可以由用户移动 并且能够缩放 我的相机移动和缩放相机的控件工作得很好 但是 当相机旋转时 相机会根据该旋转移动 例如 如果相机向左旋转 45 度 并且用户向右拖
  • 张量流/keras中输入的自相关

    我有一个一维输入信号 我想计算自相关作为神经网络的一部分 以便在网络内部进一步使用 我需要对输入与输入本身进行卷积 在 keras 自定义层 张量流中执行卷积 我们需要以下参数data shape is batch in height in
  • data.frame 中每组的平均值[重复]

    这个问题在这里已经有答案了 我有一个data frame我需要计算每组的平均值 即每Month 以下 Name Month Rate1 Rate2 Aira 1 12 23 Aira 2 18 73 Aira 3 19 45 Ben 1 5
  • 使用 javascript 以管理员身份运行批处理的简单方法

    我想导出一种简单可靠的方法来自动提升正在运行的批处理 而无需使用其他线程中建议的额外 VBS 文件或提升的快捷方式 通过 javascript 从批处理中调用 UAC 对话框可确保代码简短 当在对话框中选择 是 时 下面的脚本会自动将用户正
  • 多维数组中的多个文件上传

    我有一个 php 表单 行数未知 用户可以在其中上传文件 为此 我使用二维数组
  • 如何使用java读取https页面内容? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何使用java读取https页面内容 以下是检索 页面内容 的示例https maven apache org guides mini guide repository ssl
  • 抛出异常时不会调用移动构造函数

    我有一个累积当前异常的变量 并且需要在引发当前异常时进行清理 以便不会再次报告相同的错误 问题是throw std move ex 不调用移动构造函数 这会清理ex 而是调用复制构造函数 以便ex也保留已经抛出的错误 MVCE 如下 inc
  • Svelte:如何将操作传递给组件?

    有一个类似的问题被问到here但我不认为答案适用于我的用例 我在用着纤薄的材质 UI并试图延长数据表具有拖放行功能的组件 我正在使用简洁的 dnd 操作模块支持拖放行为 以下效果很好 我可以拖放表格的行 table thead thead
  • 卸载视图控制器时,保留/强类成员变量会自动清理吗?

    我有以下财产 h property nonatomic strong NSMutableDictionary cache m synthesize cache cache 的数据 cache建立在 viewDidLoad 之上 现在我想知道
  • 如何在Spring Security中传递参数和注销成功url?

    我在我的 spring boot 应用程序中使用基于 java 的 spring 安全配置 当用户单击注销链接时 用户将被重定向到登录页面 在本例中 我需要在注销成功 url 中传递自定义参数 例如当我注销时 应用程序被重定向到http l
  • 如何从窗口获取文本内容

    我有一个展示一本书的窗口 下面的两个较小的框中 有打开的书的页码和卷信息 我可以轻松获取该信息 如下所示 ControlGetText volume ThunderRT6TextBox3 ControlGetText page Thunde