VDV Опубликовано 21 апреля, 2013 Поделиться Опубликовано 21 апреля, 2013 Не судите строго изучаю directx 3 недели, с чужих исходов естественно.Собственно задача:1. Прочитать память из другой программы , определенный адрес(адрес с моими патронами)2. Вывести значение этого адреса в моё directх приложение(пример с фрапсом)Смысл в том , чтобы постоянно рисовать значение адреса с патронами . Как фрапс рисует значение ФПС.Начну с исходного кода , думаю так будет понятнее:1.Получаем хендл на другой процесс(код не нужен думаю)2.Читаем память другого процесса,возвращаем значение ввиде байт(использовал код "Кодера")byte* ReadMemory (DWORD address , DWORD size , DWORD pID){ static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes;}3.Создаем буфферКод:WCHAR buffer [32];4. Функция вывода текста(основная функция с аргументами,если нужен весь код я сброшу)void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font){ RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);}5. Вывод текста(правильно или нет судите сами , скорее всего нет)void TestThread(){ PrintText("вот тут нужно вывести значение адреса как это сделать?",10, 150, SKYBLUE, dMenu.pFont);}6. Выводится только текст L"%f" - не катит , в основной функции замена аргуметовvoid PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font){ RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);}наvoid PrintText(buffer, int x, int y, D3DCOLOR col, ID3DXFont *font){ RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, buffer, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);}не катит, как решить задачу? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 апреля, 2013 Поделиться Опубликовано 21 апреля, 2013 текст нужно еще отформатировать с помощью wsprintf, передав ей необходимое значение. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 21 апреля, 2013 Автор Поделиться Опубликовано 21 апреля, 2013 текст нужно еще отформатировать с помощью wsprintf, передав ей необходимое значение.если вам не трудно помогите с исходным кодом - у меня не получается форматировать текст и задать ему значение буфераНужно задать дополнительные параметры pString ??? что-то типа Pstring(buffer , pID , .....) или как?void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font){ RECT FontRect = { x, y, x+500, y+30 }; font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);} Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 апреля, 2013 Поделиться Опубликовано 21 апреля, 2013 http://bit.ly/17PXobM Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 21 апреля, 2013 Поделиться Опубликовано 21 апреля, 2013 void PrintText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString, ...){ char buf[1024]; RECT FontRect = { x, y, x+500, y+30 }; va_list vaList; va_start(vaList, pString); vsprintf_s(buf, pString, vaList); va_end(vaList); pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);}........PrintText(x, y, color, pFont, "0x%X", pFont); Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 21 апреля, 2013 Автор Поделиться Опубликовано 21 апреля, 2013 Друг не ругайся на меня сильно, но я не пойму ход мыслей твоих , так еще не совсем опытен в с++ , прошу отнестись адыкватно и объяснить как вывести значение адреса в формате флоат, не всего буфера а только нужного мне адреса , я запутался совсем.void PrintText(int x(позиция Х), int y(позиция У), D3DCOLOR col(цвет), LPD3DXFONT pFont(текст), const char *pString(сама строка,зачем константное значение не пойму ), ...){ char buf[1024];(выделяем буффер) RECT FontRect = { x, y, x+500, y+30 };(отрисовка) va_list vaList;(не пойму для чего это - скорее всего для передачи необходимого значения строке) va_start(vaList, pString);(аргументы : сам ва-лист и строка) vsprintf_s(buf, pString, vaList);(настройки строки получается, что мы выводим: буфер , строка ) va_end(vaList);(тут ясно) pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); (что мы рисуем : ну тут главное буфер)}........PrintText(x(позиция Х), y(позиция У), color(цвет), pFont(понятно), "0x(текст)%X(вот тут получается, выводит весь буфер, в формате целого числа, а как вывести не весь буфер а адрес нужный мне)");читаю память я способом Кодераbyte* ReadMemory (DWORD address , DWORD size , DWORD pID){ static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes;}может нужно как ни буть приравнять char buf = я запутался... Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 Если не ленится и поискать, можно найти ответы на все ваши вопросы. "0x(текст)%X(вот тут получается, выводит весь буфер, в формате целого числа, а как вывести не весь буфер а адрес нужный мне)"PrintText(x, y, color, pFont, "Font = 0x%X", pFont); //Выводит адрес "pFont"-а в hex виде.. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 22 апреля, 2013 Автор Поделиться Опубликовано 22 апреля, 2013 Если не ленится и поискать, можно найти ответы на все ваши вопросы. PrintText(x, y, color, pFont, "Font = 0x%X", pFont); //Выводит адрес "pFont"-а в hex виде..Друг или ты меня не поймешь или я тупой сильно (скорее всего), вот смотри что у меня получается , поправь , если я не правильно что-то закомментирую.void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 ) - параметры функции вывода текста в моё меню:" х, у, цвет, вывод шрифта по-моему , сама строка в ввиде чар"{ char buf[1024]; - буффер DWORD pID = GetProcessByName("Game.exe"); я получил хендл на нужный мне процесс(это не полный код) RECT FontRect = { x, y, x+500, y+30 }; - не помню для чего это va_list vaList; va_start(vaList, pString2); vsprintf_s(buf, pString2, vaList); va_end(vaList);вот это я вообще не пойму зачем , объясни пожалуйста pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); - рисование текста , аргументы: нул, буффер , автозаполнение(непомню чего), ссылка на FontRect , не знаю что это , цвет.}затем мы водим текст с заданными параметрамиPrintText2(10, 150, SKYBLUE,dMenu.pFont, " патроны %X"); - х , у , цвет , вот тут не понятно , где "патроны" выводит текст в формате чар, где "%Х" выводит весь буфер в формате хекс, а мне необходимо , чтобы где по-колхозному говоря "%Х" постоянно выводило значение моего адреса (0х1652587) патронЧитаю чужую программу , получаем ammo(значение адреса патронов)byte* ReadMemory (DWORD address , DWORD size , DWORD pID){ static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes;}DWORD ammo = 0;byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID);p.s. почему я не могу тебя отблагодарить - пишет лимит исчерпан,хотя я не кому "спасибо" не ставил Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 Из MSDN va_list vaList; //Variable argument list va_start(vaList, pString2); //Initialize variable arguments vsprintf_s(buf, pString2, vaList); //Write formatted output using a pointer to the list of arguments va_end(vaList); //Reset variable arguments.PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Адрес патронов = 0x%X\nКоличество патронов = %d", ammoAddress/*Буффер 1*/, ammoValue/*Буффер 2*/); Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 22 апреля, 2013 Автор Поделиться Опубликовано 22 апреля, 2013 Из MSDN va_list vaList; //Variable argument list va_start(vaList, pString2); //Initialize variable arguments vsprintf_s(buf, pString2, vaList); //Write formatted output using a pointer to the list of arguments va_end(vaList); //Reset variable arguments.PrintText2(10, 150, SKYBLUE,dMenu.pFont, "Адрес патронов = 0x%X\nКоличество патронов = %d", ammoAddress/*Буффер 1*/, ammoValue/*Буффер 2*/);Правильно я понимаю? в %Х будет отображаться буфер 1 в хексе , а в %d будет отображаться буфер 2 в целых числах?прочитал адрес и его значение и всунул во второй буффер (ammoBytes - значения адреса патронов) тут все нормально , но в первый буффер я вообще ничего не могу всунуть , постоянно пишет много аргументов (to many arguments in function call) , что я неправильно делаю?byte* ReadMemory (DWORD address , DWORD size , DWORD pID){ static byte* bytes = new byte [size]; HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS , false , pID); ReadProcessMemory(hProcess , (void*)address , bytes , size , NULL); CloseHandle (hProcess); return bytes;}DWORD ammo = 0;byte* ammoBytes = ReadMemory (0x01668084 , sizeof(DWORD) , pID); Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 Правильно я понимаю? в %Х будет отображаться буфер 1 в хексе , а в %d будет отображаться буфер 2 в целых числах?Правильно...прочитал адрес и его значение и всунул во второй буффер (ammoBytes - значения адреса патронов) тут все нормально , но в первый буффер я вообще ничего не могу всунуть , постоянно пишет много аргументов (to many arguments in function call) , что я неправильно делаю?Твоя ошибка - "toо many arguments in function call")) Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 22 апреля, 2013 Автор Поделиться Опубликовано 22 апреля, 2013 Правильно...Твоя ошибка - "toо many arguments in function call"))это я понял - я сокращал колличество аргументов и все равно такая же проблемаPrintText2(10, 150, SKYBLUE,dMenu.pFont, "Количество патронов = %d",ammoBytes); Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 это я понял - я сокращал колличество аргументов и все равно такая же проблемаПроверь аргументы функции PrintText2.. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 22 апреля, 2013 Автор Поделиться Опубликовано 22 апреля, 2013 Проверь аргументы функции PrintText2..void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2 ) - позиция х,у,цвет,шрифт, и строка с символами чар - не пойму на что ты намекаешь друг, добавлять еще аргумент не получается, добавить аргумент в va_list тоже , голова кругом идет ... Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 void PrintText2(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 22 апреля, 2013 Автор Поделиться Опубликовано 22 апреля, 2013 спасибо огромное все работает , осталось уладить пару нюансовp.s. поставить плюс так и не могу почему-то Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 апреля, 2013 Поделиться Опубликовано 22 апреля, 2013 Пожалуйста. PS: Плюсы могут ставить только админы/модеры. Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 23 апреля, 2013 Автор Поделиться Опубликовано 23 апреля, 2013 Необходимо подсчитать и вывести на экран FPS в моём directx меню, помогите с исходным кодом разобратьсянашел какой-никой исходник, работает он конечно некорректно,помогите его доработать: DWORD FrameCnt; // кол-во кадров float TimeElapsed; // промежуток времени float FPS; // наш фпс float oldTime; float newTime; float deltatime; FrameCnt++; // c каждым кадром увеличивается на 1, т.е. это кол-во кадров кот. мы разделим на промежуток времени newTime = GetTickCount(); // записываем в ньютайм время после всех выполненных операциях deltatime = newTime - oldTime; // узнаем сколько времени проходит от начала до конца TimeElapsed += deltatime; // и прибавляем эту разницу к таймэлапседу if(TimeElapsed >= 500.0) // если в таймэлапседе накопилось 0.5 сек, то { FPS = 1000*(float)FrameCnt / TimeElapsed; // делим кол-во кадров прошедшее за полсекунды на таймэлапсед(равный примерно 0.5 сек) TimeElapsed = 0.0f; // обнуляем таймэлапсед, для следующего подсчета FrameCnt = 0; // и обнуляем кол-во кадров }p.s. украл с киберфорума Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 10 июля, 2013 Автор Поделиться Опубликовано 10 июля, 2013 тему можно закрыть разобрался уже давно в этом . Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 июля, 2013 Поделиться Опубликовано 10 июля, 2013 Разобрался - расскажи другим, возможно, на форуме появятся люди, у которых возникнет такая же проблема. И да, хороший рассказ подразумевает плюс в репутацию, и, возможно, не только... Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 10 июля, 2013 Автор Поделиться Опубликовано 10 июля, 2013 Разобрался - расскажи другим, возможно, на форуме появятся люди, у которых возникнет такая же проблема. И да, хороший рассказ подразумевает плюс в репутацию, и, возможно, не только...а скайп? А по делу вот что:void PrintText(int x, int y, D3DCOLOR col, LPD3DXFONT pFont, const char *pString2, ... ) // создаем функцию,которая ничего не возвращает типа "void" , рассмотрим переменныеint x , int y - координаты,то есть расположения текста на экране D3DCOLOR col - переменная col - сдесь мы устанавливаем цвет текста,это уже отдельная тема , требующая более подробного и углубленного описанияLPD3DXFONT pFont - где мы рисуем , LPD3DXFONT , это уже отдельная тема , требующая более подробного и углубленного описанияconst char *pString2 - что мы выводим на экран , какую информацию и в каком формате{ char buf[1024]; - создаем буфер , чтобы наверняка уже размером 1024 байт RECT FontRect = { x, y, x+800, y+50 }; - это область применеия текста , то есть за границами указанных параметров текст отображаться не будет ,RECT - это уже отдельная тема , требующая более подробного и углубленного описания======================================================================================================================================собственно переходим к функции которая и позволяет нам выводить информацию в любом формате , будь то адрес или значение адреса va_list vaList; - создаем аргумент для va_list va_start(vaList, pString2); инициализируем наш аргумент в переменной "pString2" vsprintf_s(buf, pString2, vaList); - о функции vsprintf_s нужно говорить отдельно , в кратце она необходима для вывода информации на экран какие аргументы она принимает : buf - наш буфер , куда мы кладем то что хотим вывести на экран va_end(vaList); pFont->DrawText( NULL, buf, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col); - это параметры вывода текста,нужно разбирать отдельно} Ссылка на комментарий Поделиться на другие сайты Поделиться
VDV Опубликовано 15 июля, 2013 Автор Поделиться Опубликовано 15 июля, 2013 close please Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения