Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Симуляция нажатия клавиши [dota 2] C++

  • Автор темы Автор темы vator
  • Дата начала Дата начала
Так в доте можно и не эмулировать нажатие кнопки, там вроде есть функция, отвечающая за взаимодействие скиллов и предметов
 
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
Expand Collapse Copy
const auto helper_PressKey = [&dota_hwnd](DWORD vkey)
            {
                if (GetForegroundWindow() == dota_hwnd)
                {
                    const auto key_scancode = WindowsAPI::mapVKey(vkey);
                    WindowsAPI::sendInput(std::to_array(
                        {
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE} },
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP }}
                        }
                    ));
                }
            };
helper_PressKey('Q');
helper_PressKey('E');
helper_PressKey('Z');
helper_PressKey('X');
helper_PressKey('C');
helper_PressKey('V');
helper_PressKey('B');
helper_PressKey('N');
qW9ML9s.gif
 
Последнее редактирование:
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
Expand Collapse Copy
const auto helper_PressKey = [&dota_hwnd](DWORD vkey)
            {
                if (GetForegroundWindow() == dota_hwnd)
                {
                    const auto key_scancode = WindowsAPI::mapVKey(vkey);
                    WindowsAPI::sendInput(std::to_array(
                        {
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE} },
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP }}
                        }
                    ));
                }
            };
helper_PressKey('Q');
helper_PressKey('E');
helper_PressKey('Z');
helper_PressKey('X');
helper_PressKey('C');
helper_PressKey('V');
helper_PressKey('B');
helper_PressKey('N');
qW9ML9s.gif
пт на жёлтый
 
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
Expand Collapse Copy
const auto helper_PressKey = [&dota_hwnd](DWORD vkey)
            {
                if (GetForegroundWindow() == dota_hwnd)
                {
                    const auto key_scancode = WindowsAPI::mapVKey(vkey);
                    WindowsAPI::sendInput(std::to_array(
                        {
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE} },
                            INPUT{.type = INPUT_KEYBOARD, .ki{.wScan = key_scancode, .dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP }}
                        }
                    ));
                }
            };
helper_PressKey('Q');
helper_PressKey('E');
helper_PressKey('Z');
helper_PressKey('X');
helper_PressKey('C');
helper_PressKey('V');
helper_PressKey('B');
helper_PressKey('N');
qW9ML9s.gif
можешь показать что находиться в sendInput?
 
можешь показать что находиться в sendInput?
C++:
Expand Collapse Copy
    //warning: shitcode!
    template<std::size_t inputs_size>
    void sendInput(const std::array<INPUT, inputs_size>& inputs)
    {
        if(
            const auto& [sent, loc] = WrapAPI(SendInput(inputs_size, SmartCast<LPINPUT>(inputs.data()), sizeof(INPUT)));
            sent != inputs_size
            )
        {
            throw WinApiError{ loc };
        }
    }
 
C++:
Expand Collapse Copy
    //warning: shitcode!
    template<std::size_t inputs_size>
    void sendInput(const std::array<INPUT, inputs_size>& inputs)
    {
        if(
            const auto& [sent, loc] = WrapAPI(SendInput(inputs_size, SmartCast<LPINPUT>(inputs.data()), sizeof(INPUT)));
            sent != inputs_size
            )
        {
            throw WinApiError{ loc };
        }
    }
можно пожалуйста скинуть откуда берётся dota_hwnd?
 
Последнее редактирование:
можно пожалуйста скинуть фулл код в лс? разобраться не могу ;(
//данный архив содержит ужасный быдлокод написанный быстро по фану на коленках и на говняный манер и на который не стоит ориентироваться
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Назад
Сверху Снизу