PDA

Просмотр полной версии : [Программа] GDI Overlay


mraklbrw
10.01.2018, 14:04
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); // Вертикальная линия прицела


}


}
}




Разные материалы по программированию, взломе и защите игр, читам можно скачать тут: [Ссылки могут видеть только зарегистрированные и активированные пользователи] - в том числе и данный пример.