Korrigieren Sie Alt-Tab in LabView

Wenn Sie ein Programm in LabView schreiben, wird es irgendwann zu viel, um in einen Bildschirm zu passen. "Guter Geschmack" LabView schlägt vor, dass Sie in solchen Fällen eine vi-Datei in mehrere subvi-Dateien aufteilen müssen. Im Laufe der Zeit gibt es viele solcher Subvi. Allerdings haben sich die NI-Leute irgendwie nicht um die bequeme Navigation gekümmert.

LabView verschiebt nicht nur alle Fenster an den Anfang der Alt-Tab-Liste (niemand anderes tut dies: en.wikipedia.org/wiki/Alt-Tab ), sondern trotz der weit verbreiteten Möglichkeit, Symbole für vi-Dateien neu zu definieren. Alt-Tab-Liste anstelle von ihnen - schlanke Zeilen von LabView-Logos:

Bild

Einige dieser Verhaltensweisen erfordern den Kauf eines zweiten Monitors. Für sie ist das Problem damit weitgehend gelöst. Die Windows Aero-Oberfläche mit ihren Miniaturansichten im Alt-Tab-Menü hilft teilweise noch. Die Lösung, die an der Oberfläche zu liegen scheint - (a) um den Wechsel vorzunehmen, ist dieselbe wie in allen anderen Anwendungen und (b) um vi-Symbole in der Liste anzuzeigen - ist mit Standardmitteln nicht erreichbar.

Gemessen an der Tatsache, dass es fast von der ersten Version an begann und die entsprechende „Idee zur Verbesserung“ im „Forum für den Gedankenaustausch“ von 2010 forums.ni.com/t5/LabVIEW-Idea-Exchange/Make-Alt verstaubt -Tab-Verhalten-konsistent-mit-anderen-Anwendungen / idi-p / 1162219 , National Instruments danach zu fragen, ist nutzlos. Es kann jedoch noch etwas getan werden.

Teil 1. Beenden Sie Labview mit einem Klick


Zuerst habe ich diese Art von Skript in Python geschrieben, mit dem Sie beispielsweise mit einem Klick zwischen dem Browser und dem aktuellen LV-Fenster wechseln können, z. B. Alt-`:

import ctypes
EnumWindows = ctypes.windll.user32.EnumWindows
EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
GetWindowText = ctypes.windll.user32.GetWindowTextW
GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
IsWindowVisible = ctypes.windll.user32.IsWindowVisible
GetClassName = ctypes.windll.user32.GetClassNameW
SwitchToThisWindow = ctypes.windll.user32.SwitchToThisWindow
we_are_in_labview = None
def get_title(hwnd):
    length = GetWindowTextLength(hwnd)
    buff = ctypes.create_unicode_buffer(length + 1)
    GetWindowText(hwnd, buff, length + 1)
    return buff.value
def get_cls(hwnd):
    buff = ctypes.create_unicode_buffer(100)
    GetClassName(hwnd, buff, 99)
    return buff.value
def foreach_window(hwnd, lParam):
    global we_are_in_labview
    title, cls = get_title(hwnd), get_cls(hwnd)
    if IsWindowVisible(hwnd):
        title, cls = get_title(hwnd), get_cls(hwnd)
        if (title, cls) in (('Start', 'Button'), ('', 'Shell_TrayWnd')) or \
           cls == 'TeamViewer_TitleBarButtonClass':
            return True
        if we_are_in_labview is None:
            we_are_in_labview = cls.startswith('LV')
        else:
            if we_are_in_labview and cls.startswith('LV'):
                return True
            SwitchToThisWindow(hwnd, True)
            return False
    return True
EnumWindows(EnumWindowsProc(foreach_window), 0)

Im Allgemeinen habe ich gleichzeitig in c und Python geschrieben. Hier gebe ich die Python-Version an, da der Code etwas besser lesbar ist und ohne Visual Studio ausgeführt werden kann (es wird nur Python einer beliebigen Version benötigt: 2.x oder 3.x).
Sie können ein Skript, das in Python ausgeführt wird, an eine Tastenkombination hängen, aber die Verwendung von Autohotkey macht es einfacher:

#IfWinNotActive ahk_class PuTTY
!`::
Run, C:\alttab\switch.py,,Hide

(hier ist die Bindung in einem bestimmten Kittprogramm deaktiviert)

