- 3
- 0
1. Как сделать так, чтобы клавиши alt и ctrl зажимались в игре?(все остальные клавиши зажимаются, в том числе и shift).
Пробовал уже через VKcode, KEYEVENTF_EXTENDEDKEY, ничего не помогло
void pressKey(const QString& key, bool release = false) {
INPUT input = {};
input.type = INPUT_KEYBOARD;
// Определение скан-кода клавиши
WORD scanCode = 0;
DWORD flags = 0;
if (key == "alt") {
scanCode = 0x38; // Скан-код для Alt
}
else if (key == "ctrl") {
scanCode = 0x1D; // Скан-код для Ctrl
}
else if (key == "shift") {
scanCode = 0x2A; // Скан-код для Shift
}
{
// Преобразуем символ в верхний регистр и получаем его скан-код
char c = key.toUpper().toStdString()[0];
scanCode = MapVirtualKeyA(c, MAPVK_VK_TO_VSC); // Преобразование символа в скан-код
}
input.ki.wScan = scanCode;
input.ki.dwFlags = KEYEVENTF_SCANCODE; // Используем SCANCODE
// Если клавиша не должна быть отпущена, отправляем её как нажатую
if (!release) {
input.ki.dwFlags &= ~KEYEVENTF_KEYUP; // Нажатие клавиши
}
else {
input.ki.dwFlags |= KEYEVENTF_KEYUP; // Отпускание клавиши
}
// Отправка события
SendInput(1, &input, sizeof(INPUT));
}[/CODE]
Пробовал уже через VKcode, KEYEVENTF_EXTENDEDKEY, ничего не помогло
void pressKey(const QString& key, bool release = false) {
INPUT input = {};
input.type = INPUT_KEYBOARD;
// Определение скан-кода клавиши
WORD scanCode = 0;
DWORD flags = 0;
if (key == "alt") {
scanCode = 0x38; // Скан-код для Alt
}
else if (key == "ctrl") {
scanCode = 0x1D; // Скан-код для Ctrl
}
else if (key == "shift") {
scanCode = 0x2A; // Скан-код для Shift
}
{
// Преобразуем символ в верхний регистр и получаем его скан-код
char c = key.toUpper().toStdString()[0];
scanCode = MapVirtualKeyA(c, MAPVK_VK_TO_VSC); // Преобразование символа в скан-код
}
input.ki.wScan = scanCode;
input.ki.dwFlags = KEYEVENTF_SCANCODE; // Используем SCANCODE
// Если клавиша не должна быть отпущена, отправляем её как нажатую
if (!release) {
input.ki.dwFlags &= ~KEYEVENTF_KEYUP; // Нажатие клавиши
}
else {
input.ki.dwFlags |= KEYEVENTF_KEYUP; // Отпускание клавиши
}
// Отправка события
SendInput(1, &input, sizeof(INPUT));
}[/CODE]