BgInfo Enhancer

 

BgInfoEnhancer ist eine Erweiterung zu BgInfo , das von Bryce Cogswell  (ehemals Sysinternals) geschrieben wurde. Es ist in der Lage verschieden Systemparameter auf den Desktophintergrund  zu schreiben. Mit dieser Erweiterung kann man beliebige Registrywerte auslesen, auswerten und mit zur Anzeige bringen.

Manchmal möchte man zu der vorhandenen Auswahl an Parametern aber auch noch gerne andere Dinge des Systems dynamisch mit auf den Desktop schreiben. Mir war z.B. während einer Umstellungsphase wichtig zu wissen, ob ein Server eine physikalische Maschine ist oder schon zu einem virtuellen Server migriert wurde.

Da sich die meisten Informationen zu einem System in der Registry befinden, habe ich eine Erweiterung zu BgInfo geschrieben, mit der sich beliebige Registry Schlüssel auslesen und in das Anzeigetemplate einblenden lassen.

Die auszulesenden Schlüssel und deren entsprechenden Platzhalter werden einfach in einer INI-Datei festgelegt. Dann startet man die BgInfoEnhancer.exe, die die Systeminformationen beschafft, an die Stelle der Platzhalter in die BgInfoEnhancer.bgi schreibt und als BgInfo.bgi abspeichert. Anschließend startet BgInfoEnhancer.exe die original BgInfo.exe mit den übergebenen Parametern und einem Verweis auf die BgInfo.bgi. Die Angabe des Konfigurationsfiles (z.B. BgInfo.bgi) ist aber nicht erlaubt – es wird immer die erzeugte BgInfo.bgi übergeben.

Der Aufruf über eine Batchdatei könnte so aussehen:

@echo off
start BGinfoEnhancer.exe /timer:0 /NOLICPROMPT
exit

BgInfoEnhancer wird dann die BgInfo.bgi erzeugen und den Befehl BgInfo.exe BgInfo.bgi /timer:0 /NOLICPROMPT ausführen.

Um nun einen Systemwert hinzuzufügen, der nicht durch BgInfo.exe verfügbar ist, öffnet man BgInfoEnhancer.bgi (mit Hilfe der BgInfo.exe) und fügt einen neuen <Platzhalter> hinzu, der von „<“ und „>“ begrenzt werden muss.

Nun erzeugt man mit dem Notepad die BgInfoEnhancer.ini, die z.B. folgendes enthalten könnte:

#[Virtual Machine]
#Type = Insert
#Path = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters
#Value = PhysicalHostName
[Virtual Machine]
Type = Replace
Path = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters
Value = PhysicalHostName
True = \w
TrueValue = Virtual Host: %Value%
FalseValue = Physical machine

Dabei gilt folgendes:

  • Zeilen, die mit # beginnen werden ignoriert.
  • Der Sektions-Name „[Virtual Machine]“ entspricht dem Platzhalter <Virtual Machine> (Groß-/Kleinschreibung beachten).
  • Ist der „Typ = Insert“, wird der Registrywert gelesen und ersetzt den Platzhalter. Das ist eine recht einfache Methode.
  • Ist der „Typ = Replace“, wird ebenfalls der Registrywert gelesen, dann aber gegen den regulären Ausdruck, der mit „True =“ definiert wird, getestet. Fällt der Test positiv aus, ersetzt der String hinter „TrueValue =“ den Platzhalter – ansonsten der String hinter „FalseValue“, dabei kann man mir „%Value%“ auf den gelesenen Wert zugreifen. Zwischen „Virtual Host:“ und „%Value%“ steht hier ein [Tab]. Damit lässt sich also auch gut formatieren.

Für die gezeigte INI-Datei heißt das: Wird der Prozess auf einem virtuellen Server mit Namen VSERVER01 gestartet, der auf der Hostmaschine VHOST01 läuft (der Registryeintrag liefert einen gültigen Wert), wird die 1. Zeile der Desktopinformation „Virtuel Host:       VHOST01“ stehen.
Der Name des Servers (VSERVER01) würde in der 2. Zeile durch die  original BgInfo.exe angezeigt werden (Platzhalter <Host Name>).
Wird der Prozesss auf einem normalen PC gestartet, wird in der 1. Zeile „Physical machine“ stehen (der Registryeintrag war nicht vorhanden und lieferte keinen Wert, der zu \w gehört).

Hier noch ein Beispiel, bei dem eine Zeile nur dann auftaucht, wenn eine Bedingung erfült wird. Dabei wird die Zeile mit dem Namen und dem Port des aktiven Proxyservers nur dann angezeigt, wenn er aktiv ist.

BgInfoEnhancer.bgi:

BgInfoEnhancer.ini:

[Proxy]
Path = HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
Type = Replace
Value = ProxyEnable
True = [1]
TrueValue = Proxy [TAB] <ProxyName> 
FalseValue =
[ProxyName]
Type = Replace
Path = HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
Value = ProxyServer
True = .+
TrueValue = %Value%
FalseValue =

