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

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Пользователь
Статус
Оффлайн
Регистрация
10 Июн 2017
Сообщения
677
Реакции[?]
117
Поинты[?]
0
Как эмулировать нажатие клавиши в игре с помощью C++?
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
393
Реакции[?]
112
Поинты[?]
21K
хукни WndProc доты и уже нажимай какие твоей душе угодно кнопки
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,746
Реакции[?]
1,465
Поинты[?]
2K
Так в доте можно и не эмулировать нажатие кнопки, там вроде есть функция, отвечающая за взаимодействие скиллов и предметов
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
393
Реакции[?]
112
Поинты[?]
21K
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
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');
 
Последнее редактирование:
otval shpindelya
Участник
Статус
Оффлайн
Регистрация
23 Мар 2020
Сообщения
1,258
Реакции[?]
291
Поинты[?]
9K
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
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');
пт на жёлтый
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Пользователь
Статус
Оффлайн
Регистрация
20 Янв 2022
Сообщения
182
Реакции[?]
40
Поинты[?]
25K
SendInput
Пожалуйста, авторизуйтесь для просмотра ссылки.
INPUT.type = INPUT_KEYBOARD
INPUT.ki.wScan = сканкод_твоей_кнопки
INPUT.ki.dwFlags = KEYEVENTF_SCANCODE и при отжатии клавиши заодно KEYEVENTF_KEYUP
вкоды(VK_F1 например) мапить в сканкоды через
MapVirtualKeyA
Пожалуйста, авторизуйтесь для просмотра ссылки.
SendInput посылает в текущее окно(ну поэтому и чек что дота на переднем плане иначе смысла нет что-то отсылать).
главное именно сканкоды отсылать а не вкоды(иначе доте похуй будет на твои нажатия)
C++:
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');
можешь показать что находиться в sendInput?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
можешь показать что находиться в sendInput?
C++:
    //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 };
        }
    }
 
Пользователь
Статус
Оффлайн
Регистрация
20 Янв 2022
Сообщения
182
Реакции[?]
40
Поинты[?]
25K
C++:
    //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?
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
можно пожалуйста скинуть фулл код в лс? разобраться не могу ;(
//данный архив содержит ужасный быдлокод написанный быстро по фану на коленках и на говняный манер и на который не стоит ориентироваться
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу