| 

.NET C# Java Javascript Exception

1
Anders als es der Name suggeriert, kann man mit der Methode SetWindowPosition des Namespace System.Console kein Konsolenfenser frei positionieren. Wie kann ich ein Konsolenfenster sonst auf dem Bildschrim zentrieren oder beliebig positionieren lassen?
News:
24.06.2012
1 Antwort
1
Soweit ich gelesen habe geht es anscheinend nicht über die .Net Boardmittel.
Ich habe mich eben hingesetzt und über P/Invoke eine Möglichkeit geschaffen, die "Fensterposition" einer Konsolenanwendung zu ändern:
private static void SetConsolePos(int x, int y)
{
IntPtr tmpConsoleWindowPtr = GetConsoleWindow();
if(tmpConsoleWindowPtr != IntPtr.Zero)
{
int oriConsoleWidth = Console.WindowWidth;
int oriConsoleHeight = Console.WindowHeight;

SetWindowPos(tmpConsoleWindowPtr, (new IntPtr(-2)), x, y, 0, 0, 0x0040);

Console.WindowWidth = oriConsoleWidth;
Console.WindowHeight = oriConsoleHeight;
}
}
Der 2. Parameter von SetWindowPos() (new IntPtr(-2)) gibt an, dass das Fenster nicht TopMost geschaltet werden soll.
Der 7. Parameter (0x0040) gibt an, dass das Fenster nach dem Neu-Positionieren angezeigt werden soll (den Fokus bekommen soll?)
Weitere Informationen dazu auf pinvoke.net in den Beschreibungen zur SetWindowPos-Methode.

Die P/Invoke-Methoden
GetConsoleWindow()
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
SetWindowPos()
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);


//EDIT:
Was das Zentrieren angeht:
Du kannst dir über System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size die Größe (Auflösung) des Primärmonitors holen und damit arbeiten (oder einen anderen Monitor ebenfalls über die Screen-Klasse).

Ich hoffe, ich konnte helfen...

so far
Karill Endusa
25.06.2012
Karill Endusa 1,5k 1 9

Stelle deine .net-Frage jetzt!