Suche:

Dienstag, 31. August 2010

Transparenter Bildschirmschoner erstellen

Einleitung

Dieses HowTo baut auf dem Artikel "C# / .Net - Bildschirmschoner erstellen" auf.

Anwendungs - Szenario

Wieso einen Transparenten Bildschirmschoner erstellen? Ein mögliches Anwendungs - Szenario für einen Transparenten Bildschirmschoner könnte folgendermassen aussehen:
Sie möchten eine hohe Sicherheit am Arbeitsplatz bieten. Niemand soll etwas an ihrem Computer machen können wenn sie länger abwesend sind. Gleichzeitig wollen Sie jedoch jeder Zeit sehen was auf Ihrem Computer gerade läuft. Nun können sie einfach den Transparenten Bildschirmschoner aktivieren und eine Zeitspanne eingeben, nach der der Bildschirmschoner aktiviert wird. Eventuelle Messdaten oder sonstige Aktivitäten wie Videos laufen immer sichtbar weiter. Sobald jedoch jemand etwas machen will am Computer wird dieser gesperrt und eine Passwortabfrage eingeleitet

Dies kann sehr nützlich sein im Business Umfeld. In der Produktion ist es häufig so, dass der User nicht selbst am Computer ist, aber den Computer trotzdem braucht, weil darauf Messdaten laufen.

Vorbereitung

Dieses HowTo baut auf dem Artikel "C# / .Net - Bildschirmschoner erstellen" auf.

Transparenz in .Net / C#

Nachdem wir den Grundbildschirmschoner programmiert haben, fügen wir nun Transparenz hinzu. Bei .Net gibt es mehrere Arten von Transparenz. Wobei nur eine Variante so funktioniert wie wir das wollen.
Opacity Value = 40%
Die einzige funktionierende Variante ist es, bei den Properties der erstellten Form den Wert Opacity auf einen kleineren Wert als 100% zu stellen.
Das sieht im Code dann folgendermassen aus:
this.Opacity = 0.2;


Die folgenden Möglichkeiten funktionieren nicht, da Sie zwar eine Transparenz erzeugen, die aber auch für User Interaktionen gilt. Das heisst, wenn man danach etwas anklickt wird der Event an das dahinter liegende Fenster weitergereicht.
  1. Bei den Properties der erstellten Form, den TransparencyKey auf die Hintergrundfarbe der Form zu wechseln.
  2. Eine weitere Möglichkeit ist es den
    this.BackColor
    Wert auf
    this.BackColor = System.Drawing.Color.Transparent;
    zu setzen. Dazu muss man Transparenz mit folgendem Code noch erlauben:
    this.SetStyle(ControlStyles.SupportsTransparentBackColor, True);
  3. Des weiteren kann man die Transparenz auch mit dem Alpha-Kanal setzen:
    this.BackColor = System.Drawing.Color.FromArgb(100, 255, 255, 255);

Bildschirm sperren

Unter Windows kann man den Bildschirm sperren lassen, sobald der Bildschirmschoner beendet wird. Diese Einstellung kann man direkt im Bildschirmschoner Menu aktivieren. Das Problem dabei ist jedoch, dass bei dieser Variante der ganze Explorer ausgeblendet wird.
Um dies zu umgehen sperre ich den Computer direkt aus dem Bildschirmschoner heraus.
Als erstes muss die benötigte Funktion aus dem Windows System verfügbar gemacht werden. Dies geht folgendermassen:
class Win32
{
[DllImport("user32.dll")]
public static extern bool LockWorkStation();
}
Man importiert einfach die user32.dll aus dem Win32 System Ordner.
Danach kann man diese Funktion aus dem Code heraus verwenden. Um dies zu realisieren habe ich folgende Methode erstellt:
private void lockStation()
{
Win32.LockWorkStation();
Close();
}
Als erstes wird die Workstation gesperrt, danach wird der Bildschirmschoner beendet. Diese Funktion ruft man nun anstatt Close() bei allen User-Events auf.

Bildschirmschoner erstellen

Nun müssen wir nur noch aus der .exe Datei eine .scr Datei erstellen.

2 Kommentare:

  1. warum postet nicht einer ne solche datei als scr hier?

    AntwortenLöschen
  2. Das funktioniert so einfach nicht, und hier ist der Grund dafür:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms682573(v=vs.85).aspx

    Wurde das Projekt jemals auf seine Funktion getestet?

    AntwortenLöschen