Teil 2. Wechseln Sie zu vi, indem Sie auf das entsprechende Symbol klicken


Zweitens habe ich das entsprechende Quickqrop Show Open VIs-Plugin fertiggestellt , um ihm ein göttliches Aussehen zu verleihen, und die Tastaturnavigation hinzugefügt.

Bild
Bild


Im Vergleich zu den vorhandenen Navigationswerkzeugen "Offene VIs anzeigen":
- Der Projekt-Explorer zeigt nur geöffnete Dateien und nicht alle Dateien im Projekt an. Außerdem nimmt er keinen unnötigen Speicherplatz in der Taskleiste und in der Alt-Tab-Liste ein (Abb. Links).
- besser als der eingebaute Fenstermanager in LV (Strg-Alt-W) durch das Vorhandensein von Symbolen (Abb. rechts);
- Besser als das System Alt-Tab, da es genau die vi-Symbole und nicht das multiple NI-Logo sind.

Durch Klicken mit der rechten Maustaste können Sie auswählen, wo Sie wechseln möchten: zum Bedienfeld oder zum Blockdiagramm.

Im Original sah dieses Plugin sehr roh und schlampig aus. Alles fiel aufeinander und wenn Sie die Fenstergröße auf eine Größe reduzieren, die mit einem normalen Alt-Tab-Fenster vergleichbar ist, funktioniert es im Allgemeinen nicht mehr.

Ich habe den Plugin-Code auf dem Github gepostet . Eingecheckt in LV 2011 und 2014, x32 und x64. Zur Installation müssen Sie mehrere Dateien in das „richtige“ Unterverzeichnis von Eigene Dateien kopieren. Ein Neustart von Labview ist nicht erforderlich. Hängt von der "OpenG File Library" ab. Details in Readme.

Die Tastatursteuerung hat dies getan: Strg-Leertaste Strg-4 zum Starten (damit es sicherlich keine Konflikte mit anderen Plugins gibt), Registerkarte [Strg-] oder der rechte Pfeil neben dem nächsten Element, [Strg-] Umschalttaste oder Pfeil nach links der vorherige Enter oder Space - Schalter, Esc - Exit.

Um dieses zusätzliche Strg-Leerzeichen (Drücken des Quickdrop-Menüs) nicht zu drücken, können Sie dieses Skript auf Autohotkey verwenden, damit es beispielsweise mit Strg-`gestartet wird:

#IfWinActive ahk_class LVDChild
^`b::
Send ^{Space}
WinWait Quick Drop
Send ^4

Die Zeitspanne zwischen dem Erscheinen des Quickdrop-Fensters und seinem Schließen nach Erhalt der Tastenkombination betrug etwa 0,12 Sekunden. Im Prinzip ist das nicht schlecht, aber das Auge schafft es, das "zusätzliche" Fenster zu sehen. Für diejenigen, die wie ich keinen Quickdrop verwenden, außer zum Ausführen von Plug-Ins, kann eine solche undokumentierte Option in labview.ini nützlich sein:

QuickDropTransparency=100

Es macht das QuickDrop-Fenster unsichtbar (der Parameter bedeutet 100%), während alle Funktionen erhalten bleiben.

Ich habe nicht darüber nachgedacht, wie diese beiden Verbesserungen kombiniert werden sollen (Anzeigen von vi-Symbolen und das übliche Verhalten von Alt-Tab) - alle LabView-Fenster befinden sich in derselben Gruppe von Fenstern und bewegen sich programmgesteuert innerhalb der Z-Reihenfolge auf dieselbe Weise wie über die GUI: nur als ein Ganzes, Das heißt, Informationen darüber, von welcher Art des Wechsels innerhalb von LabView oder außerhalb von LabView gewechselt wurde, gehen verloren. Sie können sich den Verlauf merken, wenn Sie die Alt-Tabulatortaste drücken. Diese Methode ist jedoch nicht universell, da sie das Umschalten mit der Maus nicht erfasst.

Zusammenfassend


Durch die Installation des beschriebenen Skripts und Plugins erhalten wir folgende Möglichkeiten: Das Drücken von Alt-`it ist sehr praktisch, um beispielsweise zwischen dem Browser und einem bestimmten Fenster in LabView zu wechseln, und durch Drücken von Strg-`können Sie die Symbole geöffneter vi-Dateien anzeigen und zwischen ihnen wechseln oder verwenden Maus oder Tastatur.

Jetzt auch beliebt: