C# für Anfänger







Willkommen zu C# !



Hier sind alle diejenigen genau richtig, die soeben noch "Tse-Fis" sagten und nicht "ßi-Scharp".
Bei unseren Erläuterungen beziehen wir uns auf Windows 10.

Wir wollen hier nur eine kleine Starthilfe geben, zunächst ohne Visual Studio 2019 und Begriffe
wie "Objektorientierte Programmierung", "Klassen", "Methoden" usw.

Schon in weniger als fünf Minuten soll Dein erstes C#-Programm starten!


Vorbereitung


Zunächst sei eine kleine Prüfung empfohlen, damit alles nachfolgende richtig funktioniert.

Klicke dazu auf das Startsymbol ganz unten links mit der rechten Maustaste. Dann auf Explorer > Dieser PC >
Lokaler Datenträger (C:) > Windows > Microsoft.NET > Framework > v4.0.30319 .
Steht dort "csc" in der Auflistung, ist alles notwendige installiert und es kann losgehen.


Schritt eins


Lege eine Textdatei "quellprogramm.cs" an. Statt "quellprogramm" kann man auch einen anderen
Dateinamen wählen, wichtig ist jedoch die Endung ".cs", die den Dateityp angibt.

Einige wenige von Euch kennen möglicherweise "copy + paste" noch nicht.

Verkleinert dieses Fenster und klickt mit der rechten Maustaste auf den Desktop-Bildschirmhintergrund,
zieht dann auf "Neu" und klickt auf "Textdokument". Öffnung durch Doppelklick
auf das Symbol. Dann "Datei" und "Speichern unter". Als Dateiname "quellprogramm.cs" angeben.

Mit gedrückter linker Maustaste zieht man über den folgenden Programmtext und zwar von using System
bis zur letzten Klammer. Den markierten Text mit rechter Maustaste anklicken und dann auf "Kopieren"
gehen. Nun die leere Datei "quellprogramm.cs" öffnen und den Text mit Hilfe der rechten Maustaste einfügen.
Zum Schluß speichern.





using System;
using System.Threading;

class Hello
    {
    static void Main()
      {
      Console.WriteLine("Hello World!");
      Thread.Sleep(10000);
      }
    }






Der Programmquelltext ist fertig. Zur Ausführung kommen nur die beiden Zeilen Console.WriteLine
und Thread.Sleep. 10000 führt zu einer Wartezeit von 10 Sekunden.



Schritt zwei


Jetzt folgt die Kompilierung. Dabei entsteht aus dem Quelltext die für den Computer lesbare .exe-Datei.
In unserem Beispiel heißt sie program.exe . Wir kopieren folgende Anweisungen (wieder mit copy + paste) :


C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe–out:C:\Users\Bernd\Desktop\program.exe C:\Users\Bernd\Desktop\quellprogramm.cs


Dann drücken wir die Windows-Taste unten links und die R-Taste gleichzeitig
(die Windows-Taste etwas früher) und fahren fort mit der Eingabe von "cmd".
Es sollte sich ein schwarzes Fenster öffnen und wir fügen dort die kopierte Anweisungszeile ein.
Der Name "Bernd" ist zu ersetzen durch den entsprechenden Ordnernamen Deines PC.
Dieser steht entweder im Fenster oder kann ermittelt werden durch Start (unten links)
> Explorer > Lokaler Datenträger (C:) > Benutzer. Unter dem Ordner "Öffentlich"
ist der gesuchte Name.

Zu beachten ist, dass die Cursor-Steuerung im schwarzen Fenster etwas anders ist.
Man sollte nur die Pfeiltasten rechts und links benutzen.

Jetzt die Enter-Taste drücken und es entsteht die Datei program.exe !
Diese nur noch anklicken und für 10 Sekunden gehen Grüße an die Welt !






Beispiel 1, Addition von zwei Zahlen


Nach der Eingabe von zwei ganzen Zahlen werden diese addiert und das Ergebnis ausgegeben.
"int" bedeutet, dass die Variablen summand1, summand2 und summe ganzzahlige Werte annehmen sollen.





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
class Addition
    {
      static void Main()
      {
      Console.WriteLine("Dieses Programm addiert zwei Zahlen, die Sie eingeben.");
      Console.WriteLine(" ");
      int summand1, summand2, summe;
      Console.WriteLine("Bitte geben Sie eine ganze Zahl ein, z.B. 328874");
      summand1 = Convert.ToInt32(Console.ReadLine());
      Console.WriteLine("Bitte geben Sie eine zweite Zahl ein");
      summand2 = Convert.ToInt32(Console.ReadLine());
      summe = summand1 + summand2;
      Console.WriteLine(" ");
      Console.WriteLine("Das Ergebnis ist: " + summe);
      Thread.Sleep(5000);
      }
    }






Beispiel 2, Multiplikation von zwei Dezimalzahlen


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
class Addition
    {
      static void Main()
      {
      Console.WriteLine("Dieses Programm multipliziert zwei Zahlen, die Sie eingeben.");
      Console.WriteLine(" ");
      double m1, m2, prod ;
      Console.WriteLine("Bitte geben Sie eine Zahl ein");
      m1 = Convert.ToDouble(Console.ReadLine());
      Console.WriteLine("Bitte geben Sie eine zweite Zahl ein");
      m2 = Convert.ToDouble(Console.ReadLine());
      prod = m1 * m2;
      Console.WriteLine(" ");
      Console.WriteLine("Das Ergebnis ist: " + prod);
      Thread.Sleep(5000);
      }
    }






Beispiel 3, Simulation der Tastatur


Zunächst startet das Programm den google-Browser, der muss natürlich vorher installiert sein.
Ansonsten im quellprogramm.cs die entsprechende Zeile ersetzen durch beispielsweise
"Process.Start("C:\\Program Files\\Mozilla Firefox\\firefox.exe");". Zu beachten sind die Doppelschrägstriche
Dann wird fünfmal versucht, sich auf der Quatsch-Seite Arche-Internetz anzumelden.
Dieser Franz-Joseph von Schnabel ist eine von etwa 20 Pfeifen, die sich hier teilweise schon jahrelang herumtreiben.
Der Knabe wird sich wohl ein wenig ärgern, wenn er bei jedem login einen captcha-code
neu eingeben muss.





// Kommmentarzeilen, beginnen mit zwei Schrägstrichen und werden bei der
// Kompilierung nicht berücksichtigt
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

class Program
{
static void Main()
    {
     for (int i = 0; i < 5; i++)
        {
        // Bei der Arche Internetz haben sich Irre zusammengerottet
        Console.WriteLine("Achtung, hier sind Irre unterwegs!");
        Thread.Sleep(3000);
        Process.Start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
        Thread.Sleep(3000);
        SendKeys.SendWait("www.arche-internetz.net/ucp.php?mode=login");
        SendKeys.SendWait("{ENTER}");
        Thread.Sleep(3000);
        SendKeys.SendWait("Franz-Joseph von Schnabel");
        Thread.Sleep(1000);
        SendKeys.SendWait("{TAB}");
        Thread.Sleep(1000);
        SendKeys.SendWait("SodomUndGomorrha");
        Thread.Sleep(1000);
        SendKeys.SendWait("{Enter}");
        Thread.Sleep(3000);
        }
    }
}






Das Ergebnis bitte selbst ansehen. Die fünf Fenster müssten von Hand geschlossen werden.






Beispiel 4, Grüße nach Berlin und vielen Dank!


Mit Hilfe von "while (a > 0)" gelangt das Programm in eine Endlosschleife,
da sie Variable a stets "5" bleibt.





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
class Program
    {
      [DllImport("user32", EntryPoint = "mouse_event")]
      private static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, IntPtr dwExtraInfo);
      private const Int32 MouseEventAbsolute = 0x8000;
      private const Int32 MouseEventLeftDown = 0x0002;
      private const Int32 MouseEventLeftUp = 0x0004;
      private const Int32 MouseEventMiddleDown = 0x0020;
      private const Int32 MouseEventMiddleUp = 0x0040;
      private const Int32 MouseEventMove = 0x0001;
      private const Int32 MouseEventRightDown = 0x0008;
      private const Int32 MouseEventRightUp = 0x0010;
      private const Int32 MouseEventXDown = 0x0080;
      private const Int32 MouseEventXUp = 0x0100;
      private const Int32 MouseEventWheel = 0x0800;
      private const Int32 MouseEventHWheel = 0x01000;
      static void Main()
      { Console.WriteLine("Start");
      Thread.Sleep(1000);
      Process.Start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
      Thread.Sleep(2000);
      SendKeys.SendWait("www.clavius.info");
      Thread.Sleep(2000);
      SendKeys.SendWait("{ENTER}");
      Thread.Sleep(4000);
      int a ;
      a = 5;
      while (a > 0)
       {
       Cursor.Position = new System.Drawing.Point(100, 100);
       Thread.Sleep(1000);
       mouse_event(MouseEventMove, 100, 0, 0, new IntPtr());
       Thread.Sleep(1000);
       mouse_event(MouseEventMove, 0, 100, 0, new IntPtr());
       Thread.Sleep(1000);
       mouse_event(MouseEventMove, -100, 0, 0, new IntPtr());
       Thread.Sleep(1000);
       mouse_event(MouseEventMove, 0, -100, 0, new IntPtr());
       Thread.Sleep(1000);
       }
      }
   }






