Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

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

  • Автор темы Автор темы m1nz1k
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
29 Дек 2016
Сообщения
105
Реакции
19
Вообщем, сразу скажу, что изучаю программирование относительно не давно. Пишу хак (для себя, для опыта) на c# для quake 3 arena, а конкретно CPMA. Перейдем к проблеме. Все хорошо компилируется. Указываю название окна игры (CNQ3), на которое при нажатии на чекбокс будет наложено поверх прозрачное окно, в котором буду в будущем ESP боксы и прочая информация об игроках. Вот тут я столкнулся с такой проблемой. На обычном ванильном квейке все работает хорошо:
valid.png

А вот как выходит на том квейке, который мне нужен:
INVALID.png

Мне нужно, чтобы на втором окне форма разворачивалась на всю площадь игры. А она просто тусуется в верхнем правом углу окна. Возможно дело в названии окна? Окно называется: CNQ3 и в коде указанно точно так-же. Понятия не имею в чем может быть проблема. Кусок кода снизу. Пожалуйста помогите.
C#:
Expand Collapse Copy
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
 
C#:
Expand Collapse Copy
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;
}
примерно так автоматом подстраивать под размер и позицию формы, писал на коленке
 
Назад
Сверху Снизу