Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› патч и wsprintf
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 27 марта 2008 03:13
· Личное сообщение · #1

Решил тут написать патч в консольном режиме в делфи.
Захотелось изменить цвет букв.
Нашел, что это делается функцией
function SetConsoleTextAttribute(hConsoleOutput: THandle; wAttributes: Word): BOOL; stdcall;

Но нужно как-то получить хендл окна.
По-простому не получается.

SetConsoleTitle(PChar('Patch'));
h := FindWindow(nil, PChar('Patch'));

Нашел пример кода на с++.

HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Размер буфера для заголовка консольного окна.
HWND hwndFound; // Это то, что будет возвращено.
char pszNewWindowTitle[MY_BUFSIZE]; // Уникальный заголовок окна.
char pszOldWindowTitle[MY_BUFSIZE]; // Изначальный заголовок окна.
// Выбираем текущий заголовок окна.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Формируем "уникальный" NewWindowTitle.
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Изменяем текущий заголовок окна.
SetConsoleTitle(pszNewWindowTitle);
// даём время заголовку, чтобы измениться.
Sleep(40);
// Ищем NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Восстанавливаем изначальный заголовок окна.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}

Но проблема оказалась в функции wsprintf. Ничего не получается с ней.
И даже так не получается.
wsprintf(pszNewWindowTitle,'%d/%d', Pchar (GetTickCount()) );

Может кто сталкивался с проблемой цветного шрифта и этой функции?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 марта 2008 03:25 · Поправил: s0larian
· Личное сообщение · #2

(w)sprintf() форматирует в буфер. Аргументов после формата должно быть столько же сколько format specifiers - то что с %. Второй арг - строка, в кавычках.

sprintf(buffer, "%u", GetTickCount());




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 марта 2008 03:34
· Личное сообщение · #3

GetConsoleWindow

The GetConsoleWindow function retrieves the window handle used by the console associated with the calling process.


HWND GetConsoleWindow(void);

Parameters
This function has no parameters.
Return Values
The return value is a handle to the window used by the console associated with the calling process or NULL if there is no such associated console.




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 27 марта 2008 10:20
· Личное сообщение · #4

s0larian
...............
function GetConsoleWindow: DWORD; external 'kernel32.dll';
................

h := GetConsoleWindow;
SetConsoleTextAttribute (h, FBACKGROUND_RED or BACKGROUND_GREEN or BACKGROUND_BLUE );
writeln('Rext');
..
Должно быть чёрным на белом, но не выдает так.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 27 марта 2008 10:21
· Личное сообщение · #5

Mavlyudov вот посмотри когда то писал консольную тулзу на делфи и раскрашивал, может поможет чем.

6ed5_27.03.2008_CRACKLAB.rU.tgz - console.rar

-----
Yann Tiersen best and do not fuck





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 27 марта 2008 10:44
· Личное сообщение · #6

PE_Kill
Спасибо.
Фишка оказалась в этом
h := GetStdHandle(STD_OUTPUT_HANDLE);


 eXeL@B —› Программирование —› патч и wsprintf
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати