Hallo Elitepvpers,
Ich will heute ein kleines Tutorial machen, indem ich euch zeigen werde wie man eine Konsole mit einer Windows Forms öffnen kann.
Was wird benötigt?
- Visual Basic 2013
- Basic programmier Skills
Zuerst erstellen wir eine neue "Windows Forms - Anwendung"
Nun machen wir einen Doppelklick auf die Form. Danach Schreiben wir über das "Public Class1":
Code:
Imports System.Runtime.InteropServices
Nun schreiben wir zwischen "Public Class1" und Private Sub Form1_Load(..):
Code:
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function AllocConsole() As Boolean
End Function
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function FreeConsole() As Boolean
End Function
Nun Starten wir die Console wenn wir folgenden Code in das Form1 Load Ereignis einfügen:
(bzw. wir bestimmen die Meldung wenn die Konsole nicht Startet.)
Code:
If Not AllocConsole() Then
MsgBox("Failed to load Console.", 1, "Failed to load Console")
End If
Jetzt haben wir die Konsole gestartet. Aber wir wollen natürlich auch dass sie eine Funktion hat oder?
Zuerst passen wir die Konsole ein bisschen an:
Damit ändern wir den Titel der Konsole, die Schriftfarbe und fügen einen Text ein, der beim Start ausgegben wird.
Ich benutze die Konsole in diesem Tutorial als Log.
Das heißt, dass jede Aktion in der Konsole als Text wiedergegeben wird.
Zum beispiel bei einem Button:
Danach machen wir einen Doppelklick auf den Button und Senden dadurch einen Text an die Konsole. Der Button kann nebenbei auch eine aktion ausführen.
Der Code:
Code:
Console.WriteLine("Button Clicked")
Es sollte nun so aussehen:
Nun hier der Ganze Code:
Code:
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function AllocConsole() As Boolean
End Function
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function FreeConsole() As Boolean
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If Not AllocConsole() Then
MsgBox("Failed to load Console.", 1, "Failed to load Console")
End If
Console.Title = "LOG"
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine(" Succesfully Started!")
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Console.WriteLine("Button Clicked")
End Sub
End Class
Die Konsole in Aktion:
Soo, das wars erstmal von mir.
Ich hoffe ich konnte euch mit diesem kleinen Tutorial weiterhelfen.
Bei Problemen oder Fragen einfach Komments oder eine PN schreiben
Ich würde mich übrigens sehr über ein Thanks freuen
Grüße, *DerMetzger*
Und was bringt mir das ? Kann genau so gut eine Konsolenanwendung machen und dort eine Form öffnen. Und dabei brauche ich nicht die calls zu den nativen Funktionen zu importen.
Oder einfacher.
Man erstellt eine Windows Forms Anwendung.
Ändert es im Projekt zu einer Konsolen Anwendung und tada beides öffnet sich ohne native Funktionen.
Viele Leute wisen es vielleicht nicht?
Auch wenn es andere Möglichkeiten gibt, wieso sollte ich dann kein Tutorial über diese Möglichkeit machen dürfen? ^^
Viele Leute wisen es vielleicht nicht?
Auch wenn es andere Möglichkeiten gibt, wieso sollte ich dann kein Tutorial über diese Möglichkeit machen dürfen? ^^
Weil "meine" Möglichkeit kürzer, schneller und konformer ist.
Wieso schwerer machen als es eigentlich ist?
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function AllocConsole() As Boolean
End Function
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function FreeConsole() As Boolean
End Function
Muss muss ich dieses FreeConsole() verwenden? Und warum geht jetzt plötzlich Console.WriteLine? Warum weiß das Programm, dass alles auf diese AllocConsole() Konsole da ausgegeben werden soll?
Weil es dann Aufgabe des Frameworks ist das richtig hin zu bekommen und das Framework kann es zu 99% besser ( sicherer, schneller).
Quote:
Originally Posted by msdn
A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. A process can use the FreeConsole function to detach itself from its current console, then it can call AllocConsole to create a new console or AttachConsole to attach to another console.
If the calling process creates a child process, the child inherits the new console.
In dem Tut geht es darum eine Konsole zu erstellen, falls du es mitbekommen hast. Das mit dem Framework bezog sich darauf eben nur diese eine Konsole zu erstellen. Das es nur eine Konsole geben kann ist eigentlich logisch. Aber mit ein paar Tricks kann ein Prozess in 2 Konsolen loggen. Nur die 2. Konsole gehört dann nicht dem Prozess der loggt.
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function AllocConsole() As Boolean
End Function
<DllImport("kernel32", SetLastError:=True)> _
Private Shared Function FreeConsole() As Boolean
End Function
Muss muss ich dieses FreeConsole() verwenden? Und warum geht jetzt plötzlich Console.WriteLine? Warum weiß das Programm, dass alles auf diese AllocConsole() Konsole da ausgegeben werden soll?
Damit importierst du Funktionen aus der kernel32.dll, das braucht C# nunmal wenn es um WinAPI Funktionen geht, da diese nicht im Framework vorhanden sind.
Console.WriteLine geht immer, du siehst halt nur nichts wenn keine Konsole da ist. (Wer hätte es gedacht )
Das Programm weiß nicht, das es alles auf der Konsole ausgeben soll, es schreibt einfach in irgendeinen Datenstrom (weiß ich jetzt auch nicht genauer, sorry) und die Konsole liest den und gibt den wieder. Wo keine Konsole, da keine Ausgabe.
Quote:
Originally Posted by omitma
Das es nur eine Konsole geben kann ist eigentlich logisch.
Wieso? Ich finde das nicht logisch, schließlich kann es auch mehrere Fenster zu einem Prozess geben. Sag's mir wenn ich das Offensichtliche übersehen habe.
Es gibt nur ein standart Output und ein standart Input (stdout, stdin). Heißt printf/cout schreiben nur zu dem einen Stream. Es könnte bestimmt auch möglich sein das irgendwie anders zu machen, dass man 2 Konsolen nutzen kann. Aber dann müsste Microsoft das implementieren und die entsprechend Funktionen bereitstellen.
Es gibt nur ein standart Output und ein standart Input (stdout, stdin). Heißt printf/cout schreiben nur zu dem einen Stream. Es könnte bestimmt auch möglich sein das irgendwie anders zu machen, dass man 2 Konsolen nutzen kann. Aber dann müsste Microsoft das implementieren und die entsprechend Funktionen bereitstellen.
Macht ja Sinn aber wieso sollte es dann nur eine Konsole geben können? Schließlich kann der Stream ja auch von mehreren Konsolen gelesen werden, es würde eben nur immer das selbe in der Konsole stehen.
[C#] Variable aus Form 2 in Form 3 11/27/2013 - .NET Languages - 9 Replies Hallo, ich bin gerade dabei ein kleinen Bot zu schreiben.. Dabei habe ich eine Form 1 wo mein Browser ( also das Spiel ) drauf läuft. Nun habe ich einen Button, der eine 2 Form öffnet wo man seine Logindaten eingeben kann. Diese daten sollen in string´s gespeichert werden und dann an die Form 3 ( die sich nachdem man Save auf der Form2 gedrückt hat ) gesendet werden und dort dann wieder ausgegeben werden. Doch leider bekomme ich das einfach nicht hin. In google stehen viele verschiedene sachen,...
Neuer Monitor für PC und Konsole, aber bei Konsole kein Sound! 01/08/2012 - Technical Support - 2 Replies Hey Leute!
Ich habe zum meinem 18. einen neuen Monitor bekommen, den S2330mx von DELL.
Nun ja ich bin ziemlich zufrieden mit dem Bildschirm.
Mein Problem ist halt jetzt, das im Bildschirm keine Lautsprecher eingebaut sind.
Und ein Audio Eingang ist auch keiner. Alles am PC läuft gut, aber Sound bei meiner Playstation 3 ist halt nicht da und ich wollte fragen ob man das irgendwie machen könnte, das ich auch Sound habe, wenn ich Playstation spiele.
Boxen habe ich auch von DELL und die...
Druid Cat Form -> FireLands Cat Form 08/01/2011 - World of Warcraft - 2 Replies Hallo Leute,
hat jemand die Möglichkeiten mir eine Tauren Katze zur Firelands Katze zu swappen - sofern dies in 4.2 FIRELANDS noch möglich ist.
Wobei die Vergangenheit uns gelehrt hat, das es immer Mittel und Wege gibt. (:
http://manaflask.com/images/galleries/scaled_1307 971939_flamecat.jpg
LG
Windkirsche