-
Автор темы
- #1
Как создать консоль из под dll и вывести в него текст
AllocConsole( );
freopen_s( reinterpret_cast< FILE** >( stdin ), "CONIN$", "r", stdin );
freopen_s( reinterpret_cast< FILE** >( stdout ), "CONOUT$", "w", stdout );
if ( AllocConsole( ) )
{
FILE* file{};
freopen_s( &file, "CONOUT$", "w+", stdout );
}
Наипростейший способ
C++:if ( AllocConsole( ) ) { FILE* file{}; freopen_s( &file, "CONOUT$", "w+", stdout ); }
AllocConsole();
freopen("CONOUT$", "w", stdout);
std::cout << "1337" << std::endl;
void CreateConsole()
{
if (!AllocConsole()) {
// Add some error handling here.
// You can call GetLastError() to get more info about the error.
return;
}
// std::cout, std::clog, std::cerr, std::cin
FILE* fDummy;
freopen_s(&fDummy, "CONOUT$", "w", stdout);
freopen_s(&fDummy, "CONOUT$", "w", stderr);
freopen_s(&fDummy, "CONIN$", "r", stdin);
std::cout.clear();
std::clog.clear();
std::cerr.clear();
std::cin.clear();
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateConsole();
printf_s("lol\n"); // test
printf_s("fixing imports\n"); // test
printf_s("fatal crack loaded\n"); // test
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
FreeConsole(); // clean up
break;
}
return TRUE;
}
Хорошо, но что ты будешь делать если у тебя AllocConsole вернёт не 1 а 0? И если чел не умеет юзать _CRT_SECURE_NO_WARNINGS ?C++:AllocConsole(); freopen("CONOUT$", "w", stdout); std::cout << "1337" << std::endl;
макросы уже надо учиться юзать? wide kekИ если чел не умеет юзать _CRT_SECURE_NO_WARNINGS ?
Встречал и таких людей которые не могли указать его в препроцессоре / написав дефайнмакросы уже надо учиться юзать? wide kek
Ну и че ебать? Если AllocConsole вернет false, то у процесса уже есть консоль. Это значит, что ты все так же сможешь перенаправить поток для записи и писать в уже открытую (не твоей dll) консоль. Че за тупой доеб?Хорошо, но что ты будешь делать если у тебя AllocConsole вернёт не 1 а 0?
void attach_console( const std::wstring_view& name ) {
AllocConsole( );
if ( !freopen_s( reinterpret_cast< FILE** >( stdin ), "CONIN$", "r", stdin ) ) {
throw std::runtime_error( "couldn't open stdin handle");
}
if ( !freopen_s( reinterpret_cast< FILE** >( stdout ), "CONOUT$", "w", stdout) ) {
throw std::runtime_error( "couldn't open stdout handle");
};
if ( !freopen_s( reinterpret_cast< FILE** >( stdout ), "CONOUT$", "w", stderr) ) {
throw std::runtime_error( "couldn't open stderr handle");
};
if ( !name.empty( ) ) {
SetConsoleTitle( name );
}
}
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz