|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 15, 2003 21:43:44 Вопросов 10b: 1) как в консоли отловить код нажатой клавиши и при этом ее не выводить на экран? Пытаюсь сделать так: invoke PeekConsoleInput,hStdIn,addr msg_buffer,1,ebx mov eax,TRUE .while eax .if msg_buffer.KeyEvent.wVirtualKeyCode==VK_ESCAPE mov eax,FALSE .endif .endw но в правильности этого не уверен... и не работает к тому же... 2) как позиционироваться в консоли? пробую SetConsoleCursorPosition, но не пашет... |
|
|
Дата: Июл 16, 2003 10:43:49 1)
#include <windows.h>
#include <stdio.h>
int main(void)
{
INPUT_RECORD ir;
HANDLE hCon;
DWORD NumOfEvents;
DWORD NumOfEventsRead;
DWORD i;
BOOL done;
if (INVALID_HANDLE_VALUE == (hCon = GetStdHandle(STD_INPUT_HANDLE)))
printf("GetStdHandle failed %d\n", GetLastError());
else
{
printf("Press Esc to Exit.\n");
done = FALSE;
while (FALSE == done)
if (FALSE == GetNumberOfConsoleInputEvents(hCon, &NumOfEvents))
{
printf("GetNumberOfConsoleInputEvents failed %d\n", GetLastError());
done = TRUE;
}
else
for (i = 0; i < NumOfEvents; i++)
if (FALSE == ReadConsoleInput(hCon, &ir, 1, &NumOfEventsRead))
{
printf("ReadConsoleInput failed %d\n", GetLastError());
done = TRUE;
break;
}
else if (1 == NumOfEventsRead)
done = (KEY_EVENT == ir.EventType &&
TRUE == ir.Event.KeyEvent.bKeyDown &&
VK_ESCAPE == ir.Event.KeyEvent.wVirtualKeyCode) ? TRUE : FALSE;
}
return 0;
}
2)
#include <windows.h>
#include <stdio.h>
int main(void)
{
HANDLE hCon;
COORD c;
hCon = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CONSOLE_TEXTMODE_BUFFER,
NULL);
if (INVALID_HANDLE_VALUE == hCon)
printf("CreateConsoleScreenBuffer failed %d\n", GetLastError());
else
if (FALSE == SetConsoleActiveScreenBuffer(hCon))
printf("SetConsoleActiveScreenBuffer failed %d\n", GetLastError());
else
{
c.X = c.Y = 0;
SetConsoleCursorPosition(hCon, c);
Sleep(1000);
c.X = c.Y = 10;
SetConsoleCursorPosition(hCon, c);
Sleep(1000);
c.X = c.Y = 20;
SetConsoleCursorPosition(hCon, c);
Sleep(1000);
if (FALSE == SetConsoleActiveScreenBuffer(GetStdHandle(STD_OUTPUT_HANDLE)))
printf("SetConsoleActiveScreenBuffer failed %d\n", GetLastError());
}
return 0;
}
PS проверял w98se, w2ksp3 |
|
|
Дата: Июл 16, 2003 12:22:05 Спасибо! Мне вообще-то на асме надо, но я переведу. |
|
|
Дата: Июл 16, 2003 12:27:35 imo winapi и на си winapi, а кода постить в разы меньше |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.083 |