Я использую программу (Comsol), которая вычисляет формулу, введенную в одну ячейку таблицы, и помещает результат в другую ячейку. Первая ячейка является редактируемой, и я могу скопировать ее в буфер обмена с помощью Ctrl+C, но вторая ячейка не редактируется и Ctrl+C ничего не делает. Это означает, что мне нужно либо заново выполнить вычисления, либо вручную вводить цифры числового ответа.

Я использовал утилиту Window Spy из AutoHotkey (из контекстного меню сценария запуска AHK в системном трее), чтобы убедиться, что элемент управления, реализующий таблицу, является элементом управления ListView (называемым SysListView3217 или SysListView3218 или аналогичным), как и стандартный элемент управления Windows, так же, как используется в Windows Explorer для отображения файлов и папок. Это неудивительно, потому что Comsol GUI, очевидно, построен с SWT, который использует собственные элементы управления Windows.

Это на полпути там. Что может быть элегантным способом использования AutoHotkey для получения текста из SysListView?

1 ответ1

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 Explorer):

Скрипт боевика

Затем текст можно скопировать в буфер обмена из этого окна обычным сочетанием клавиш Ctrl+C.

(MouseGetPos выбирает SysListView, который в данный момент находится под курсором мыши, а строка после этого получает текст выбранной строки таблицы. Все остальные строки предназначены для отображения окна с текстовым полем, содержащим текст.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .