Ich habe ein weiteres neues Tool zu meiner Tiny Tools Collection hinzugefügt: ToggleDisplay

Code: https://github.com/sgrottel/tiny-tools-collection/tree/main/ToggleDisplay
Ausführbare Datei: https://github.com/sgrottel/tiny-tools-collection/releases/tag/ToggleDisplay-v1.0

Damit könnt Ihr Displays aktivieren, deaktivieren und umschalten.

Warum das? Mein Computer ist an 2-3 Bildschirme angeschlossen. Zwei Computermonitore auf meinem Schreibtisch für die Arbeit. Und ein Fernseher auf der anderen Seite des Raumes, z.B. um Spiele von meinem Computer aus zu spielen oder um Videodateien in Ruhe anzusehen.

Oft genug fahre ich den Computer hoch, und dann verschwindet meine Maus vom Desktop, weil ich vergessen habe, dass der Fernseher vorher „an“ war, und die Maus hat sich über die Desktop-Monitore hinaus bewegt. Das ist ärgerlich. Die eingebaute Funktion „Windows-Taste + P“ ist verständlicherweise auf zwei Monitore beschränkt. Also musste ich immer „Windows + P“ drücken, dann „Weitere Einstellungen“, warten, bis der Dialog erscheint, herumfummeln, auf „Übernehmen“ drücken, … Ihr versteht, was ich meine.

Also habe ich im Internet recherchiert, wie man eine Anzeige programmgesteuert aktivieren oder deaktivieren kann. Und es gibt mehrere kostenlose Tools, mit denen das möglich ist. Ich habe zwei ausprobiert, und beide haben nicht funktioniert. Dann gibt es einen Hack, bei dem eine ausführbare Datei von Windows 10 unter Windows 11 verwendet wird. Ja, nein. Also gut. Suchen Sie weiter!

Es stellt sich heraus, dass es eine einfache API dafür gibt: ChangeDisplaySettingsEx. Nach einigen Experimenten konnte ich die Anzeige deaktivieren, aber nicht (wieder) aktivieren. Nicht gut genug. Weiter suchen!

