Suche:

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.

Keine Kommentare:

Kommentar veröffentlichen