Remote Desktop Programm mit C#?
Hallo, an alle!
Also ich habe folgende Frage/Problem,
Ich habe als Schulprojekt eine Aufgabe bekommen, welche ist: programmiere in 2 Wochen mit (im besten Fall WPF) in C# ein remote Desktop Programm. Und mein Problem ist die Programmierung an sich, sondern dass ich 1. nicht wirklich weiß, welche Bibliothek sich dazu eignet und 2. keine gute Anleitung finde wo dies alles StepbyStep erklärt wird (Also die Bibliotheken), weil ich habe bereits versucht mit MSTSCLib aber dazu findet man gefühlt 0 Dokumentationen bzw. Erklärungen wie dies alles genau funktioniert und aufgebaut sein muss!
Also an alle IT'ler und Software Entwickler, könnt ihr mir eine andere Bibliothek empfehlen? Oder vielleicht eine Doku zu MSTSCLib zusenden? (Es ist egal, in welcher sprache die Doku ist, aber sie sollte alles gut erklären können)
Auch andere Tipps bezüglich dem RDP sind gerne gesehen!
Und bitte empfehlt mir keine Dokus bezüglich Windows Forms da dies nicht erlaubt ist (Also Windows Forms)
2 Antworten
Ich bezweifle ganz stark, dass ein RDP-Klon mit C# und WPF innerhalb zwei Wochen ein geeignetes Schulprojekt ist O.o
Was soll das Programm können?
Wenn es wirklich ein RDP-Klon sein soll, glaube ich nicht, dass es dafür gute Frameworks gibt - zumindest kenne ich keins.
Wenn ich es von 0 aufbauen müsste, würde ich es wie folgt machen:
Die Anwendung auf dem Remote-PC filmt den Bildschirm. Einfacher wäre denke ich alle paar Millisekunden ein Bild. Das überträgst Du dann zum PC des Anwenders und zeigst es dort an. Maus-Bewegungen und Tastatusanschläge übermittelst Du umgekehrt zum Remote-PC.
Screenshots dürften einfach sein. Das Übertragen von Daten dürfte am einfachsten mit WCF laufen. Zum Abfangen von Tastatur und Maus gibt's verschiedene Möglichkeiten, die kleinlichste Option wäre die WinAPI. Simulieren kannst Du die dann wiederum ebenfalls mit der WinAPI, die PostMessage-Funktion dürfte passen.
===========
So ganz grob umrissen, wie man es machen könnte, wenn man kein Framework nutzt.
PS:
Ansonsten musst Du suchen.
Allerdings kann es gut sein, dass Du dafür wenig Dokumentation findest, da es keine wirklich weit verbreitete Anforderung ist.
Du hast also nur die Möglichkeit, Beispiele zu suchen (auf GitHub suchen kann viel wert sein), oder Du experimentierst und schaust, was klappt und was nicht.
Schüler? Demnach vermutlich Anfänger?
Versteh mich nicht falsch, aber ich halte das für unrealistisch :D Also nicht enttäuscht sein, wenn's nicht klappt.
=================
Ich hab noch nie ein Bild gestreamt, daher musst Du da selber Mal schauen, wie Du ein Bild von einem PC zum Anderen live streamen kannst. Wenn das nicht klappt, kannst Du ja immer noch die Screenshots machen.
WCF erleichtert dir die ganze Kommunikation zwischen zwei Prozessen bzw. Computern enorm. Beachte aber, wenn Du HTTP nutzt, musst Du die URL im Windows registrieren (CMD mit Admin-Rechten: netsh http add urlacl)
Windows-Messages abfangen geht mit der WinAPI: SetWindowsHookEx
Windows-Messages simulieren geht mit WinAPI: PostMessage
So oder so ähnlich funktioniert auch jedes andere RDP-Programm, mit ein paar anderen Funktionen, wie z.B. dass nur die Änderungen im Bild übertragen werden, das erspart Traffic.
=================
Bei WPF solltest Du auf MVVM setzen, das erspart viel Stress.
naja Schüler ja und Änfänger würde ich nicht sagen, Python programmiere ich berreits seit 5-6 Jahren aber c# halt "erst" sein 2-3 Jahren, und gefühlt ist das 10 mal so umständlich wie python und ja, und naja mal schauen
Hier ist ein vllt ein Einstieg (auch wenn es WinForms ist)
https://www.youtube.com/watch?v=2sCpd1HEMZw
https://www.youtube.com/watch?v=mRKFdL5eG1I
Dazu müsstest du dir u.U. einen Zweiten Stream für die Inputdevices machen.
hab ich auch schon gesehen aber soviel ich mitbekommen habe funktionieren da die meisten Bibliotheken nicht... also in WPF
oke mir fällt gerade auf dass man da garnicht sieht welche Bibliotheken er einbindet bzw. verzeichnisse, hast du da eine Ahnung ? weil auch in Windows Forms funktioniert das nicht...
Soweit ich das sehe benutzt der nur Net:
System.Drawing;
System.Drawing.Imaging;
System.Net;
System.Net.Sochets;
Ach ja und er nutzt noch Windows.Forms für die Screen.Bounds.
Und mal abgesehen davon, du benötigst doch Client und Server ... und wenn der Client WPF ist geht das schon, denn er bekommt ja nur das Bild als Stream ...
Ich verstehe, was du meinst und ja deine Aussage klingt plausibel, bzw. ich könnte das schon so vlt. machen und nein es muss nich exakt ein Klon von RDP sein, die Funktion sollte einfach sein: Client1 gibt die IP des Servers bzw. des anderen Clients ein und den Port über den der Server/Client2 zuhört (und das in einer GUI) und der Server gibt einen Port ein, über den er zuhört bzw., den er öffnen möchte, und klickt dann auf Bildschirm anzeigen/Port öffnen, und dann öffnet sich der gewählte Port, und sobald Client1 dann auch verbinden klickt soll bei Client2 das Bild/Desktop von Client1 angezeigt werden und Client2 soll wieder rum dann auf Client1 arbeiten können (Bzw. klicken und Tastatureingaben)
Ich hoffe du verstehst was ich meine