C# | Winforms не растягивается под конкретное окно

Начинающий
Статус
Оффлайн
Регистрация
29 Дек 2016
Сообщения
105
Реакции[?]
19
Поинты[?]
2K
Вообщем, сразу скажу, что изучаю программирование относительно не давно. Пишу хак (для себя, для опыта) на c# для quake 3 arena, а конкретно CPMA. Перейдем к проблеме. Все хорошо компилируется. Указываю название окна игры (CNQ3), на которое при нажатии на чекбокс будет наложено поверх прозрачное окно, в котором буду в будущем ESP боксы и прочая информация об игроках. Вот тут я столкнулся с такой проблемой. На обычном ванильном квейке все работает хорошо:
valid.png
А вот как выходит на том квейке, который мне нужен:
INVALID.png
Мне нужно, чтобы на втором окне форма разворачивалась на всю площадь игры. А она просто тусуется в верхнем правом углу окна. Возможно дело в названии окна? Окно называется: CNQ3 и в коде указанно точно так-же. Понятия не имею в чем может быть проблема. Кусок кода снизу. Пожалуйста помогите.
C#:
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.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace q3_hack
{
    public partial class FormOverlay : Form
    {
        RECT rect;
        public const string WINDOW_NAME = "CNQ3";
        IntPtr handle = FindWindow(null, WINDOW_NAME);


        public struct RECT
        {
            public int left, top, right, bottom;
        }


        Graphics g;
        Pen myPen = new Pen(Color.Red);


        [DllImport("user32.dll")]
        static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

        [DllImport("user32.dll", SetLastError = true)]
        static extern int GetWindowLong(IntPtr hWnd, int nIndex);

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);

        public FormOverlay()
        {
            InitializeComponent();
        }

        private void FormOverlay_Load(object sender, EventArgs e)
        {
            this.BackColor = Color.Wheat;
            this.TransparencyKey = Color.Wheat;
            this.TopMost = true;
            //this.FormBorderStyle = FormBorderStyle.None; // Скрывает визуально окно оверлея.

            int initialStyle = GetWindowLong(this.Handle, -20);
            SetWindowLong(this.Handle, -20, initialStyle | 0x80000 | 0x20);


            GetWindowRect(handle, out rect);
            this.Size = new Size(rect.right - rect.left, rect.bottom - rect.top);
            this.Top = rect.top;
            this.Left = rect.left;

        }

        private void FormOverlay_Paint(object sender, PaintEventArgs e)
        {
            g = e.Graphics;
            g.DrawRectangle(myPen, 50, 50, 60, 60);
        }
    }
}
Вот название окна с квейком:
CNQ3.png
 
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
C#:
bool ChangePosition(IntPtr  hWnd)
{
    RECT WindowRect;
    if (!GetWindowRect(hWnd, out WindowRect))
        return false;
    this.Location = new Point(WindowRect.left, WindowRect.top);
    this.Size = new Size(WindowRect.right - WindowRect.left,WindowRect.bottom - WindowRect.top );
    return true;
}
примерно так автоматом подстраивать под размер и позицию формы, писал на коленке
 
Сверху Снизу