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.

Montag, 30. August 2010

C# / .Net - Bildschirmschoner erstellen

Einführung

In diesem Artikel möchte ich erklären, wie man einfach mit C# einen eigenen Bildschirmschoner programmieren kann. Dazu werde ich in diesem Artikel die Grundlagen vermitteln. Aufbauend dazu habe ich noch eine Anleitung für einen "transparenten Bildschirmschoner". Ich habe das ganze mit Visual Studio von Microsoft programmiert.
Bei einem Bildschirmschoner wird eine Windows Form erstellt. Der Rahmen wird deaktiviert, so dass wir nur noch eine nackte Windows Form haben. Diese Form wird beim Laden des Bildschirmschoners an die Grösse des Bildschirmes angepasst.

Vorbereitung

Als erstes erstellen wir im Visual Studio eine neue "Windows Forms Application". Eine Form wird somit automatisch erstellt. Da wir für den Bildschirmschoner jedoch keinen Rand um das Fenster wollen deaktivieren wir diesen bei den Properties unter FormBorderStyle, indem wir hier den Wert None setzen. Danach wählen wir mit Color eine Hintergrundfarbe für unseren Bildschirmschoner. Alternativ lässt sich als Hintergrund auch ein Bild einbinden. Somit währen die Vorbereitungen bereits abgeschlossen.

Hauptprogramm

Main Methode erstellen

Als erstes erstellen wir die Main Methode. Von dieser aus wird nachher der Bildschirmschoner gestartet. Wenn man unter Windows einen Bildschirmschoner starten möchte, kann man 3 Optionen auswählen: Test, Configure, Install. Diese Optionen geben dann dem Bildschirmschoneraufruf einen der folgenden Werte mit: /c, /s oder /p.
Diese Werte wollen wir nun abfangen und dann die jeweils erwünschte Option starten. Dazu verwenden wir die folgende IF-Anweisung:
using System;
using System.Windows.Forms;

namespace ScreensaverHowTo
{
static class ScreenSaver
{
[STAThread]
static void Main(string[] args)
{
if (args.Length > 0)
{
if (args[0].ToLower().Trim().Substring(0,2) == "/c")
{
// Configurations-Dialog laden...
}
else if (args[0].ToLower() == "/s")
{
// Bildschirmschoner laden...
}
else if (args[0].ToLower() == "/p")
{
// Vorschau laden...
}
}
else
{
// Keine Argumente angegeben... Bildschirmschoner trotzdem starten...
// Dieser Fall tritt beispielsweise bei einem Doppelklick auf die .scr Datei auf.
}
}
}
}

Bildschirmschoner starten