In der INI-Datei wird die Erklärung "Proxy" nur angezeigt, wenn der Proxy eingeschaltet ist. Außerdem wird dabei noch der neue Platzhalter <ProxyName> eingesetzt, der danach ausgewertet wird.

Man muss beachten, dass die INI-Datei von oben nach unten ausgewertet wird und die [Proxy] Sektion hier vor der [ProxyName] Sektion stehen muss, weil ansonsten der <ProxyName> Platzhalter im Template noch nicht existiert.

Weitere interessante Informationen über das System kann man unter Anderem an diesen Stellen finden:

Enviromentvariablen der Maschine:
Path = HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Value = NUMBER_OF_PROCESSORS
Value = PROCESSOR_ARCHITECTURE
Value = PROCESSOR_IDENTIFIER

Enviromentvariablen des Users:
Path = HKEY_CURRENT_USER\Volatile Environment
Value = LOGONSERVER
Value = HOMESHARE
Value = USERDNSDOMAIN

Prozessorinformation:
Path = HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
Value = ProcessorNameString

Biosinformation:
Path = HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
Value = SystemBiosDate
Value = SystemBiosVersion

Betriebssystemversion:
Path = HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Value = CSDVersion
Value = CurrentBuildNumber
Value = CurrentVersion

Bei der Gestaltung der ausgelesenen Werte kann man durchaus sehr kreativ werden. Da die Darstellungsinformationen auf einem RTF-Dokument beruhen, das in die BgInfoEnhancer.bgi integriert ist, lohnt sich ein Blick auf diese Datei mit dem Notepad oder besser Notepad++. Dort findet man in ASCII nach dem Header den Start der RTF-Information:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Arial;}{\f1\fnil\fcharset0 MS Shell Dlg;}}
{\colortbl ;\red255\green255\blue255;\red0\green255\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\cf1\b\fs20 <Virtual Machine>\cf2  \b0\fs26\u9608?\cf3\u9632?\cf0\f1\fs17\par
\par

Zu Anfang findet man die Definition der verwendeten Codepage und des Fonts. Dann eine Liste der Farben, die im Text mit \cfx eingeschaltet werden. \cf1 wäre hier z.B. weiß und \cf2 grün. Das Zeichen \u9608? ist in Arial ein großer Block, \u9632? ein kleiner Block. Damit lassen sich also so etwas ähnliches wie LEDs anlegen. Das \par ist ein Zeilenumbruch. Somit lassen sich auch ganz neue Zeilen einblenden.


Regüläre Ausdrücke sind nicht einfach aber sehr mächtig. Für den Einsteiger sind hier ein paar Wichtige / Einfache aufgezählt:

  • .    entspricht dem gängigen ? unter Windows (ein beliebiges Zeichen)
  • .*  entspricht dem gängigen * unter Windows (kann aber auch eine Leere Zeichenkette sein)
  • .+  entspricht dem gängigen * unter Windows (es muss aber mindestens 1 Zeichen vorhanden sein)
  • \w  entspricht allen Wörtern, die  a-z, A-Z, 0-9 oder Unterstrich (_) enthalten (z.B. Servernamen aber keine E-Mail Adressen).
  • |     ist eine OR Verknüpfung
  • Achtung! Schlechte reguläre Ausdrücke können unendliche Schleifen erzeugen, die die CPU zu 100% auslasten oder sogar schädigen können!Das für den BgInfoEnhancer benötigte Programm BgInfo ist nicht im Programmpaket enthalten, kann aber z.B. hier heruntergeladen werden: http://technet.microsoft.com/de-de/sysinternals/bb897557.aspx
    Die BgInfo.exe muss dann im gleichen Verzeichnis wie BgInfoEnhancer.exe liegen.Da der BgInfoEnhancer mit AutoIt 3 geschrieben wurde, gebe ich hier noch einen Link zu der entsprechenden Hilfe, damit eine komplette Übersicht für die regulären Ausdrücke vorhanden ist: RexExpressions in AutoIt 3     


Changelog:

20.04.2010 Version 1.0.0.45

  • Es gibt nun den Kommandozeilenparameter /l:xx . Damit kann man das Programm in einer Schleife mit xx Sekunden laufen lassen. BGinfoEnhancer.exe /l:60 /timer:0 /NOLICPROMPT wird den Desktophintergrund alle 60 Sekunden aktualisieren.

15.04.2010 Version 1.0.0.40

  • Erste Version.


     Wer noch Ideen für Interessante Anzeigen hat, kann sie hier gerne als Kommentar zum Besten geben ...
AnhangGröße
BgInfoEnhancer1.0.0.40.zip394.46 KB
BgInfoEnhancer1.0.0.45.zip465.7 KB

Kommentare

Teilweise in BGinfo integriert

Wie ich jetzt feststellen musste, kann man im originalen BGinfo auch Registrywerte zur Anzeige bringen (über den Button "Custom...). Wem das genügt, kommt auch ohne meine Erweiterung aus.

Hätte ich das früher gewusst, hätte ich mir das vielleicht gespart ... :-)

Der Typ = Insert ist damit überflüssig.