Kurz später stellt sich heraus, dass es eine zweite API gibt, die nicht so einfach ist und für die es so gut wie keine brauchbare Dokumentation gibt: SetDisplayConfig. Dies scheint die API zu sein, die der in Windows eingebaute Dialog zur Anzeigekonfiguration verwendet. Aber … wie. Ich fand Code von „PuFF1k“ auf StackOverflow (https://stackoverflow.com/a/62038912/552373), der die API-Aufrufe des Windows-Dialogs zurückentwickelt hat. Ich habe seinen Code ausprobiert, und es funktioniert. Toll! Vielen Dank, PuFF1k!

Im Kern ist der Tricks, keine modeInfo-Daten an SetDisplayConfig zu übergeben, und alle sourceInfo.modeInfoIdx und targetInfo.modeInfoIdx aller Paths auf DISPLAYCONFIG_PATH_MODE_IDX_INVALID zu setzen.

Ein paar Überarbeitungen und Aufräumarbeiten später habe ich ToggleDisplay, bereit, mit der Welt geteilt zu werden.

Übrigens habe ich jetzt auch den Quellcode einiger meiner älteren Tools in dieses Tiny Tools Collection Repository aufgenommen:

Bei dieser Gelegenheit habe ich auch diese Projekte auf die neuesten DotNet-Laufzeiten aktualisiert. Eine automatisierte Build-Pipeline oder Releases habe ich nicht aufgesetzt. Vielleicht ein anderes Mal.

Redate ist ein weiteres Werkzeug in meinem wachsenden Werkzeugkasten. Die Idee ist einfach: Viele Programme erzeugen Dateien, schreiben Dateien, aktualisieren Dateien, mit genau demselben Inhalt wie zuvor. Das Datum des letzten Schreibzugriffs der Datei wird natürlich verändert. Der Inhalt bleibt derselbe. Andere Tools wiederum verwenden das Schreibdatum als Hinweis darauf, ob die Dateien geändert wurden. Was ja auch Sinn macht, oder?

Dieses kleine Werkzeug, „Redate“, speichert die MD5-Hashes der Dateien ab, zusammen mit ihrem ursprünglichen Schreibdaten. Wenn das Werkzeug dann erneut auf dieser Liste von Dateien ausgeführt wird, stellt es das ursprüngliche Schreibdatum für alle Dateien mit unveränderten MD5-Werten wieder her. Und das ist es.

Ich verwende es zum Beispiel für Vue.js-Projekte, um die Schreibdaten der Dateien in den dist-Ordnern beizubehalten. Dann kann ein einfacher FTP-Sync nur die geänderten Dateien für das endgültige Deployment übertragen. Dies hilft bei Projekten mit vielen Assets-Dateien die sich nicht verändern.

Ihr könnt Quellcode und Binär-Releases von Github herunterladen.

Einfache Computergraphik-Demos entwickeln wir gerne als Konsolenanwendungen. Das Konsolenfenster ist einfach praktisch für Debug-Ausgaben. Wenn wir die Programme dann aber auf unserer Stereo-Powerwall zeigen, dann stört das kurz aufblitzende Konsolenfenster massiv. Darum habe ich mal kurz ein kleines Tool zusammengesteckt, dass Konsolenanwendungen startet, die Konsole nicht anzeigt, ihren Inhalt aber abgreift, damit man im Notfall nachsehen kann warum es mal wieder nicht funktioniert.

Ich präsentiere die HiddenConsole:

HiddenConsole.zipHiddenConsole.zip Application starter hiding the console window
[55.3 KB; MD5: 848cbd8aa901fe38be8179d65b6d2162; Mehr Info]

Und weil ich es kann, der Quelltext ist frei verfügbar:

https://bitbucket.org/sgrottel-uni/hiddenconsole

NuGet ist ein praktisches Paket-System für Visual Studio. Ursprünglich für Dotnet-Bibliotheken gedacht, wurde es vor einiger Zeit erweitert um auch native C++-Projekte zu unterstützen. Das Problem an der ganzen Sache ist ganz einfach: die Paketen müssen aber noch geschnürt werden. Es gibt einige, jedoch bei weitern nicht alles was man (ich) so für die tägliche Arbeit braucht. Im Besondern sind die meisten Pakete auch noch nicht mit Visual Studio 2013 kompatible. Und Visual Studio 2015 ist ja schon in den Startlöchern.

Also gibt es nur eins was ich tun kann: mit machen! Ok, ich könnte auch einfach nur vor mich hin nörgeln, aber diese Option klammere ich mal aus. Also, hier ist es, mein erstes NuGet-Paket:

die AntTweakBar v1.16

(mit freundlicher Unterstützung des Autors)

Und dieses Paket wird nicht mein letztes bleiben.

Heute gibt es mal wieder ein kleines Tool von mir: die ShutdownPlannerGUI

ShutdownPlannerGUI.zipShutdownPlannerGUI.zip Simple GUI for planned Shutdowns of MS Windows
[188 KB; MD5: 45cb64eef13ea47e98a7dcde0773e6f1; Mehr Info]

Die Grundidee ist ganz einfach: es ist eine kleine in C# geschriebene GUI um den Kommandozeilenbefehl Shutdown. Es geht vor allem um die Zeitangabe, wann das System heruntergefahren werden soll. Die GUI bietet mehrere Textfelder um die Zeit bequem in Stunden, Minuten und Sekunden einzugeben. Das ist alles.

Die ESF-geförderte Nachwuchsforschergruppe VICCI beschäftigte sich von 2012 bis Ende 2014 an der Fakultät Informatik der Technischen Universität Dresden mit der Entwicklung, Steuerung und Integration von cyber-physikalischen Systemen (CPS). Der Anwendungsbereich umfasst Smart Home-Umgebungen und die Unterstützung von Menschen im Ambient Assisted Living.

Mein Arbeitspaket für Visualisierung und visuelle Analyse hatte im Rahmen des Projekts drei wesentliche Aspekte untersucht und entsprechende Lösungen erarbeitet:

  • die visuelle Analyse komplexer, multi-dimensionaler, multimodaler,  dynamischer Raumzeit-Daten,
  • die Visualisierung in heterogener, mobiler und verteilter IT-Infrastruktur und
  • die Realisierung von Visualisierungssystemen und -Komponenten.

Heute schreibe ich über die visuelle Analyse komplexer Raumzeit-Daten.

teaser

Die visuelle Analyse dient der administrativen Übersicht über eines laufenden CPS aus Gründen der Sicherheit, als Hilfestellung während Entwicklung und des Betrieb des Systems. Im Besonderen sind außergewöhnliches (Fehl-)Verhalten und das Entstehen von emergenten Systemeigenschaften hierbei von Bedeutung. Da hierfür eine visuelle Exploration notwendig ist, dürfen nur minimal wenige vorherige Annahmen getroffen und einschränkende Darstellungsmetaphern genutzt werden. Beispielsweise, können bestimmte Daten, wie auf die Gelenke eines Roboterarms wirkenden Kräfte, effektiver Visualisiert werden, wenn diese im geometrischen Kontext dargestellt werden. Diese Annahme jedoch verringert die Allgemeingültigkeit der Visualisierung.

Ausgehend von einer entsprechenden Anforderungsanalyse wurde daher eine grundlegende Visualisierung erarbeitet, welche koordinierten Ansichten, zeit-kontinuierlichen Scatterplot-Matrizen, zeit-kontinuierlichen parallelen-Koordinaten-Plots und zeitliche Heatmaps nutzt um die im CPS erhobenen Daten direkt darstellt. Diese Anwendung ist in der Lage generische multidimensionale Daten in Echtzeit interaktiv darzustellen und bietet somit eine hervorragende Möglichkeit für erste visuelle Analyseschritte. Das erarbeitete System wurde in der Fachzeitschrift Computer Graphics Forum, dem führenden europäischen Visualisierungsjournal, veröffentlicht. Im Rahmen der Evaluierung wurden die Daten des CPS live dargestellt und in Diskussion mit dem Publikum diskutiert. Das CPS wurde durch die weiteren direkt vor Ort und in entfernten Laboren betriebenen Demonstratoren und Sensoren gebildet.

  • [DOI] S. Grottel, J. Heinrich, D. Weiskopf, and S. Gumhold, „Visual Analysis of Trajectories in Multi-Dimensional State Spaces,“ Computer Graphics Forum, vol. 33, iss. 6, pp. 310-321, 2014.
    [Bibtex]
    @article {Grottel2014HDTraj,
      author = {Grottel, Sebastian and Heinrich, Julian and Weiskopf, Daniel and Gumhold, Stefan},
      title = {{Visual Analysis of Trajectories in Multi-Dimensional State Spaces}},
      year = {2014},
      journal = {Computer Graphics Forum},
    volume = {33},
    number = {6},
    pages = {310--321},
      doi = {10.1111/cgf.12352}
    }

DOI: 10.1111/cgf.12352

Diese Visualisierung wurde als Plugin für das Visualisierungssystem MegaMol realisiert. Der Quellcode dieses Plugins kann frei hier heruntergeladen und entsprechend der beigelegten Lizenz verwendet werden:

hdtraj.mmplugin.ziphdtraj.mmplugin.zip Multi-Dimensional Trajectory Visualization MegaMol Plugin
[99.7 KB; MD5: 0a6eaf465318b0f256ecfdf8a8b4ad50; Mehr Info]

Um das MegaMol-System und das Plugin zu kompilieren, nutzen Sie die entsprechenden Anleitungen auf der MegaMol-Webseite.

Es wird mal wieder Zeit für ein kleines Software-Tool das die Welt nicht braucht (ich aber schon). Die Idee ist ganz einfach: Serien von Dateien, z.B. Musikdateien eines Hörbuchs oder Videodateien einer Serie, in einem Verzeichnis. Immer wieder schaut/hört man eine Datei an und fragt sich dann beim nächsten Mal wieder, wo war ich eigentlich. Mein kleines Tool registriert sich im Kontextmenu des Windows Explorers und erlaubt so ganz einfach in einem Verzeichnis ein Lesezeichen zu setzen. Das Lesezeichen ist schlicht eine leere Datei mit dem gleichen Namen wie die markierte Datei (zusätzlich der extra Dateinamenerweiterung). Das ganze ist keine Shell-Extension, sondern nur eine ganz normal DotNet-Anwendung die sich an den richtigen Stellen in die Registry einträgt. Einfach, sicherlich nicht sonderlich elegant, erfüllt aber seinen Zweck.

FileBookmark.zipFileBookmark.zip File Bookmark Utility
[91.2 KB; MD5: bd58a615775c9897ae82536bb678b05b; Mehr Info]

Und, weil ich es kann, gibt es außerdem auch den dazugehörigen Quellcode:

FileBookmark_src.zipFileBookmark_src.zip File Bookmark Utility Source Code
[60.2 KB; MD5: 84071f778ccb81b0c39101577a3fa204; Mehr Info]

Software sollte dazu dienen Probleme zu lösen. Manchmal ist das auch so.

Ich hatte ein Problem:

Ich habe ein etwas älteres Convertible Laptop, ein ASUS Aspire 1820PT. Seinerzeit ein gutes, günstiges Convertible mit Touch-Screen-Unterstützung für zwei Finger und einer akzeptablen Rechenleistung. Inzwischen hab ich das gute Stück mit einer SSD verfeinert und betreibe es mit Windows 8. Soweit so gut. Das Problem, jedoch, ist, dass der Lagesensor von Windows 8 nicht mehr unterstützt wird. :-(

Also musste eine Lösung her: Treiber-Hacking oder am Ende noch einen Treiber selber schreiben ist nicht meins. Ich bin Anwendungsprogrammierer. Wenn etwas automatisch nicht (mehr) funktioniert, dann muss man eben die manuelle Bedienung so komfortable wie möglich machen. Daher habe ich mir ein kleines Tool geschrieben: den DisplayRotator.

DisplayRotatorScreenDie Idee ist ganz einfach: Das Tool wird in der TaskBar angeheftet und zeigt sobald es gestartet wird ein Fenster mit den vier möglichen Displayausrichtungen an. Drück man auf den entsprechenden Button, so wird das Display entsprechend eingestellt. Damit kann ich den Desktop auf meinem Convertible mit zwei Clicks, bzw. besser mit zweimaligem Finger-Tippen wieder so hin drehen wie ich es brauche.

DisplayRotator.zipDisplayRotator.zip Display Rotation Tool
[152 KB; MD5: 07c3efddd05a98bf4d02db595b87f2fe; Mehr Info]

Und, weil ich es kann ist auch der Quelltext des Tools offen. Es ist in C# geschrieben und benutzt logischerweise die Windows API zum Ändern der Displayeinstellungen. Eigentlich alles ganz einfach. Auf der gleichen Code-Basis lassen sich auch Bildschrimauflösungen und Wiederholfrequenzen einstellen, und es ist sogar möglich Monitore vom Desktop zu trennen, bzw. zu verbinden. Ok, der Code für die ganzen Funktionen ist nicht drin, aber die API-Aufrufe sind die gleichen.

Vielleicht kann das Tool ja auch noch für jemand außer mir nützlich sein.