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

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

Восстановить пароль Регистрация
 
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
05.02.2014, 02:20     Как сделать правильный перехват ввода? #1
Доброго времени суток. Решил поделать еще что-то интересное. Вот есть идейка сделать что-то типа одной из функций, которые есть в puntoswitcher: в нем можно создать список слов, которые будут автоматически заменены сразу после ввода. Вопрос: как сделать правильный перехват ввода? что именно перехватывать? как это вообще реализовано?
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
05.02.2014, 14:49     Как сделать правильный перехват ввода? #2
Например написано слово "превет", а в программе хранится слово "привет", тогда программа сравнивает два слова и выдает правильное слово.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.02.2014, 23:45  [ТС]     Как сделать правильный перехват ввода? #3
programina, да это я так понимаю. где и как ловить вводимое слово? ведь это слово может быть введено в любом окне
Bretbas
22 / 17 / 1
Регистрация: 05.08.2013
Сообщений: 468
Завершенные тесты: 1
10.02.2014, 01:10     Как сделать правильный перехват ввода? #4
ловим сообщение винды о нажатие клавиши,и просматриваем окно где есть фокус ввода...winapi погляди
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
10.02.2014, 01:35  [ТС]     Как сделать правильный перехват ввода? #5
Bretbas, то есть предлагается ловить нажатие каждой клавиши, запихивать значения в массив, а потом при нажатии другой клавиши, к примеру, пробела, сравнивать и заменять? как-то нерационально звучит.
programina
 Аватар для programina
1912 / 597 / 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;
}
Yandex
Объявления
10.02.2014, 01:36     Как сделать правильный перехват ввода?
Ответ Создать тему
Опции темы

Текущее время: 09:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru