我正在使用一个程序 (Comsol),它计算在表格的一个单元格中输入的公式,并将结果放入另一个单元格。第一个单元格是可编辑的,我可以使用 Ctrl+C 从中复制到剪贴板,但第二个单元格是不可编辑的,Ctrl+C 不起作用。这意味着我要么自己重新执行计算,要么手动输入数字答案的数字。
我用的是窗口间谍从 AutoHotkey 实用程序(从系统托盘中运行脚本的 AHK 上下文菜单)中看到,实现表格的控件是 ListView 控件(称为 SysListView3217 或 SysListView3218 或类似名称),因此是标准的 Windows 控件,与 Windows 资源管理器中用于显示文件和文件夹的控件相同。这并不奇怪,因为 Comsol GUI 显然是用 SWT 构建的,它使用原生的 Windows 控件。
这只是一半。使用 AutoHotkey 从 SysListView 中获取文本的优雅方法是什么?
答案1
从多个来源收集例子(特别是这个,并且这),下面是我写的一个脚本:
#SingleInstance Force
#NoEnv
#c::
MouseGetPos, , , , ListView_hwnd, 2 ;2 means return HWND
ControlGet, selected_row_text, List, Selected, , ahk_id %ListView_hwnd%
Gui, +ToolWindow +AlwaysOnTop -Caption
Gui, Add, Edit, unused_variable x11 y15 w950 h66, %selected_row_text%
Gui, Add, Button, x62 y84 w140 h30 +Center, Close
Gui, Show, ,
return
ButtonClose:
Gui, Destroy
return
将其放入 AHK 文件中运行。选择 SysListView 控件中的一行,然后按 Win+C,您将获得如下窗口(以熟悉的 Windows 资源管理器为例):
然后可以使用常用的 Ctrl+C 将文本从该窗口复制到剪贴板。
(该MouseGetPos
行选择当前鼠标光标下的 SysListView,之后的行获取所选表行的文本。所有其他行都用于显示带有包含文本的文本框的窗口。)