1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

вопрос: горячие клавиши в программе. С++

Тема в разделе "С и С++", создана пользователем woka, 11 ноя 2010.

Статус темы:
Закрыта.
  1. woka

    woka Гость

    Репутация:
    0
    1. А скажите как зделать так чтобы при нажатии нескольких клавиш на клавиатуре и нажатием мыши по картинке открывалось новое окно?
    2. и как зделать так чтобы в можно было при нажатии нажатии нескольких определённых клавиш вызвать меню или зделать определённое действие(яркий пример коды в играх) как бы я предпологаю как зделать это
    Код:
    getch()==27 //клавиша Esc
    но как зделать чтобы было несколько клавиш и они выполняли какуюто функцию я не доезжаю
     
  2. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Скажим форме отлавливать сообщения нажатия клавиш
    Код:
    Form1->KeyPreview = true
    Функция обработки
    Код:
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
    switch (Key)
    {
    case 27: Application->Terminate();
    break;
    case 13: ShowMessage("Нажали Enter");
    break;
    default : ShowMessage("Нажали клавишу с кодом " + IntToStr(Key));
    };
    }
    //---------------------------------------------------------------------------
     
  3. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Ты имеешь в виду модификатор+(функциональная клавиша/буква) ? Или например три буквы нажать? Тут разный подход нужен...
     
  4. woka

    woka Гость

    Репутация:
    0
    три буквы нажать!
     
  5. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Думаю тебе стоит покопать в сторону DirectInput! Сам с ним мало дел имел, поэтому на данный момент сказать ничего не могу.
    Тут дело не в простой проверке пита:
    Код:
    if ( iKeyCode == KEY_G ) ...
    Я думаю нужно использовать keyboard input buffer.
    Обещаю поискать, подумать. Немного позже сообщу о результатах.

    И еще. Меня вот что интересует:
    Не совсем понял.. тебе их нужно одновременно нажимать или последовательно? Коды в играх вроде как последовательно вводятся..
     
  6. woka

    woka Гость

    Репутация:
    0
    на другом форуме мне сказали копать в сторону HOOKов но я не чего не на копал! посмотрим что здесь

    без разницы! и так и так надо! скорее последовательно.
     
  7. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Вот примерно что я имел в виду:
    Код:
    #define _WIN32_WINNT	0x0501
    #include <windows.h>
    #include <dx\dinput.h>
    #include <stdio.h>
    
    LPDIRECTINPUT8			pdi;
    LPDIRECTINPUTDEVICE8	pdid_kbd;
    
    BYTE					keystate[256];
    
    int main( void )
    {
    DirectInput8Create( GetModuleHandle( NULL ), DIRECTINPUT_VERSION, IID_IDirectInput8, (void **)&pdi, NULL );
    pdi->CreateDevice( GUID_SysKeyboard, &pdid_kbd, NULL );
    pdid_kbd->SetDataFormat( &c_dfDIKeyboard );
    pdid_kbd->SetCooperativeLevel( NULL, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND );
    pdid_kbd->Acquire();
    
    printf( "Hit Escape to exit.\n" );
    while ( 1 ) {
    pdid_kbd->GetDeviceState( 256, (LPVOID)keystate );
    if ( keystate[DIK_ESCAPE] & 0x80 ) break;
    
    printf( "\t\t\t\r" );
    
    if ( keystate[DIK_Q] & 0x80 ) printf( "Q" );
    if ( keystate[DIK_W] & 0x80 ) printf( "W" );
    if ( keystate[DIK_E] & 0x80 ) printf( "E" );
    if ( keystate[DIK_R] & 0x80 ) printf( "R" );
    if ( keystate[DIK_T] & 0x80 ) printf( "T" );
    if ( keystate[DIK_Y] & 0x80 ) printf( "Y" );
    
    fflush( stdout );
    
    Sleep( 20 );
    }
    pdid_kbd->Unacquire();
    pdi->Release();
    return 0;
    }
    Думаю я не ошибусь если скажу что коды одновременно нажатых 10 клавиш ты не получишь. Я думаю это связано с контроллерами клавиатур или что-то вроде того...
     
Загрузка...
Похожие Темы - вопрос горячие клавиши
  1. erlan1749
    Ответов:
    2
    Просмотров:
    66
  2. SlipX
    Ответов:
    1
    Просмотров:
    82
  3. Irusik
    Ответов:
    5
    Просмотров:
    107
  4. Unkown_
    Ответов:
    14
    Просмотров:
    178
  5. thunder
    Ответов:
    3
    Просмотров:
    383
Статус темы:
Закрыта.

Поделиться этой страницей