Freitag, 28. September 2012

Passwort Generator

Heute möchte ich einen in C# geschriebenen "Passwort Generator" vorstellen. Der Name ist vielleicht etwas irreführend, es geht darum, dass das Programm alle möglichen Passwörter einer bestimmten Länge erzeugt und speichert, sodass diese zum Beispiel für einen Brute-Force-Angriff genutzt werden können.

Der Generator ist in einer Klasse gekapselt, beim Anlegen einer Instanz davon wird ein neuer Thread gestartet, welcher die Passwörter generiert und in eine Queue (Warteschlange) schreibt. Diese kann dann von außen abgefragt werden, sodass die Erzeugung der Passwörter und ein eventuelles Benutzen der Passwörter getrennt voneinander bzw. parallel geschehen kann.
Das Erzeugen der Passwörter geschieht in der Funktion FillQueue(). Hier zählt eine Schleife von der übergebenen minimalen bis maximalen Länge des Passworts durch und nach dem Prinzip der Rekursion wird für jede dieser Stellen die Funktion SetLetter() aufgerufen.
Diese durchläuft alle möglichen Zeichen (in meinem Programm kann eingestellt werden, dass die Zeichen A-Z, a-z sowie 0-9 benutzt werden), stellt die aktuelle Position auf das aktuelle Zeichen ein und ruft die Funktion mit der nächsten Stelle auf. Ist die letzte Stelle erreicht, wird das aktuelle Passwort in die Queue geschrieben.
Über die öffentliche Funktion Dequeue() der Klasse wird das unterste Element aus der Warteschlange entfernt und zurückgegeben, auf diese Weise können die erzeugten Passwörter abgerufen werden.

Der Code:
public class PasswordGenerator
    {
        Queue<string> Results; // Warteschlange mit erzeugten Passwörtern

        bool UpperAZ; // true wenn Großbuchstaben benutzt werden sollen
        bool LowerAZ; // true wenn Kleinbuchstaben benutzt werden sollen
        bool Numbers; // true wenn Zahlen benutzt werden sollen

        int Min; // minimale Länge des Passworts
        int Max; // maximale Länge des Passworts

        const int MaxQueueSize = 30000000; // maximale Zahl von Passwörtern, die gleichzeitig in der Queue gespeichert werden dürfen (Schutz vor Speicherüberlauf)

        public PasswordGenerator(bool upperAZ, bool lowerAZ, bool numbers, int min, int max)
        {
            UpperAZ = upperAZ;
            LowerAZ = lowerAZ;
            Numbers = numbers;

            Min = min;
            Max = max;
            Results = new Queue<string>();

            // neuen Thread zur Passwortgenerierung erstellen und starten
            Thread Creator = new Thread(new ThreadStart(FillQueue));
            Creator.Start();
        }

        private void FillQueue()
        {
            // Warteschlange füllen
            for (int i = Min; i <= Max; i++)
            {
                SetLetter(i, 0, "");
            }
        }

        private void SetLetter(int length, int pos, string temp)
        {
            // aktuelle Position mit allen möglichen Zeichen füllen
            if (UpperAZ)
            {
                for (int i = 65; i <= 90; i++)
                {
                    NextStep(length, pos, temp + (char)i);
                }
            }
            if (LowerAZ)
            {
                for (int i = 97; i <= 122; i++)
                {
                    NextStep(length, pos, temp + (char)i);
                }
            }
            if (Numbers)
            {
                for (int i = 0; i <= 9; i++)
                {
                    NextStep(length, pos, temp + i.ToString());
                }
            }
        }

        private void NextStep(int length, int pos, string temp)
        {
           // Funktion zum Abschließen eines Schrittes

           // ist die Warteschlange "voll", wird der Thread pausiert
           while (Results.Count > MaxQueueSize)
               Thread.Sleep(500);

            // ist noch nicht die Endposition im Passwort erreicht, wird SetLetters() mit der nächsten Position aufgerufen
            if (pos < length - 1)
                SetLetter(length, pos + 1, temp);
            else
                // ansonsten wird das aktuelle Passwort der Warteschlange hinzugefügt
                Results.Enqueue(temp);
        }

        public string Dequeue()
        {
            // liefert das unterste Element der Warteschlange
            if (Results.Count > 0)
                return Results.Dequeue();
            else
                return "";
        }
    }
Die Initialisierung des Generators erfolgt dann über
PasswordGenerator Generator = new PasswordGenerator(true, true, true, 1, 4);
Das Abfragen eines Passwortes über
Generator.Dequeue();

Dienstag, 25. September 2012

Passwort eines Word Dokuments automatisiert überprüfen

Nachdem ich im vorigen Post Grundlegendes zur Einbindung von Microsoft Office Word erklärt habe, möchte ich heute nochmal speziellen Augenmerk auf das Öffnen von passwortgeschützten Dokumenten legen.
Mit folgendem Code lässt sich überprüfen, ob ein Passwort das richtige zum Öffnen des Dokumentes ist.
Durch Iteration kann so beispielsweise auch automatisiert nach einem Passwort gesucht werden.
            Object oMissing = System.Reflection.Missing.Value;

            Word.Application WordApp = new Word.Application();

            try
            {
                Word.Document ExistingDocument = WordApp.Documents.Open("Dateiname", oMissing, false, oMissing, "Passwort");
                MessageBox.Show("Richtiges Passwort");
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                MessageBox.Show("Falsches Passwort");
            }

Freitag, 21. September 2012

Word Tutorial

In diesem Post möchte ich zeigen, wie man C# und Microsoft Office Word verbindet. Ich werde zeigen, wie man mit C# neue Word Dokumente erstellt, Texte einfügt, Einstellungen vornimmt, Dokumente öffnet, speichert und anzeigt.
Zuerst müssen wir die entsprechende Komponente in unser Projekt einbinden, dies geschieht über Projekt - Verweis hinzufügen - COM - Microsoft Word xx Object Library. xx steht hierbei für die jeweilige Versionsnummer.
Dann benutzen wir den Code using Word = Microsoft.Office.Interop.Word, um auf das Word Objekt über das Wort Word zugreifen zu können.

Word Instanz erstellen und anzeigen:
Word.Application WordApp = new Word.Application();
WordApp.Visible = true;
Hiermit wird eine neue Instanz eines Word Objektes angelegt. Durch Aktivieren der Sichtbarkeit, wird dieses angezeigt. Da noch keine Dokumente geladen worden, wird einfach das graue Word Fenster angezeigt.

Neues Word Dokument erstellen:
Die Eigenschaft Documents der Instanz beinhaltet geöffnete Dokumente, zu dieser Aufzählung können wir nun Dokumente, z.B. durch Öffnen oder Erstellen, hinzufügen. Um ein neues Dokument zu erstellen, ist folgender Befehl nötig:
Word.Document NewDocument = WordApp.Documents.Add();

Dokument schließen
Hierfür ist die Funktion Close() zuständig, die von dem entsprechenden Dokument aufgerufen wird, also mit obigem Beispiel z.B.:
NewDocument.Close();

Bestehendes Word Dokument öffnen:
Object oMissing = System.Reflection.Missing.Value;
Word.Document ExistingDocument = WordApp.Documents.Open("Dateiname", oMissing, true, oMissing, "Passwort");
Alle Argumente außer dem ersten sind optional. Das 3. gibt an (true wenn ja), ob das Dokument schreibgeschützt geöffnet werden soll. Das 5. gibt ein eventuelles Passwort an.
Das Argument oMissing mit dem Wert System.Reflection.Missing.Value ist sehr praktisch, es liefert immer den Standardwert des aktuellen Arguments zurück und kann so einfach bei ungebrauchten Argumenten als Füller genommen werden.

Text einfügen
WordApp.Selection.TypeText("Hallo Welt");
Dieser Code tippt den angegeben Text in das jeweils oberste Dokument der Documents Aufzählung.

Formatierungen vornehmen Ebenfalls über die Selection Eigenschaft können Formatierungen vorgenommen werden. Werden diese vor einem TypeText Befehl durchgeführt, greifen sie beim geschriebenen Text. Es stehen alle bekannten Formatierungsoptionen zur Verfügung, z.B.:
WordApp.Selection.Font.Size = 20;
Dokument speichern Ein Dokument kann entweder über die parameterlose Funktion Save() oder über SaveAs2() gespeichert werden. Letztere erwartet den Speicherpfad.

Word Instanz beenden
WordApp.Quit();

Mittwoch, 19. September 2012

Systemwiederherstellungspunkt erstellen

Im heutigen Post möchte ich zeigen, wie man mit C# einen Systemwiederherstellungspunkt anlegt.
Dafür benutzen wir Management Klassen, welche sich mit der Windows Management Instrumentation (WMI) verbinden und so Informationen über den PC auslesen.
Damit das Programm läuft, muss mittels Projekt - Verweis hinzufügen System.Management eingebunden werden und dises zusätzlich mittels using. Außerdem muss das Programm mit Administratorrechten ausgeführt werden.
Zentral ist eine Instanz der Klasse ManagementClass.
Deren Konstruktor erwartet 3 Parameter:
Zuerst einen Scope, der hier auf den lokalen PC festgelegt wird, dann einen Pfad, welcher die auszuführende Operation defininiert (hier Wiederherstellungspunkt erstellen) und zuletzt eine Klasse mit Optionen, hierfür übergeben wir die Standardoptionen eines WMI Aufrufs.
Von der erzeugten Instanz wird die Funktion GetMethodParameters() mit Parameter "CreateRestorePoint" aufgerufen. Dieses weist die Anwendung an, die Parameter der WMI Funktion "CreateRestorePoint" zu laden, sodass diese dann belegt werden können. CreateRestorePoint erwartet 3 Parameter:
  • Description: Beschreibung des Wiederherstellungspunkts.
  • RestorePointType: Typ des Wiederherstellungspunkts. Genaueres zu den verfügbaren Optionen (auch zum nächsten Parameter) gibt es z.B. auf dieser Seite. Wir übergeben hier 0, was bedeuten soll, dass eine Anwendung installiert wurde, eine 10 bedeutet beispielsweise, dass ein Treiber installiert wurde.
  • EventType: Typ des Ereignisses. Wir übergeben hier 100, was bedeutet, dass im System eine Veränderung begonnen wurde, 101 hieße beispielsweise, dass die Veränderung abgeschlossen ist.
Mit InvokeMethod() rufen wir schließlich die ganze Aktion auf und erstellen den Wiederherstellungspunkt.
Zum Schluss der Code:

                // lokalen Computer auswählen
                ManagementScope ManScope = new ManagementScope(@"\\localhost\root\default");
                // Systemwiederherstellung auswählen
                ManagementPath ManPath = new ManagementPath("SystemRestore");
                // Standardoptionen auswählen
                ObjectGetOptions ManOptions = new ObjectGetOptions();
                // Management Klasse aus vorigen Auswahlen erstellen
                ManagementClass ManClass = new ManagementClass(ManScope, ManPath, ManOptions);
                // Methodenparameter laden
                ManagementBaseObject ManBaseObject = ManClass.GetMethodParameters("CreateRestorePoint");
                // Beschreibung 
                ManBaseObject["Description"] = "Mein C# Wiederherstellungspunkt";
                // Typ des Wiederherstellungspunkts
                ManBaseObject["RestorePointType"] = 0;
                // Typ des Events
                ManBaseObject["EventType"] = 100;

                ManagementBaseObject OutParam = ManClass.InvokeMethod("CreateRestorePoint", ManBaseObject, null);

Dienstag, 18. September 2012

Layer Ads

Ich habe mich entschlossen, Layer Ads auf diesem Blog zu schalten (also diese Popup Werbung). Ich weiß, das ist wahrscheinlich etwas aufdringlich, aber ein kleiner Verdienst nebenbei ist natürlich auch was schönes. Sagt Bescheid, wie ihr es findet, und ob es zu sehr stört.

Mittwoch, 12. September 2012

Prüfen ob aktueller Benutzer bestimmte Rolle (z.B. Administrator) hat

Eine einfache Lösung, um zu prüfen, ob der aktuelle Benutzer bestimmte Rollen (wie Adminstrator oder Gast) innehat, lautet folgendermaßen (im Beispiel wird geprüft, ob der Benutzer Gast ist):
WindowsIdentity CurrentIdentity = WindowsIdentity.GetCurrent();
WindowsPrincipal CurrentPrincipal = new WindowsPrincipal(CurrentIdentity);
bool UserIsAdmin = CurrentPrincipal.IsInRole(WindowsBuiltInRole.Guest);
Hierbei ergibt sich aber ab Windows Vista ein Problem, falls die zu prüfende Rolle Administrator ist. Obwohl der ausführende Benutzer eventuell Administrator ist, wird die Anwendung erst einmal ohne Administratorrechte ausgeführt, sodass fälschlicherweise false zurückgegeben wird.
Nur beim expliziten Ausführen der Anwendung als Administrator wird true zurückgegeben, allerdings logischerweise auch, wenn der Benutzer gar kein Administrator ist.

Um dieses in Windows 7 richtig umzusetzen, habe ich keine (einfache) Lösung gefunden, bei Gelegenheit werde ich etwas weiter probieren, aber vielleicht kommen ja auch ein paar gute Vorschläge von euch?

Sonntag, 9. September 2012

MD5 Hash einer Datei ermitteln

Im vorigen Post habe ich Grundlegendes zum Hashing und zum Hashen von Zeichenketten erläutert, dieses setze ich nun voraus. Daher poste ich nun einfach den Code, um die Hashsumme einer ganzen Datei zu berechnen:
MD5 Md5Hash = MD5.Create();
System.IO.FileStream HashStream = new System.IO.FileStream(@"C:\Users\User\Documents\c#.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] Data = Md5Hash.ComputeHash(HashStream);
string Hash =  System.BitConverter.ToString(Data);

Donnerstag, 6. September 2012

MD5 Hash einer Zeichenkette berechnen

Im heutigen Post möchte ich vorstellen, wie man mit C# den MD5-Hashwert einer Zeichenkette berechnet.
Kurz etwas allgemeines zum Prinzip des Hashings:
Eine Hashfunktion ist eine Funktion, die aus einer Eingabe variabler Länge eine Ausgabe fixer Länge erzeugt.
Die Funktion sollte einerseits nicht bzw. nur schwer invertierbar sein, das heißt, aus der Ausgabe darf kein Rückschluss auf die Eingabe möglich sein.
Andererseits soll die Funktion möglichst wenige Kollisionen erzeugen, das heißt, verschiedene Eingabe sollen verschiedene Ausgaben erzeugen und außerdem sollen kleine Änderungen in der Eingabe zu großen Änderungen in der Ausgabe führen.

Wofür nun das Ganze?
Ein Beispiel ist die Speicherung von Passwörtern auf einem Webserver. Die Passwörter werden nicht im Klartext gespeichert sondern gehasht. So kann einerseits der Administrator selber nicht die Passwörter der Kunden einsehen, da er den Hashwert ja nicht zurückberechnen kann, gleichzeitig können natürlich auch Eindringlinge selbiges nicht tun.
Ein weiteres Beispiel ist die Hashsummen Berechnung von Dateien, etwa um korrekte Übertragungen zu überprüfen. Die ganze Datei mit dem Original zu vergleichen wäre zu aufwending, also vergleicht man die Hashwerte. Stimmen diese überein, sind die Dateien wegen der Kollisionsarmut der Hashfunktion mit hoher Wahrscheinlichkeit identisch, ist bereits ein kleiner Teil der Datei inkorrekt, ist der Hashwert wahrscheinlich erheblich anders.

Nun zum Code. using System.Security.Cryptography vorausgesetzt berechnet folgender Code den Hashwert einer Zeichenkette:
MD5 Md5Hash = MD5.Create();
byte[] Data = Md5Hash.ComputeHash(Encoding.Default.GetBytes("Zu hashende Zeichenkette"));
string Hash =  System.BitConverter.ToString(Data);
Die 1. Zeile erzeugt ein MD5 Objekt. In der 2. Zeile wird die Zeichenkette per MD5 gehasht und der Hash als byte - Array zurückgegeben. Die Funktion ToString() in der 3. Zeile von BitConverter wandelt dieses Array schließlich in einen Hexadezimalstring um, die meist genutzte Darstellung eines Hashwerts.

Montag, 3. September 2012

Programm automatisch mit Windows starten

In diesem Post möchte ich zeigen, wie man ein C# Programm per Code dem Autostart von Windows hinzufügt. Hierfür gibt es 2 Möglichkeiten: Entweder kann man eine Verknüpfung auf das Programm im Autostart Ordner erstellen, oder einen entsprechenden Eintrag in der Registry anlegen.

1. Methode: Verknüpfung erstellen
Wie man allgemein eine Verknüpfung anlegt, habe ich in diesem Post beschrieben. Wir müssen nun als Verknüfungsziel unser Programm angeben und als Pfad den Autostartordner von Windows, dieser befindet sich bei Windows 7 in C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup. Den Pfad zur eigenen Anwendung gibt es über den Befehl Application.ExecutablePath.ToString() - also führt folgender Code dazu, dass das Programm in den Autostart kopiert wird (als Icon lässt sich etwas beliebiges einsetzen):
CreateShortcut(@"C:\Users\User\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" + "\\CAutoStart.url",  Application.ExecutablePath.ToString(), "C:\\MeinIcon.ico");


2. Methode: Eintrag in der Registry erstellen
Das Analogon zum obigen Pfad findet sich unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run in der Registry. Wie man generell mit der Registry umgeht, habe ich in diesem Tutorial beschrieben. Hier zeige ich nur den fertigen Code, welcher den passenden Eintrag in oben genanntem Pfad anlegt:
RegistryKey AutostartKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", true);
AutostartKey.SetValue("CAutoStart", Application.ExecutablePath.ToString());
AutostartKey.Close();

Mittwoch, 29. August 2012

Quellcode des League Of Legend Timers

In diesem Post veröffentliche ich den Quellcode zum vorigen Post.

Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Speech.Synthesis;
using System.Net;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        [DllImport("User32.dll")]
        static extern long SetForegroundWindow(IntPtr hwnd);

        [DllImport("user32.dll")]
        private static extern bool IsIconic(IntPtr hWnd);

        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);

        private const int SW_RESTORE = 9;

        // Verweis auf Hook Prozedur speichern, damit Garbage Collector diese nicht löscht
        KeyHook.HookProc KeyboardHookProcedure = new KeyHook.HookProc(KeyHook.KeyboardHookProc);

        LoLTimer MyTimer; // Timerinstanz
        long LastChange = 0; // Zeit der letzten Änderung des Chat Modes
        bool ChattingEnabled = false; // gibt ob ob Chatten (Ausgabe der Respawn Zeiten) aktiviert ist
        long LastActivation = 0; // Zeit der letzten Aktivierung eines Timers
        long LastCallout = 0; // Zeit der letzten Ausgabe aller Zeiten
        long StartingTime = 0; // Startzeit des Spiels
        int Channel;

        public Form1()
        {
            InitializeComponent();


        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MyTimer = new LoLTimer();

            SwitchChannel(); // Kanal festlegen

            DialogResult Delete = MessageBox.Show("Alte Synchronisation löschen?", "LoLTimer", MessageBoxButtons.YesNo);
            if (Delete == System.Windows.Forms.DialogResult.Yes)
                DeleteTime();

            // Keyhook initialisieren
            KeyHook MyHook = new KeyHook(this, KeyboardHookProcedure);
            MyHook.Hook(KeyHook.KeyboardHookProc);

            CheckSync();
        }

        public void CheckSync()
        {
            System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

            try
            {
                // versuchen, die Synchronisation auszulesen und zu benutzen
                WebClient Webclient1 = new WebClient();
                Webclient1.DownloadFile("http://servername.de" + "/" + "sync" + Channel, Application.StartupPath + "\\sync" + Channel);
                FileStream fs = new FileStream(Application.StartupPath + "\\sync" + Channel, FileMode.Open);
                byte[] TimeByte = new byte[100];
                fs.Read(TimeByte, 0, 100);
                fs.Close();
                string Time = enc.GetString(TimeByte);
                int TimeInt = Convert.ToInt32(Time.Substring(0, Time.IndexOf('\0')));
            }
            catch (Exception)
            {
                // falls noch keine Synchronisation vorhanden, erstellen
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servername.de" + "/" + "sync" + Channel);
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential("benutzername", "passwort");
                WebResponse Response = request.GetResponse();
                Stream RequestStream = request.GetRequestStream();
                string Time = GetGlobalTime().ToString(); 
                byte[] ByteTime = enc.GetBytes(Time);
                RequestStream.Write(ByteTime, 0, ByteTime.Length);
                RequestStream.Close();
                request.Abort();
                ResetTimes();
            }
        }

        public void SwitchChannel()
        {
            string Response = "";
            while (!CheckString(Response))
                Response = Microsoft.VisualBasic.Interaction.InputBox("Kanal eingeben", "LoLTimer", "1", 0, 0);

            Channel = Convert.ToInt32(Response);
        }

        private bool CheckString(string s)
        {
            if (s.Length == 0)
                return false;
            foreach (char c in s)
            {
                if (!Char.IsDigit(c))
                    return false;
            }
            return true;
        }

        public void StartGame()
        {
            // Startzeit setzen
            StartingTime = DateTime.Now.Ticks;
        }

        public void ChangeChat()
        {
            // aktiviert bzw. deaktiviert die Chat Funktion
            // die Zeit der letzten Änderung des Modus wird gespeichert,
            // damit Gedrückthalten der Taste nicht als Mehrfachänderung gewertet wird
            long now = (int)(DateTime.Now.Ticks / (10000 * 100));
            if (LastChange == 0 || now - LastChange > 3)
            {
                LastChange = now;
                ChattingEnabled = !ChattingEnabled;
                if (ChattingEnabled)
                    pictureBox2.BackColor = Color.Lime;
                else
                    pictureBox2.BackColor = Color.Red;
            }
        }

        public static int GetGlobalTime()
        {
            // Globale Zeit auslesen und zurückgeben
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.uhrzeit.org/atomuhr.php");

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader input = new StreamReader(response.GetResponseStream());
            string Content = input.ReadToEnd();
            string Match = "<div id=\"anzeige_zeit\">";
            int Start = Content.LastIndexOf(Match);
            Content = Content.Substring(Start + Match.Length, 20);
            int End = Content.LastIndexOf("</div>");
            string Time = Content.Substring(0, End);
            string[] Parts = Time.Split(':');
            int Seconds = Convert.ToInt32(Parts[0]) * 60 * 60 + Convert.ToInt32(Parts[1]) * 60 + Convert.ToInt32(Parts[2]);
            return Seconds;
        }

        public void ShowFront()
        {
            // bringt das Fenster nach vorne
            if (IsIconic(this.Handle))
                ShowWindowAsync(this.Handle, SW_RESTORE);
            SetForegroundWindow(this.Handle);
        }

        public void DeleteTime()
        {
            // versucht, die alte Synchronisationsdatei zu löschen
            // nur möglich, wenn älter als 2 Stunden
            try
            {
                WebClient Webclient1 = new WebClient();
                Webclient1.DownloadFile("http://servername.de" + "/" + "sync" + Channel, Application.StartupPath + "\\sync" + Channel);
                StreamReader sr = new StreamReader(Application.StartupPath + "\\sync" + Channel);
                int SyncTime = Convert.ToInt32(sr.ReadLine());
                if ((GetGlobalTime() - SyncTime) / (3600) < 2)
                {
                    MessageBox.Show("Kanal noch in Verwendung, kann nicht gelöscht werden. Anderen benutzen.");
                    return;
                }
                   
                sr.Close();
            }
            catch (Exception)
            {
            }

            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servername.de" + "/" + "sync" + Channel);
                request.Method = WebRequestMethods.Ftp.DeleteFile;

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                response.Close();
            }
            catch (Exception)
            {
            }
        }

        public void ResetTimes()
        {
            // resettet die Konfigurationsdatei auf dem Server
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://servername.de" + "/" + "times" + Channel);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential("benutzername", "passwort");

            WebResponse Response = request.GetResponse();

            Stream RequestStream = request.GetRequestStream();

            BinaryFormatter bFormatter = new BinaryFormatter();

            LoLTimer Empty = new LoLTimer();

            bFormatter.Serialize(RequestStream, Empty);

            RequestStream.Close();
            request.Abort();

        }

        public void Activate(int nr)
        {
            // die Zeit der letzten Aktivierung wird gespeichert,
            // damit Gedrückthalten der Taste nicht als Mehrfachaktivierung gewertet wird
            long now = (int)(DateTime.Now.Ticks / (10000 * 100));
            if (LastActivation == 0 || now - LastActivation > 9)
            {
                LastActivation = now;

                string Objective = "";
                int Respawn = 0;

                // entsprechenden Timer starten und Respawn Zeit berechnen

                MyTimer.SetTime(nr - 1, LoLTimer.GetStatTime(nr - 1));


                Objective = LoLTimer.GetStatObjective(nr - 1);
                Respawn = LoLTimer.GetStatTime(nr - 1);

                // entsprechendes Timer Steuerelement aktivieren
                switch (nr)
                {
                    case 1:
                        timer1.Enabled = true;
                        break;
                    case 2:
                        timer2.Enabled = true;
                        break;
                    case 3:
                        timer3.Enabled = true;
                        break;
                    case 4:
                        timer4.Enabled = true;
                        break;
                    case 5:
                        timer5.Enabled = true;
                        break;
                    case 6:
                        timer6.Enabled = true;
                        break;
                    default:
                        break;
                }

                if (ChattingEnabled)
                {
                    // wenn Chat Funktion aktiviert, Respawn Zeit berechnen und im Chat eingeben
                    int Diff = (int)((DateTime.Now.Ticks - StartingTime) / (10000 * 1000)) + Respawn;
                    int Mins = (int)(Diff / 60);
                    int Secs = Diff - Mins * 60;
                    string RespawnTime = Mins + ":";
                    if (Secs < 10)
                        RespawnTime += "0" + Secs;
                    else
                        RespawnTime += Secs;
                    SendKeys.SendWait("{ENTER}");
                    Thread.Sleep(300);
                    SendKeys.SendWait(Objective + ": " + RespawnTime);
                    Thread.Sleep(300);
                    SendKeys.SendWait("{ENTER}");
                }
            }
        }

        private void UpdateTimes()
        {
            bool Changed = true;

            try
            {
                try
                {
                    // versucht, die Zeitdatei vom Server herunterzuladen und die darin enthaltenen Zeiten mit den lokalen Zeiten zu mergen
                    WebClient Webclient1 = new WebClient();
                    Webclient1.DownloadFile("http://servername.de/times" + Channel, Application.StartupPath + @"\\times");

                    BinaryFormatter bf = new BinaryFormatter();
                    FileStream fs = new FileStream(Application.StartupPath + @"\\times", FileMode.Open);
                    LoLTimer OtherTimer = (LoLTimer)bf.Deserialize(fs);
                    fs.Close();
                    Changed = MyTimer.Merge(OtherTimer);
                }
                catch (Exception ex)
                {

                }
               
                // wurde lokal etwas geändert, neue Zeiten hochladen
                if (Changed)
                {
                    FtpWebRequest Request = (FtpWebRequest)WebRequest.Create("ftp://servername.de" + "/" + "times" + Channel);
                    Request.Method = WebRequestMethods.Ftp.UploadFile;
                    Request.Credentials = new NetworkCredential("benutzername", "passwort");
                    try
                    {
                        WebResponse Response = Request.GetResponse();
                    }
                    catch (Exception ex)
                    {
                        pictureBox1.BackColor = Color.Red;
                    }
                    Stream RequestStream = Request.GetRequestStream();

                    try
                    {
                        BinaryFormatter bFormatter = new BinaryFormatter();
                        bFormatter.Serialize(RequestStream, MyTimer);
                    }
                    catch (Exception)
                    {
                        pictureBox1.BackColor = Color.Red;
                    }
                    RequestStream.Close();
                    Request.Abort();
                }

                for (int i = 0; i <= 5; i++)
                {
                    if (MyTimer.GetTime(i) > 0 && MyTimer.GetTime(i) < LoLTimer.GetStatTime(i))
                    {
                        MethodInvoker TimerUpdate = delegate
         {

             switch (i)
             {
                 case 0:
                     timer1.Enabled = true;
                     break;
                 case 1:
                     timer2.Enabled = true;
                     break;
                 case 2:
                     timer3.Enabled = true;
                     break;
                 case 3:
                     timer4.Enabled = true;
                     break;
                 case 4:
                     timer5.Enabled = true;
                     break;
                 case 5:
                     timer6.Enabled = true;
                     break;
             }
         };
                        Invoke(TimerUpdate);
                    }
                }
            }
            catch (Exception ex)
            {
                pictureBox1.BackColor = Color.Red;
            }
        }

        public void CallAlltimes()
        {
            long now = (int)(DateTime.Now.Ticks / (10000 * 1000));
            if (LastCallout == 0 || now - LastCallout > 1)
            {

                LastCallout = now;
                SpeechSynthesizer Speaker = new SpeechSynthesizer();
                for (int i = 0; i <= 5; i++)
                {
                    string Objective = LoLTimer.GetStatObjective(i);
                    int Min;
                    int Sec;

                    if (MyTimer.GetTime(i) != -1)
                    {
                        Min = MyTimer.GetTime(i) / 60;
                        Sec = MyTimer.GetTime(i) % 60;
                        if (Min > 0)
                            Speaker.SpeakAsync(Objective + " in " + Min.ToString() + " minutes and " + Sec.ToString() + "seconds");
                        else
                            Speaker.SpeakAsync(Objective + " in " + Sec.ToString() + "seconds");
                    }


                }
            }
        }

        private void CallTimes(int nr, int time)
        {
            SpeechSynthesizer Speaker = new SpeechSynthesizer();
            string Objective = "";
            switch (nr)
            {
                case 0:
                    Objective = "Baron";
                    break;
                case 1:
                    Objective = "Dragon";
                    break;
                case 2:
                    Objective = "Blue";
                    break;
                case 3:
                    Objective = "Red";
                    break;
                case 4:
                    Objective = "Enemy Blue";
                    break;
                case 5:
                    Objective = "Enemy Red";
                    break;
                default:
                    break;
            }

            Speaker.SpeakAsync(Objective + " in " + time.ToString());
        }

        

        private void timer1_Tick(object sender, EventArgs e)
        {

            if (MyTimer.GetTime(0) <= 0)
                timer1.Enabled = false;

            MyTimer.SetTime(0, MyTimer.GetTime(0) - 1);

            label9.Text = MyTimer.GetTime(0).ToString();

            if (MyTimer.GetTime(0) == 60)
                CallTimes(0, 60);
            if (MyTimer.GetTime(0) == 30)
                CallTimes(0, 30);
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            if (MyTimer.GetTime(1) <= 0)
                timer2.Enabled = false;

            MyTimer.SetTime(1, MyTimer.GetTime(1) - 1);

            label10.Text = MyTimer.GetTime(1).ToString();

            if (MyTimer.GetTime(1) == 60)
                CallTimes(1, 60);
            if (MyTimer.GetTime(1) == 30)
                CallTimes(1, 30);
        }

        private void timer3_Tick(object sender, EventArgs e)
        {
            if (MyTimer.GetTime(2) <= 0)
                timer3.Enabled = false;

            MyTimer.SetTime(2, MyTimer.GetTime(2) - 1);

            label11.Text = MyTimer.GetTime(2).ToString();

            if (MyTimer.GetTime(2) == 60)
                CallTimes(2, 60);
            if (MyTimer.GetTime(2) == 30)
                CallTimes(2, 30);
        }

        private void timer4_Tick(object sender, EventArgs e)
        {
            if (MyTimer.GetTime(3) <= 0)
                timer4.Enabled = false;

            MyTimer.SetTime(3, MyTimer.GetTime(3) - 1);

            label12.Text = MyTimer.GetTime(3).ToString();

            if (MyTimer.GetTime(3) == 60)
                CallTimes(3, 60);
            if (MyTimer.GetTime(3) == 30)
                CallTimes(3, 30);
        }

        private void timer5_Tick(object sender, EventArgs e)
        {
            if (MyTimer.GetTime(4) <= 0)
                timer5.Enabled = false;

            MyTimer.SetTime(4, MyTimer.GetTime(4) - 1);

            label13.Text = MyTimer.GetTime(4).ToString();

            if (MyTimer.GetTime(4) == 60)
                CallTimes(4, 60);
            if (MyTimer.GetTime(4) == 30)
                CallTimes(4, 30);
        }

        private void timer6_Tick(object sender, EventArgs e)
        {
            if (MyTimer.GetTime(5) <= 0)
                timer6.Enabled = false;

            MyTimer.SetTime(5, MyTimer.GetTime(5) - 1);

            label14.Text = MyTimer.GetTime(5).ToString();

            if (MyTimer.GetTime(5) == 60)
                CallTimes(5, 60);
            if (MyTimer.GetTime(5) == 30)
                CallTimes(5, 30);
        }

        private void timer7_Tick(object sender, EventArgs e)
        {
            Thread Update = new Thread(UpdateTimes);
            Update.Start();
        }
    }

    [Serializable()]
    public class LoLTimer : ISerializable
    {
        int[] times;

        private static int[] StatTimes;
        private static string[] StatObjectives;

        long timestamp;

        static LoLTimer()
        {
            StatTimes = new int[6];
            StatTimes[0] = 420;
            StatTimes[1] = 360;
            StatTimes[2] = 300;
            StatTimes[3] = 300;
            StatTimes[4] = 300;
            StatTimes[5] = 300;

            StatObjectives = new string[6];

            StatObjectives[0] = "Baron";
            StatObjectives[1] = "Drake";
            StatObjectives[2] = "Blue";
            StatObjectives[3] = "Red";
            StatObjectives[4] = "Enemy Blue";
            StatObjectives[5] = "Enemy Red";
        }

        public static int GetStatTime(int id) 
        {
            return StatTimes[id];
        }

        public static string GetStatObjective(int id)
        {
            return StatObjectives[id];
        }

        public LoLTimer()
        {
            times = new int[6];
            for (int i = 0; i <= 5; i++)
            {
                times[i] = -1;
            }
        }

        public LoLTimer(SerializationInfo info, StreamingContext ctxt)
        {
            this.times = (int[])info.GetValue("times", typeof(int[]));
            this.timestamp = (long)info.GetValue("timestamp", typeof(long));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            info.AddValue("times", times);
            info.AddValue("timestamp", Form1.GetGlobalTime());
        }

        public long GetStamp()
        {
            return timestamp;
        }

        public void SetTime(int id, int value)
        {
            times[id] = value;
        }

        public int GetTime(int id)
        {
            return times[id];
        }

        public bool Merge(LoLTimer other)
        {
            bool Changed = false;
            for (int i = 0; i <= 5; i++)
            {
                int x = other.GetTime(i);
                if (x == -1 && times[i] == -1)
                    continue;
                other.SetTime(i, (int)(other.GetTime(i) - (Form1.GetGlobalTime() - other.GetStamp())));

                if (other.GetTime(i) > times[i])
                    times[i] = other.GetTime(i);
                else if (other.GetTime(i) + 5 < times[i])
                    Changed = true;
            }
            return Changed;
        }
    }

    public class KeyHook
    {
        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);

        //Declare hook handle as int.
        static int hHook = 0;

        // public static List<Keys> KeyCodes = new List<Keys>();

        //Declare keyboard hook constant.
        //For other hook types, you can obtain these values from Winuser.h in Microsoft SDK.
        const int WH_KEYBOARD_LL = 13;

        

        [StructLayout(LayoutKind.Sequential)]
        private class keyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }

        //Import for SetWindowsHookEx function.
        //Use this function to install thread-specific hook.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        private static extern int SetWindowsHookEx(int idHook, HookProc lpfn,
        IntPtr hInstance, int threadId);

        //Import for UnhookWindowsHookEx.
        //Call this function to uninstall the hook.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        private static extern bool UnhookWindowsHookEx(int idHook);

        //Import for CallNextHookEx.
        //Use this function to pass the hook information to next hook procedure in chain.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        private static extern int CallNextHookEx(int idHook, int nCode,
        IntPtr wParam, IntPtr lParam);

        [DllImport("kernel32.dll")]
        static extern IntPtr LoadLibrary(string lpFileName);

        static Form1 View;

        const int MOD_SHIFT = 0x0004;

        IntPtr LL = (IntPtr)LoadLibrary("User32");

        public KeyHook(Form1 form, HookProc proc)
        {
            View = form;
            Hook(proc);

        }

        ~KeyHook()
        {
            UnHook();
        }

        public int Hook(HookProc proc)
        {
            hHook = SetWindowsHookEx(WH_KEYBOARD_LL, proc, LL, 0);
            return hHook;
        }

        public bool UnHook()
        {
            bool ret = UnhookWindowsHookEx(hHook);
            if (ret)
                hHook = 0;
            return ret;
        }

        public static int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0)
            {
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
            else
            {
                keyboardHookStruct MyKeyboardHookStruct = (keyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(keyboardHookStruct));
                switch (MyKeyboardHookStruct.vkCode)
                {
                    case (int)Keys.NumPad0:
                    case (int)Keys.NumPad1:
                    case (int)Keys.NumPad2:
                    case (int)Keys.NumPad3:
                    case (int)Keys.NumPad4:
                    case (int)Keys.NumPad5:
                        View.Activate(MyKeyboardHookStruct.vkCode - 95);
                        return 1;
                    case (int)Keys.NumPad9:
                        View.CallAlltimes();
                        return 1;
                    case (int)Keys.F2:
                            View.ShowFront();
                            return 1;
                    case (int)Keys.F9:
                        View.ChangeChat();
                        return 1;
                    case (int)Keys.F10:
                        View.StartGame();
                        return 1;
                    default:
                        return CallNextHookEx(hHook, nCode, wParam, lParam);
                }
                return 1;
            }
        }

    }

}

Form1.Designer.cs:
namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
       /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
       /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Windows Form-Designer generierter Code

        /// <summary>
       /// Erforderliche Methode für die Designerunterstützung.
       /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.timer2 = new System.Windows.Forms.Timer(this.components);
            this.timer3 = new System.Windows.Forms.Timer(this.components);
            this.timer4 = new System.Windows.Forms.Timer(this.components);
            this.timer5 = new System.Windows.Forms.Timer(this.components);
            this.timer6 = new System.Windows.Forms.Timer(this.components);
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.label5 = new System.Windows.Forms.Label();
            this.label6 = new System.Windows.Forms.Label();
            this.label9 = new System.Windows.Forms.Label();
            this.label10 = new System.Windows.Forms.Label();
            this.label11 = new System.Windows.Forms.Label();
            this.label12 = new System.Windows.Forms.Label();
            this.label13 = new System.Windows.Forms.Label();
            this.label14 = new System.Windows.Forms.Label();
            this.timer7 = new System.Windows.Forms.Timer(this.components);
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.pictureBox2 = new System.Windows.Forms.PictureBox();
            this.label7 = new System.Windows.Forms.Label();
            this.label8 = new System.Windows.Forms.Label();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
            this.SuspendLayout();
            // 
            // timer1
            // 
            this.timer1.Interval = 1000;
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
            // 
            // timer2
            // 
            this.timer2.Interval = 1000;
            this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
            // 
            // timer3
            // 
            this.timer3.Interval = 1000;
            this.timer3.Tick += new System.EventHandler(this.timer3_Tick);
            // 
            // timer4
            // 
            this.timer4.Interval = 1000;
            this.timer4.Tick += new System.EventHandler(this.timer4_Tick);
            // 
            // timer5
            // 
            this.timer5.Interval = 1000;
            this.timer5.Tick += new System.EventHandler(this.timer5_Tick);
            // 
            // timer6
            // 
            this.timer6.Interval = 1000;
            this.timer6.Tick += new System.EventHandler(this.timer6_Tick);
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label1.Location = new System.Drawing.Point(13, 16);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(40, 13);
            this.label1.TabIndex = 0;
            this.label1.Text = "Baron";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label2.Location = new System.Drawing.Point(111, 16);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(48, 13);
            this.label2.TabIndex = 1;
            this.label2.Text = "Dragon";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label3.Location = new System.Drawing.Point(14, 54);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(32, 13);
            this.label3.TabIndex = 2;
            this.label3.Text = "Blue";
            // 
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label4.Location = new System.Drawing.Point(111, 54);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(30, 13);
            this.label4.TabIndex = 3;
            this.label4.Text = "Red";
            // 
            // label5
            // 
            this.label5.AutoSize = true;
            this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label5.Location = new System.Drawing.Point(14, 92);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(44, 13);
            this.label5.TabIndex = 4;
            this.label5.Text = "E Blue";
            // 
            // label6
            // 
            this.label6.AutoSize = true;
            this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.label6.Location = new System.Drawing.Point(111, 92);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(42, 13);
            this.label6.TabIndex = 5;
            this.label6.Text = "E Red";
            // 
            // label9
            // 
            this.label9.AutoSize = true;
            this.label9.Location = new System.Drawing.Point(59, 16);
            this.label9.Name = "label9";
            this.label9.Size = new System.Drawing.Size(16, 13);
            this.label9.TabIndex = 8;
            this.label9.Text = "-1";
            // 
            // label10
            // 
            this.label10.AutoSize = true;
            this.label10.Location = new System.Drawing.Point(165, 16);
            this.label10.Name = "label10";
            this.label10.Size = new System.Drawing.Size(16, 13);
            this.label10.TabIndex = 9;
            this.label10.Text = "-1";
            // 
            // label11
            // 
            this.label11.AutoSize = true;
            this.label11.Location = new System.Drawing.Point(59, 54);
            this.label11.Name = "label11";
            this.label11.Size = new System.Drawing.Size(16, 13);
            this.label11.TabIndex = 10;
            this.label11.Text = "-1";
            // 
            // label12
            // 
            this.label12.AutoSize = true;
            this.label12.Location = new System.Drawing.Point(165, 54);
            this.label12.Name = "label12";
            this.label12.Size = new System.Drawing.Size(16, 13);
            this.label12.TabIndex = 11;
            this.label12.Text = "-1";
            // 
            // label13
            // 
            this.label13.AutoSize = true;
            this.label13.Location = new System.Drawing.Point(59, 92);
            this.label13.Name = "label13";
            this.label13.Size = new System.Drawing.Size(16, 13);
            this.label13.TabIndex = 12;
            this.label13.Text = "-1";
            // 
            // label14
            // 
            this.label14.AutoSize = true;
            this.label14.Location = new System.Drawing.Point(165, 92);
            this.label14.Name = "label14";
            this.label14.Size = new System.Drawing.Size(16, 13);
            this.label14.TabIndex = 13;
            this.label14.Text = "-1";
            // 
            // timer7
            // 
            this.timer7.Enabled = true;
            this.timer7.Interval = 30000;
            this.timer7.Tick += new System.EventHandler(this.timer7_Tick);
            // 
            // pictureBox1
            // 
            this.pictureBox1.BackColor = System.Drawing.Color.Lime;
            this.pictureBox1.Location = new System.Drawing.Point(191, 113);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(18, 13);
            this.pictureBox1.TabIndex = 14;
            this.pictureBox1.TabStop = false;
            // 
            // pictureBox2
            // 
            this.pictureBox2.BackColor = System.Drawing.Color.Red;
            this.pictureBox2.Location = new System.Drawing.Point(191, 94);
            this.pictureBox2.Name = "pictureBox2";
            this.pictureBox2.Size = new System.Drawing.Size(18, 13);
            this.pictureBox2.TabIndex = 15;
            this.pictureBox2.TabStop = false;
            // 
            // label7
            // 
            this.label7.AutoSize = true;
            this.label7.Location = new System.Drawing.Point(0, 111);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(0, 13);
            this.label7.TabIndex = 16;
            // 
            // label8
            // 
            this.label8.AutoSize = true;
            this.label8.Location = new System.Drawing.Point(41, 111);
            this.label8.Name = "label8";
            this.label8.Size = new System.Drawing.Size(0, 13);
            this.label8.TabIndex = 17;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(205, 124);
            this.Controls.Add(this.label8);
            this.Controls.Add(this.label7);
            this.Controls.Add(this.pictureBox2);
            this.Controls.Add(this.pictureBox1);
            this.Controls.Add(this.label14);
            this.Controls.Add(this.label13);
            this.Controls.Add(this.label12);
            this.Controls.Add(this.label11);
            this.Controls.Add(this.label10);
            this.Controls.Add(this.label9);
            this.Controls.Add(this.label6);
            this.Controls.Add(this.label5);
            this.Controls.Add(this.label4);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Name = "Form1";
            this.Text = "LoL Timer";
            this.TopMost = true;
            this.Load += new System.EventHandler(this.Form1_Load);
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Timer timer1;
        private System.Windows.Forms.Timer timer2;
        private System.Windows.Forms.Timer timer3;
        private System.Windows.Forms.Timer timer4;
        private System.Windows.Forms.Timer timer5;
        private System.Windows.Forms.Timer timer6;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Label label5;
        private System.Windows.Forms.Label label6;
        private System.Windows.Forms.Label label9;
        private System.Windows.Forms.Label label10;
        private System.Windows.Forms.Label label11;
        private System.Windows.Forms.Label label12;
        private System.Windows.Forms.Label label13;
        private System.Windows.Forms.Label label14;
        private System.Windows.Forms.Timer timer7;
        private System.Windows.Forms.PictureBox pictureBox1;
        private System.Windows.Forms.PictureBox pictureBox2;
        private System.Windows.Forms.Label label7;
        private System.Windows.Forms.Label label8;

    }
}