Перехват консоли srcds.exe

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#1 Сообщение 18.07.2008, 12:33

хочу перехватить In Out консоли на Дельфи.
ето все что у меня получилось вытянуть :%)
сама консоль выходит у меня с ошибкой

Код: Выделить всё

Console initialized.
Game.dll loaded for "Team Fortress"
Particles: Missing 'particles/error.pcf'
maxplayers set to 24
Network: IP 192.168.0.2, mode MP, dedicated Yes, ports 27015 SV / 27005 CL
CTextConsoleWin32::GetLine: !GetNumberOfConsoleInputEvents
думаю, я все таки не правильно что то делаю :D

очень нужно для завоевания мира
Вложения
console.jpg
console.jpg (7.63 КБ) 4673 просмотра
console.jpg
console.jpg (7.63 КБ) 4673 просмотра
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#2 Сообщение 18.07.2008, 14:36

Раз на Дельфи, то тебе нужен Delphiworld. На крайняк - заюзай поиск на delphimasters.ru.
Я нашел три рабочих примера в ДельфиВорлде и вполне успешно их юзаю. Выложить не могу, тк нахожусь в 100км от дома, где это все ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#3 Сообщение 18.07.2008, 16:33

нашол рабочий вариант (ток он без своего потока)
думаю и через ето падает консоль сервера.
ищу еще более работо способный вариант
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Dark Daskin
Сержант
Сержант
Сообщения: 71
Зарегистрирован: 07.12.2007
Откуда: Санкт-Петербург
Контактная информация:

#4 Сообщение 23.09.2008, 16:40

Сегодня тоже столкнулся с этой проблемой. Если кто-то нашёл решение, опишите, я всё перегуглил, но безрезультатно. Пишу на C#, но пойму любой ответ.
╔════════════════════════════╗
║  Скачать все GCF: BitTorrent | HTTP
╚════════════════════════════╝
H4sICCl+V0gAAAALMOEyM1YwMeL6wcfwgIFFrlZBgJGBQV7RUXFO4oU+lQWOSkETDTpVFtQqX/po0y+v4Kwk1GjUyaLorNiTcKcPqJ4BAhhx0uxQmgNCW5yzPPOCmdNQRdOlyYOh01PlpUufH3N/paqmyyRPlk5Hi2cWfX7OnYYKINUODIwKMHMI0IxqLDJPXU4xMirKK0110WJkfK6yaGrOE0ZGTSAdCuSry8s8dnkFVM/C0MjAAKbbcJrnAKENFRgZJNUlLxgBaVVNlQksQFox02YOB4i/UmGSMEjefsYcZSDNINDAwKAA1w8AJT7WI1kBAAA=
Изображение

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#5 Сообщение 23.09.2008, 16:52

Я тоже не нашол =(
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Аватара пользователя
andreil
Разработчик
Разработчик
Сообщения: 781
Зарегистрирован: 14.08.2006
Откуда: Светлогорск, Беларусь
Поблагодарили: 2 раза
Контактная информация:

#6 Сообщение 23.09.2008, 20:06

Ладно. На выходных (а может и на неделе) буду дома, поэксперементирую ;)
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).

Letov
Нович0к
Нович0к
Сообщения: 1
Зарегистрирован: 09.11.2008

#7 Сообщение 09.11.2008, 20:15

drkb - очень полезная вещь (http://www.drkb.ru/) Там много хорошего материала по разным темам, в том числе и по данной.
Hужно использовать пайпы (CreatePipe), и работать с ними как с обычным файлом.

Код: Выделить всё

 
const
H_IN_READ = 1;
H_IN_WRITE = 2;
H_OUT_READ = 3;
H_OUT_WRITE = 4;
H_ERR_READ = 5;
H_ERR_WRITE = 6;

type
TPipeHandles = array [1..6] of THandle;
var
hPipes: TPipeHandles;
ProcessInfo: TProcessInformation; 

(************CREATE HIDDEN CONSOLE PROCESS************)
function CreateHiddenConsoleProcess(szChildName: string;
        ProcPriority: DWORD; ThreadPriority: integer): Boolean;
label
error;
var
fCreated: Boolean;
si: TStartupInfo;
sa: TSecurityAttributes;
begin
// Initialize handles
hPipes[ H_IN_READ ] := INVALID_HANDLE_VALUE;
hPipes[ H_IN_WRITE ] := INVALID_HANDLE_VALUE;
hPipes[ H_OUT_READ ] := INVALID_HANDLE_VALUE;
hPipes[ H_OUT_WRITE ] := INVALID_HANDLE_VALUE;
hPipes[ H_ERR_READ ] := INVALID_HANDLE_VALUE;
hPipes[ H_ERR_WRITE ] := INVALID_HANDLE_VALUE;
ProcessInfo.hProcess := INVALID_HANDLE_VALUE;
ProcessInfo.hThread := INVALID_HANDLE_VALUE;
// Create pipes
// initialize security attributes for handle inheritance (for WinNT)
sa.nLength := sizeof(sa);
sa.bInheritHandle := TRUE;
sa.lpSecurityDescriptor := nil;
// create STDIN pipe
if not CreatePipe( hPipes[ H_IN_READ ], hPipes[ H_IN_WRITE ], @sa, 0 ) then
   goto error;
// create STDOUT pipe
if not CreatePipe( hPipes[ H_OUT_READ ], hPipes[ H_OUT_WRITE ], @sa, 0 ) then
   goto error;
// create STDERR pipe
if not CreatePipe( hPipes[ H_ERR_READ ], hPipes[ H_ERR_WRITE ], @sa, 0 ) then
   goto error;
// process startup information
ZeroMemory(Pointer(@si), sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
// assign "other" sides of pipes
si.hStdInput := hPipes[ H_IN_READ ];
si.hStdOutput := hPipes[ H_OUT_WRITE ];
si.hStdError := hPipes[ H_ERR_WRITE ];
// Create a child process
try
   fCreated := CreateProcess( nil, PChar(szChildName), nil, nil, True,
   ProcPriority, // CREATE_SUSPENDED,
   nil, nil, si, ProcessInfo );
except
   fCreated := False;
end; 

if not fCreated then
   goto error; 

Result := True;
CloseHandle(hPipes[ H_OUT_WRITE ]);
CloseHandle(hPipes[ H_ERR_WRITE ]);
// ResumeThread( pi.hThread );
SetThreadPriority(ProcessInfo.hThread, ThreadPriority);
CloseHandle( ProcessInfo.hThread );
Exit;
//-----------------------------------------------------
error:
   ClosePipes( hPipes );
   CloseHandle( ProcessInfo.hProcess );
   CloseHandle( ProcessInfo.hThread );
   ProcessInfo.hProcess := INVALID_HANDLE_VALUE;
   ProcessInfo.hThread := INVALID_HANDLE_VALUE;
   Result := False;
end; 
http://delphiworld.narod.ru/
DelphiWorld 6.0
©Drkb::02189

Aizek
Нович0к
Нович0к
Сообщения: 21
Зарегистрирован: 02.07.2008
Поблагодарили: 1 раз

#8 Сообщение 07.06.2009, 14:18

извиняюсь канешна что выкопал труп... но через пайпы консоль сервака не перехватить, потому что он использует ф-ции работы с консолью, которые вызвращают ошибку если консоль перенаправить на себя. нужно внедрять dll в контекст процесса и из нее уже получать данные из консоли. я в ближайшее время попытаюсь реализовать эту возможность.
хочу чтобы виндовый сервак обновлялся сам :)

Aizek
Нович0к
Нович0к
Сообщения: 21
Зарегистрирован: 02.07.2008
Поблагодарили: 1 раз

#9 Сообщение 17.07.2009, 11:45

Автоматическое обновление читать
Последний раз редактировалось Aizek 29.07.2009, 17:47, всего редактировалось 1 раз.

bober943
Сержант
Сержант
Сообщения: 38
Зарегистрирован: 22.10.2010

#10 Сообщение 13.04.2011, 23:03

Точно такая же проблема на CPP

bober943
Сержант
Сержант
Сообщения: 38
Зарегистрирован: 22.10.2010

#11 Сообщение 19.04.2011, 15:11

Что, нет никакого способа перехвата консоли на C++?

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#12 Сообщение 19.04.2011, 17:27

Читай последние четыре сообщения и гугли про внедрение dll.

Ответить Вложения 1