2005년 08월 08일
콘솔프로젝트외의 프로젝트에서 콘솔창 띄우기
설명 필요없을정도 이므로 소스로 대신함..
핸들을 릴리즈 해줘야한다든지는 잘 몰라서 그냥 둠..
console.h
class Console
{
private:
Console();
public:
static bool Alloc();
static bool Free();
static void Write(const char* fmt, ...);
private:
static HANDLE thread;
};
console.cpp
#include <cstdio>
using namespace std;
#include <windows.h>
#include "console.h"
void __stdcall ConsoleThread(void* p)
{
HANDLE input = GetStdHandle(STD_INPUT_HANDLE);
char buffer[1024];
DWORD len;
while (1)
{
ReadConsole(input, buffer, 1024, &len, 0);
// 입력에 따른 처리
}
}
HANDLE Console::thread = 0;
Console::Console()
{
*(int*)0 = 0;
}
bool Console::Alloc()
{
if (AllocConsole() != 0)
{
DWORD id;
thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ConsoleThread, 0, 0, &id);
if (thread)
return true;
}
return false;
}
bool Console::Free()
{
if (thread)
TerminateThread(thread, 0);
return FreeConsole() != 0;
}
void Console::Write(const char* fmt, ...)
{
char buffer[1024] = {0};
va_list va;
va_start(va, fmt);
vsprintf(buffer, fmt, va);
va_end(va);
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD written = 0;
WriteConsole(output, buffer, (DWORD)strlen(buffer), &written, 0);
}
핸들을 릴리즈 해줘야한다든지는 잘 몰라서 그냥 둠..
console.h
class Console
{
private:
Console();
public:
static bool Alloc();
static bool Free();
static void Write(const char* fmt, ...);
private:
static HANDLE thread;
};
console.cpp
#include <cstdio>
using namespace std;
#include <windows.h>
#include "console.h"
void __stdcall ConsoleThread(void* p)
{
HANDLE input = GetStdHandle(STD_INPUT_HANDLE);
char buffer[1024];
DWORD len;
while (1)
{
ReadConsole(input, buffer, 1024, &len, 0);
// 입력에 따른 처리
}
}
HANDLE Console::thread = 0;
Console::Console()
{
*(int*)0 = 0;
}
bool Console::Alloc()
{
if (AllocConsole() != 0)
{
DWORD id;
thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ConsoleThread, 0, 0, &id);
if (thread)
return true;
}
return false;
}
bool Console::Free()
{
if (thread)
TerminateThread(thread, 0);
return FreeConsole() != 0;
}
void Console::Write(const char* fmt, ...)
{
char buffer[1024] = {0};
va_list va;
va_start(va, fmt);
vsprintf(buffer, fmt, va);
va_end(va);
HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD written = 0;
WriteConsole(output, buffer, (DWORD)strlen(buffer), &written, 0);
}
# by | 2005/08/08 02:18 | 프로그래밍 팁 | 트랙백 | 덧글(0)



☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]