Um den Bildschirmschoner zu starten rufen wir die folgende Methode auf:
System.Windows.Forms.Application.Run
Als Übergabeparameter geben wir dann den Namen unserer bereits erstellten Form an.
Das sollte dann in etwa so aussehen:
System.Windows.Forms.Application.Run(new ScreenSaverForm());
Da ich für diesen Bildschirmschoner keine Konfiguration zur Verfügung stellen will, gebe ich beim Argument "/c" folgende Meldung aus:
MessageBox.Show("Dieser Bildschirmschoner besitzt keine Optionen die sie sezten können.", "Screen Saver", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
In allen anderen Fällen möchte ich den Bildschirmschoner normal anzeigen lassen, daher habe ich den obigen Code etwas abgekürzt.
static void Main(string[] args)
{
if (args.Length > 0)
{
if (args[0].ToLower().Trim().Substring(0,2) == "/c")
{
MessageBox.Show("Dieser Bildschirmschoner besitzt keine Optionen die sie sezten können.", "Screen Saver", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
}
System.Windows.Forms.Application.Run(new ScreenSaverForm());
}

Bildschirmschoner an Bildschirmgrösse anpassen

Da der Bildschirmschoner wie weiter oben schon beschrieben nur eine einfache Windows Form ohne Rand ist, müssen wir diese Form nun noch auf die Grösse des Bildschirmes bringen. Wir machen das hier gerade richtig, so dass der Bildschirmschoner nachher auf beliebig vielen Bildschirmen läuft. Also auch wenn Sie auf zwei Monitoren arbeiten. So haben wir dann einen richtigen Multiscreen Bildschirmschoner.
Dazu müssen wir, wenn die Form geladen wird alle Koordinaten der Bildschirme zusammenzählen. Dies machen wir folgendermassen:
private void ScreenSaverForm_Load(object sender, System.EventArgs e)
{

int minY = 0;
int maxY = 0;
int minX = 0;
int maxX = 0;

foreach (Screen screen in Screen.AllScreens)
{
// Die Grösse aller Bildschirme bestimmen

if (screen.Bounds.Left < minX) minX = screen.Bounds.Left; if (screen.Bounds.Right > maxX)
maxX = screen.Bounds.Right;

if (screen.Bounds.Top < minY) minY = screen.Bounds.Top; if (screen.Bounds.Bottom > maxY)
maxY = screen.Bounds.Bottom;
}

Location = new Point(minX, minY);
Height = maxY - minY;
Width = maxX - minX;
Cursor.Hide();
TopMost = true;
}
Wir berechnen zuerst die X Koordinaten und danach die Y Koordinaten. Dies müssen wir für jeden Bildschirm durchführen. Die neuen Werte werden wenn sie grösser sind als schon ausgelesene Monitore übernommen. Haben wir diese Werte ermittelt, wird die Form entsprechend vergrössert.
Ausserdem wird der Mauszeiger ausgeblendet da wir diesen ja nun nicht mer benötigen.

Bildschirmschoner beenden

Um den Bildschirmschoner wieder zu beenden fangen wir folgende Events ab: Das Drücken einer Taste, das Bewegen der Maus sowie das Drücken einer Maustaste.
Dazu erstellt man folgende Events, die man mit der Form verknüpft:
Für die Tastatur fangen wir das drücken einer Taste ab. Wird irgendetwas an der Tastatur gemacht schliessen wir die geöffnete Form einfach, und beenden so den Bildschirmschoner.
private void ScreenSaverForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
Close();
}
Das selbe gilt auch für die Maus, ausser das hier auch noch Bewegungen der Maus abgefangen werden.
private void OnMouseEvent(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (!MouseXY.IsEmpty)
{
if (MouseXY != new Point(e.X, e.Y)) {
Close();
}
if (e.Clicks > 0)
{
Close();
}
}
MouseXY = new Point(e.X, e.Y);
}
Als erstes wird überprüft ob eine Änderung an der Maus vorgekommen ist, ist dies der Fall schauen wir ob die Maus bewegt wurde oder ob eine Taste gedrückt wurde. In beiden Fällen schliessen wir die Form so dass der Bildschirmschoner beendet wird.
In der Variablen MouseXY ist die Position des Mauszeigers zur Zeit des Funktionsaufrufes definiert. Verändert sich diese Position schliessen wir den Bildschirmschoner.
Bemerkung: Nicht vergessen die Variable MouseXY zu definieren.
private Point MouseXY;

Bildschirmschoner erstellen.

Ein Bildschirmschoner besteht eigentlich aus einer ganz normalen Exe Datei. Diese Datei muss nur noch umbenennt werden, so dass sie nachher .scr als Endung hat. Somit erkennt das Betriebssystem, dass es sich um einen Bildschirmschoner handelt.

Fazit

Somit haben wir nun einen Bildschirmschoner erstellt, der den Bildschirm mit einer beliebigen Farbe überzieht. Es ist ebenfalls möglich anstatt einer Farbe ein Bild zu verwenden. Wenn sie wissen wollen, wie man einen transparenten Bildschirmschoner erstellt oder wie man den Computer sperren kann, dann lesen Sie den Artikel Transparenter Bildschirmschoner erstellen
Wollen sie noch etwas Abwechslung in den Bildschirmschoner bringen dann lesen Sie unter Geekpedia weiter.

Donnerstag, 5. August 2010

My first post

Willkommen auf meinem Blogg!
Ich freue mich sehr, dass sie den Weg hierher gefunden haben.
Das Ziel diese Bloggs ist es, Wissen welches ich erarbeitet habe weiterzugeben und anderen verfügbar zu machen. Hier werden Sie diverse Anleitungen finden, rund um Computer und Programmieren. Ich freue mich über jeden Kommentar und jede Anregung :-)