mkOne

C# :: CS:GO :: Рисование поверх игры

6 сообщений в этой теме

Есть проблемка: захват окна cs:go для рисования в нем и определение его размеров. 

Скрытый текст

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
            public int Left;        // x коорд левого верхнего угла
            public int Top;         // y коорд левого верхнего угла
            public int Right;       // x коорд правого нижнего угла
            public int Bottom;      // y коорд правого нижнего угла
}

[DllImport("user32.dll", SetLastError = true)]
private static extern bool GetWindowRect(IntPtr hWnd, out RECT rect);

 

На выходе функция GetWindowRect() практически всегда возвращает RECT с параметрами 0 0 1 1 или 0 0 0 0 и т.д. А если и не нули, то всегда разные значения (окно с cs:go всё время в одном и том же положении и разрешении). Пробовал и в оконном режиме, и в полноэкранном - одно и то же. Сама функция получения handle выглядит примерно так:

Скрытый текст

csgo = Process.GetProcessesByName("csgo").FirstOrDefault();
if (csgo != null)
{
	p_id = csgo.Id;
	Data.p_handle = (uint)OpenProcess(0x1F0FFF, false, p_id);
  	Data.w_handle = (uint)GetWindowRect(p_handle, Drawing.rect);
	ProcessModuleCollection csgoModules = csgo.Modules;

	for (int i = 0; i < csgoModules.Count; i++)
	{
		if (csgoModules[i].ModuleName == "client.dll")
		{
			client_dll = (uint)csgoModules[i].BaseAddress;
			return true;
		}
		return false;
	}
}
else
{
	MAINFORM.Mb("Error: cant find 'csgo'");
	return false;
}

 

Не знаю, что делать. Да и с функцией GetDC() (для выбора приложения, в котором будем "рисовать") куча проблем. Большая удача, если раза с пятого вернет значение отличное от нуля.

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

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет! 

GetWindowRect принимает handle окна, а не процесса. Отныне твои лучшие друзья - это EnumWindows и GetWindowThreadProcessId. Первая возвращает тебе список идентификаторов всех окон процесса, вторая - pID, к которому окно подцеплено. pID ты уже знаешь через свой код.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вышел налить чай - уже ответили. Вот это скорость! Спасибо тебе за уроки, keng, благодаря ним разобрался с принципом взлома игр.

2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да пустяки, рад стараться. Ты лучше благодари, когда у тебя проблема с кодом решится. :D

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А какой смысл рисовать средствами GDI ? Мерцать же будет

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

1 минуту назад, ШАРИК сказал:

А какой смысл рисовать средствами GDI ? Мерцать же будет

Лучше сначала смастерить колесо, а потом уже делать велосипед

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас