Autor Beitrag
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 07.08.10 12:29 
Moin,
so sinnlos sich das möglicherweise auch anhört, ich möchte gerne die Position der Console ermitteln.
Der Sinn dahinter ist, dass ich meine Console um eine kleine Windows Form erweitern möchte.
Dazu hab ich in meiner Consolenanwendung eine winForm hinzugefügt. Die Aufgaben die die winForm hat erfüllt sie auch, jedoch möchte ich sie an die Console "anheften".
Über Befehle in der Console kann ich ausserdem steuern ob die winForm sichtbar ist oder nicht, das funktioniert auch schonmal. Ich hatte jetzt die Idee, durchgehen die Position der Console von der winForm auslesen zu lassen und sich dann demnach zu verschieben.
die Position der winForm kann ich ermitteln, aber ich weiß leider nicht wie ich die Position der Console ermitteln kann.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.08.10 13:07 
Ob es dafür auch direkt in .NET etwas gibt weiß ich nicht, aber es geht auf jeden Fall mit GetConsoleWindow und dann entweder GetWindowInfo oder GetWindowPlacement.
Ccenter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 07.08.10 13:14 
Hab etwas recherchiert und konnte dann daraus das entwerfen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
        const int SWP_NOSIZE = 0x0001;
        [DllImport("kernel32.dll", ExactSpelling = true)]
        private static extern IntPtr GetConsoleWindow();

        private static IntPtr MyConsole = GetConsoleWindow();

        [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
        public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

        public static Point mainPos;

        private void Form1_Move(object sender, EventArgs e)
        {
            mainPos = this.Location;


            int xpos = Form1.mainPos.X + 300;
            int ypos = Form1.mainPos.Y;
            SetWindowPos(MyConsole, 0, xpos, ypos, 00, SWP_NOSIZE);
        }


Die Form ist 300px breit, deshalb "+300".
In der Main-Methode der Console muss man dann nur noch das aufrufen:
ausblenden C#-Quelltext
1:
2:
Form1 frm = new Form1();
    frm.ShowDialog();


Nun habe ich nur noch ein ein Problem. Sobald ich die Form versuche zu bewegen, bewegt sie sich nur ein paar Millimeter. Die Console zieht nach und ich muss die Form mit der Maus los lassen, da sie sich nicht weiterbewegt. Erst dann kann ich wieder einen neuen Versuch starten. Dann aber wieder nur ein paar Millimeter...