Как определить символы в консоли с помощью WinAPI?

#c #winapi

#c #winapi

Вопрос:

Мне нужно прочитать файл и распечатать текст в консоли. Если пользователь нажимает на букву в слове, отобразите эту букву внизу консоли и отобразите координаты мыши. Я выяснил, как отслеживать щелчки мыши, используя LPPOINT и положение курсора с помощью GetCursorPos(). Но я не могу найти, как определить, на какой символ нажал пользователь. Я полагаю, я не должен использовать printf() или WriteFile() и использовать какие-то конкретные функции? Этот код у меня есть сейчас:

 #include <stdio.h>
#include <locale.h>
#include <windows.h>

void main ()
{
    DWORD fdwMode;
    HANDLE file  = CreateFile("lab5.in",GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL);
    HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hstdin  = GetStdHandle(STD_INPUT_HANDLE);
    HWND hwnd = GetConsoleWindow(); // Дескриптор консольного окна

COORD pos;
pos.X = 10;
pos.Y = 10;

INPUT_RECORD ir;
fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | ENABLE_EXTENDED_FLAGS;
DWORD actlen = 1;

char buf[100];
char buffer;
char buf1;
 

if(hstdout==INVALID_HANDLE_VALUE) {
    ExitProcess(0);
}

// мышь
LPPOINT pPnt; // координаты мыши
pPnt = malloc ( sizeof(*pPnt) ); // память под переменную координат мыши
while (actlen != 0) {
    ReadFile(file,amp;buf,1,amp;actlen,NULL);
    WriteFile(hstdout,amp;buf,actlen,amp;actlen,NULL);
do {
    Sleep(100);
    GetCursorPos(pPnt); // Координаты курсора мыши (глобальные, весь экран)
    ScreenToClient(hwnd, pPnt); // преобразуем координаты в локальные (окно консоли)
    // printf("n Cursor Position: %d %d n", pPnt[0].x, pPnt[0].y);

    if (GetKeyState(VK_LBUTTON) < 0) 
        printf("n Left Button Entered n");
    if (GetKeyState(VK_RBUTTON) < 0) 
        exit(0);
    }while(1);
}
  

Извините за мой английский 🙂

Ответ №1:

Я предполагаю, что весь ваш текст был выведен в буфер консоли.

Используйте ReadConsoleOutputCharacter,

Копирует количество символов из последовательных ячеек буфера экрана консоли, начиная с указанного местоположения.

dwReadCoord: координаты первой ячейки в буфере экрана консоли, из которой нужно считывать, в символах. X-элемент структуры КООРДИНАТ — это столбец, а Y-элемент — строка.

Используется GetCursorPos для определения положения курсора в области буфера консоли, затем получить координаты ячейки с помощью некоторых вычислений.