-
Автор темы
- #1
Вообщем, сразу скажу, что изучаю программирование относительно не давно. Пишу хак (для себя, для опыта) на c# для quake 3 arena, а конкретно CPMA. Перейдем к проблеме. Все хорошо компилируется. Указываю название окна игры (CNQ3), на которое при нажатии на чекбокс будет наложено поверх прозрачное окно, в котором буду в будущем ESP боксы и прочая информация об игроках. Вот тут я столкнулся с такой проблемой. На обычном ванильном квейке все работает хорошо:
А вот как выходит на том квейке, который мне нужен:
Мне нужно, чтобы на втором окне форма разворачивалась на всю площадь игры. А она просто тусуется в верхнем правом углу окна. Возможно дело в названии окна? Окно называется: CNQ3 и в коде указанно точно так-же. Понятия не имею в чем может быть проблема. Кусок кода снизу. Пожалуйста помогите.
Вот название окна с квейком:
А вот как выходит на том квейке, который мне нужен:
Мне нужно, чтобы на втором окне форма разворачивалась на всю площадь игры. А она просто тусуется в верхнем правом углу окна. Возможно дело в названии окна? Окно называется: 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);
}
}
}