Перейти к содержанию

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


Гость mkOne

Рекомендуемые сообщения

Есть проблемка: захват окна 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);

 

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

Привет! 

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

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

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

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

 

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

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

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

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

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.