GDI Overlay - наложение элементов, форм поверх других программ.
Данный небольшой пример может быть использован для реализации вывод fps на экран, разных данных, отрисовки прицелов.
Код:
Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsTest2
{
public partial class Form1 : Form
{
FormOverlay f1 = new FormOverlay();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
f1.Show();
}
}
}
FromOverlay.cs:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsFormsTest2
{
public partial class FormOverlay : Form
{
[DllImport("User32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
[DllImport("User32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
public static Graphics g;
public static Pen pen = new Pen(Color.Red);
public FormOverlay()
{
InitializeComponent();
}
private void FormOverlay_Load(object sender, EventArgs e)
{
this.TopMost = true; // Форма всегда будет поверх других элементов и программ на экране
this.BackColor = Color.Wheat; // Цвет формы
this.TransparencyKey = Color.Wheat; // Делаем выбранный вет формы прюозрачным
this.FormBorderStyle = FormBorderStyle.None; // Бе зграниц
int initialStyle = GetWindowLong(this.Handle, -20);
SetWindowLong(this.Handle, -20, initialStyle | 0x80000 | 0x20);
this.Size = new Size(1280, 720); // Устанавливаем размер формы
// Размер формы должен быть равен разрешению в игре
this.Top = 0; // Форма прижата к верхнему углу
this.Left = 0; // Форма прижата к левому углу
this.DoubleBuffered = true; // Предотвращение мерцания
}
private void FormOverlay_Paint(object sender, PaintEventArgs e)
{
int x = 1280 / 2 - 20; // Определяем координаты центра экрана для отрисовки прицела
int y = 720 / 2;
Point p1 = new Point(x-10, y-30);
Point p2 = new Point(x-10 + 40, y-30);
Point p3 = new Point(x - 10 + 20, y + 20-30);
Point p4 = new Point(x - 10 + 20, y - 20-30);
g = e.Graphics;
g.DrawLine(pen, p1, p2); // Горизонтальная линия прицела
g.DrawLine(pen, p3, p4); // Вертикальная линия прицела
}
}
}
Разные материалы по программированию, взломе и защите игр, читам можно скачать тут: [Ссылки могут видеть только зарегистрированные пользователи. ] - в том числе и данный пример.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ] - материалы по программированию, информационной безопасности, взлому и защите игр