• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы woka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

woka

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

DarkKnight

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

lazybiz

но как зделать чтобы было несколько клавиш и они выполняли какуюто функцию я не доезжаю
Ты имеешь в виду модификатор+(функциональная клавиша/буква) ? Или например три буквы нажать? Тут разный подход нужен...
 
L

lazybiz

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

И еще. Меня вот что интересует:
при нажатии нажатии нескольких определённых клавиш вызвать меню или сделать определённое действие(яркий пример коды в играх)
Не совсем понял.. тебе их нужно одновременно нажимать или последовательно? Коды в играх вроде как последовательно вводятся..
 
W

woka

Думаю тебе стоит покопать в сторону DirectInput!
на другом форуме мне сказали копать в сторону HOOKов но я не чего не на копал! посмотрим что здесь

Не совсем понял.. тебе их нужно одновременно нажимать или последовательно? Коды в играх вроде как последовательно вводятся..
без разницы! и так и так надо! скорее последовательно.
 
L

lazybiz

Вот примерно что я имел в виду:
C++:
#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 клавиш ты не получишь. Я думаю это связано с контроллерами клавиатур или что-то вроде того...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!