Kopieren (in die Zwischenablage) von der Tabelle (Liste) in einem Programm unter Windows

0

Ich verwende ein Programm (Comsol), das eine in eine Zelle einer Tabelle eingegebene Formel berechnet und das Ergebnis in eine andere Zelle legt. Die erste Zelle kann bearbeitet werden und ich kann sie mit Strg + C in die Zwischenablage kopieren, aber die zweite Zelle kann nicht bearbeitet werden und Strg + C führt keine Aktionen aus. Das bedeutet, dass ich die Berechnung entweder selbst neu implementieren oder die Ziffern der numerischen Antwort manuell eingeben muss.

Ich habe das Windows Spy- Dienstprogramm von AutoHotkey (über das Kontextmenü eines ausgeführten AHK-Skripts in der Taskleiste) verwendet, um festzustellen, dass das Steuerelement, das die Tabelle implementiert, ein ListView-Steuerelement (SysListView3217 oder SysListView3218 oder ähnliches Steuerelement) ist. Genauso wie im Windows Explorer zum Anzeigen von Dateien und Ordnern. Dies ist nicht verwunderlich, da die grafische Benutzeroberfläche von Comsol offensichtlich mit SWT erstellt wurde, das native Windows-Steuerelemente verwendet.

Das ist auf halbem Weg. Was wäre eine elegante Möglichkeit, mit AutoHotkey den Text aus der SysListView abzurufen?

Evgeni Sergeev
quelle

Antworten:

1

Hier ist ein Skript, das Beispiele aus verschiedenen Quellen sammelt ( insbesondere aus dieser und auch dieser ):

#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

Legen Sie diese in eine AHK-Datei, um sie auszuführen. Wählen Sie eine Zeile im SysListView-Steuerelement aus, und drücken Sie Win + C. Daraufhin sollte ein Fenster wie das folgende angezeigt werden (Beispiel: Windows Explorer):

Drehbuchaktion erschossen

Der Text kann dann mit der üblichen Tastenkombination Strg + C aus diesem Fenster in die Zwischenablage kopiert werden.

(Die MouseGetPosZeile wählt die SysListView aus, die sich gerade unter dem Mauszeiger befindet, und die Zeile danach enthält den Text der ausgewählten Tabellenzeile. Alle anderen Zeilen dienen zum Anzeigen des Fensters mit einem Textfeld, das den Text enthält.)

Evgeni Sergeev
quelle
Beachten Sie, dass, wenn wir das Wort entfernen Selected(dh der Kontext wird List, , , ahk_id %ListView_hwnd%), alle Elemente kopiert werden. Dies gilt für Listen, in denen jeweils nur eine Zeile ausgewählt werden kann (wie das Listensteuerelement im Windows Update-Verlauf).
Evgeni Sergeev