Поиск:

Ответ в темуСоздание новой темы Создание опроса
> case WM_KEYDOWN | вставить 2 клавиши по VK коду 
V
    Опции темы
VOX
Дата 17.8.2009, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Код

int KeyboardProc(int nCode, DWORD wParam, DWORD lParam)
    {
        static KBDLLHOOKSTRUCT *p;
        p = (KBDLLHOOKSTRUCT *)lParam;
        switch(wParam)
        {
            case WM_KEYDOWN:
            switch (p->vkCode )
                {
                    case 67: Form1->calcF();
                    break;
                }
        break;
        }
    return 0;
    }

Здравствуйте! В коде выше через хук при нажатии клавиши выполняется ф-ия.
Подскажите пожалуйстаЮ как реализовать так, что бы можно было не одну а 2 клавиши нажимать и 
именно тогда ф-ия вызывалась.
Спасибо!
PM MAIL   Вверх
VOX
Дата 17.8.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



GetKeyState помог, но он постоянно разные значения выдает .... кто знает в чём дело?
PM MAIL   Вверх
smoke_man
Дата 17.8.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Попробуй так:
Код

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam );
int main()


{
    // Retrieve the applications instance
    HINSTANCE appInstance = GetModuleHandle(NULL);
    // Set a global Windows Hook to capture keystrokes.
    SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, appInstance, 0 );
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0) > 0)


    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }


    return 0;
}

LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )


{
    // Declare our pointer to the KBDLLHOOKSTRUCT
    KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
    static int pressbut = -1;
    switch( wParam )


    {
    case WM_KEYUP: // When the key has been pressed and released


        {
            if(pKeyBoard->vkCode == 65)//a
            {
                    if(pressbut == 83)//s
                    {
                        printf("A ans S buttons pressed \n");
                        break;
                    }
            }

            pressbut = pKeyBoard->vkCode;
        }
    default:
        return CallNextHookEx( NULL, nCode, wParam, lParam );
    }
    return 0;
}


Добавлено @ 11:15
Хотя если сначала была нажата s, а потом нажимать просто a - то будет постоянно срабатывать. 
Можно сбрасывать нажатие:
Код

 if(pressbut == 83)//s
{
        printf("A ans S buttons pressed \n");
        pressbut = -1;
        break;
}



Это сообщение отредактировал(а) smoke_man - 17.8.2009, 11:18


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
VOX
Дата 17.8.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Спасибо, но интересовало решение в рамках конструкции свич.
геткейстэйт то что нужно, вот в возвращаемых значениях разбираюсь ... 0,1,-127......
PM MAIL   Вверх
VOX
Дата 17.8.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Решено, просто меньше 0- значит нажата. Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.