4 HANDLE StdInput
= NULL
;
5 HANDLE StdOutput
= NULL
;
6 HANDLE StdError
= NULL
;
11 #define FSCTL_GET_CONSOLE_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 254, DO_DIRECT_IO, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
12 #define FSCTL_SET_CONSOLE_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 255, DO_DIRECT_IO, FILE_READ_ACCESS|FILE_WRITE_ACCESS)
20 if ( nStdHandle
== STD_INPUT_HANDLE
)
22 if ( nStdHandle
== STD_OUTPUT_HANDLE
)
24 if ( nStdHandle
== STD_ERROR_HANDLE
)
27 if ( nStdHandle == STD_AUX_HANDLE )
29 if ( nStdHandle == STD_PRINT_HANDLE )
39 HANDLE hConsoleOutput
,
41 DWORD nNumberOfCharsToWrite
,
42 LPDWORD lpNumberOfCharsWritten
,
46 return WriteFile(hConsoleOutput
, lpBuffer
, nNumberOfCharsToWrite
,lpNumberOfCharsWritten
, lpReserved
);
55 DWORD nNumberOfCharsToRead
,
56 LPDWORD lpNumberOfCharsRead
,
61 OVERLAPPED Overlapped
;
62 OVERLAPPED
* lpOverlapped
;
66 if ( lpReserved
== NULL
) {
67 Overlapped
.Internal
= 0;
68 Overlapped
.InternalHigh
= 0;
69 Overlapped
.Offset
= 0;
70 Overlapped
.OffsetHigh
= 0;
71 // Overlapped.hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);
72 lpOverlapped
= &Overlapped
;
75 lpOverlapped
= lpReserved
;
78 kSize
= nNumberOfCharsToRead
*sizeof(kSize
);
79 k
= HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY
,kSize
);
80 if ( k
== NULL
|| kSize
== 0 )
84 while(k
[0].AsciiChar
== 0 )
86 ReadFile(hConsoleInput
,k
,kSize
,lpNumberOfCharsRead
,lpOverlapped
);
91 //if ( k[i].bKeyDown )
93 ((char *)lpBuffer
)[j
] = k
[i
].AsciiChar
;
97 while(j
< nNumberOfCharsToRead
&& i
< *lpNumberOfCharsRead
) {
98 //if ( k[i].bKeyDown )
100 ((char *)lpBuffer
)[j
] = k
[i
].AsciiChar
;
106 HeapFree(GetProcessHeap(),0,k
);
107 //if ( lpReserved == NULL ) {
108 // CloseHandle(Overlapped.hEvent);
117 StdInput
= CreateFile("\\Keyboard",
122 FILE_FLAG_OVERLAPPED
,
125 StdOutput
= CreateFile("\\BlueScreen",
126 FILE_GENERIC_WRITE
|FILE_GENERIC_READ
,
133 StdError
= StdOutput
;
143 CloseHandle(StdInput
);
144 CloseHandle(StdOutput
);
151 GetConsoleScreenBufferInfo(
152 HANDLE hConsoleOutput
,
153 PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
156 DWORD dwBytesReturned
;
157 if( !DeviceIoControl(hConsoleOutput
,
158 FSCTL_GET_CONSOLE_SCREEN_BUFFER_INFO
,
160 lpConsoleScreenBufferInfo
,sizeof(CONSOLE_SCREEN_BUFFER_INFO
),&dwBytesReturned
,NULL
))
168 SetConsoleCursorPosition(
169 HANDLE hConsoleOutput
,
170 COORD dwCursorPosition
173 DWORD dwBytesReturned
;
174 CONSOLE_SCREEN_BUFFER_INFO ConsoleScreenBufferInfo
;
176 if( !GetConsoleScreenBufferInfo(hConsoleOutput
,&ConsoleScreenBufferInfo
) )
178 ConsoleScreenBufferInfo
.dwCursorPosition
.X
= dwCursorPosition
.X
;
179 ConsoleScreenBufferInfo
.dwCursorPosition
.Y
= dwCursorPosition
.Y
;
181 if( !DeviceIoControl(
183 FSCTL_SET_CONSOLE_SCREEN_BUFFER_INFO
,
184 &ConsoleScreenBufferInfo
,
185 sizeof(CONSOLE_SCREEN_BUFFER_INFO
),
197 FillConsoleOutputCharacterA(
198 HANDLE hConsoleOutput
,
202 LPDWORD lpNumberOfCharsWritten
205 return FillConsoleOutputCharacterW(hConsoleOutput
,
206 (WCHAR
) cCharacter
,nLength
, dwWriteCoord
,lpNumberOfCharsWritten
);
211 FillConsoleOutputCharacterW(
212 HANDLE hConsoleOutput
,
216 LPDWORD lpNumberOfCharsWritten