Beispiel 5, Simulation von Tastatur und Maus


Damit das Fenster in voller Größe erscheint, sollten vor der Programmausführung keine
verkleinerten Browser-Fenster in der Task-Leiste sein.
Koordinaten werden in Pixeln dargestellt und "(2000,0)" soll dazu führen, dass der Curser garantiert
nach ganz rechts gelangt. Leider sind die Bildschirmpositionen bei Notebook und PC unterschiedlich.
Es gibt aber Tools, die die Koordinaten des Mauszeigers angeben können, z.B. bei heise.de .






using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

class Program
    {
      [DllImport("user32", EntryPoint = "mouse_event")]
      private static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, IntPtr dwExtraInfo);
      private const Int32 MouseEventAbsolute = 0x8000;
      private const Int32 MouseEventLeftDown = 0x0002;
      private const Int32 MouseEventLeftUp = 0x0004;
      private const Int32 MouseEventMiddleDown = 0x0020;
      private const Int32 MouseEventMiddleUp = 0x0040;
      private const Int32 MouseEventMove = 0x0001;
      private const Int32 MouseEventRightDown = 0x0008;
      private const Int32 MouseEventRightUp = 0x0010;
      private const Int32 MouseEventXDown = 0x0080;
      private const Int32 MouseEventXUp = 0x0100;
      private const Int32 MouseEventWheel = 0x0800;
      private const Int32 MouseEventHWheel = 0x01000;

static void Main()
      {
      Console.WriteLine("Hier kommt eine Tanzmaus!");
      Thread.Sleep(2000);
      Console.WriteLine("Voraussichtliche Dauer: 60 Sekunden.");
      Thread.Sleep(2000);
      Console.WriteLine("Bei Laufzeitproblemen endet das Programm nicht immer, wie erwartet. ");
      Thread.Sleep(4000);
      Process.Start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
      Thread.Sleep(2000);
      SendKeys.SendWait("www.clavius.info");
      Thread.Sleep(2000);
      SendKeys.SendWait("{ENTER}");
      Thread.Sleep(4000);
      Cursor.Position = new System.Drawing.Point(100, 100);
      Thread.Sleep(4000);
      mouse_event(MouseEventMove, 100, 100, 0, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventMove, 100, 100, 0, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventMove, 100, 100, 0, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventMove, 100, 100, 0, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventWheel, 0, 0, -120, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventWheel, 0, 0, -120, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventWheel, 0, 0, -120, new IntPtr());
      Thread.Sleep(4000);
      mouse_event(MouseEventWheel, 0, 0, 120, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventWheel, 0, 0, 120, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventWheel, 0, 0, 120, new IntPtr());
      Thread.Sleep(2000);
      Cursor.Position = new System.Drawing.Point(100, 100);
      Thread.Sleep(4000);
      // Simulation einer Textmarkierung
      mouse_event(MouseEventLeftDown, 0, 0, 0, new IntPtr());
      Thread.Sleep(4000);
      Cursor.Position = new System.Drawing.Point(2000, 800);
      Thread.Sleep(4000);
      mouse_event(MouseEventLeftUp, 0, 0, 0, new IntPtr());
      Thread.Sleep(4000);
      // Ende Simulation einer Textmarkierung
      // Cursor nach oben rechts zum Fensterschließen
      Cursor.Position = new System.Drawing.Point(2000,0);
      Thread.Sleep(4000);
      mouse_event(MouseEventLeftDown, 0, 0, 0, new IntPtr());
      Thread.Sleep(2000);
      mouse_event(MouseEventLeftUp, 0, 0, 0, new IntPtr());
      Console.WriteLine(" ");
      Console.WriteLine("Gleich fertig...");
      Thread.Sleep(4000);
      }
   }






Demnächst sollen Ausgaben auf einen Drucker folgen.

Hannover, den 15.05.20