Другое С/С++ Вопрос - Ответ

хуега)

РП игрок
Модератор
2,568
2,270
1714642011817.png
 

Smeruxa

Известный
1,305
685
Как перевести ImGuiKey в обычную клавишу int?
C++:
if (utils->isKeyPressed(static_cast<int>(gConfig->data["button"].get<ImGuiKey>()), 20))
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
 

Dark_Knight

Me, me and me.
Друг
4,067
2,080
Как перевести ImGuiKey в обычную клавишу int?
C++:
if (utils->isKeyPressed(static_cast<int>(gConfig->data["button"].get<ImGuiKey>()), 20))
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
Ну как бы...
 

0x9

Новичок
11
0
помоги пожалуйста, как сделать хук входящих пакетов в SAMP API?
 

Smeruxa

Известный
1,305
685
Ну как бы...
Они от 522 (где то так) хранятся, но если вычитать 522, то все равно не тот инт получается, например если Q выбрана, то клавиша, которая получится, если вычесть 522 - это цифра 2
 

Smeruxa

Известный
1,305
685
Комментарии есть еще. Вариант использовать имгуишный метод проверки нажатия клавиш
IsKeyPressed вне имгуи = краш, а мне нужно как раз таки извне
UPD. если кому то нужно будет
C++:
std::unordered_map<ImGuiKey, int> kImGui = {
        {ImGuiKey_Tab, 9},
        {ImGuiKey_LeftArrow, 37},
        {ImGuiKey_RightArrow, 39},
        {ImGuiKey_UpArrow, 38},
        {ImGuiKey_DownArrow, 40},
        {ImGuiKey_PageUp, 33},
        {ImGuiKey_PageDown, 34},
        {ImGuiKey_Home, 36},
        {ImGuiKey_End, 35},
        {ImGuiKey_Insert, 45},
        {ImGuiKey_Delete, 46},
        {ImGuiKey_Backspace, 8},
        {ImGuiKey_Space, 32},
        {ImGuiKey_Enter, 13},
        {ImGuiKey_Escape, 27},
        {ImGuiKey_A, 65},
        {ImGuiKey_B, 66},
        {ImGuiKey_C, 67},
        {ImGuiKey_D, 68},
        {ImGuiKey_E, 69},
        {ImGuiKey_F, 70},
        {ImGuiKey_G, 71},
        {ImGuiKey_H, 72},
        {ImGuiKey_I, 73},
        {ImGuiKey_J, 74},
        {ImGuiKey_K, 75},
        {ImGuiKey_L, 76},
        {ImGuiKey_M, 77},
        {ImGuiKey_N, 78},
        {ImGuiKey_O, 79},
        {ImGuiKey_P, 80},
        {ImGuiKey_Q, 81},
        {ImGuiKey_R, 82},
        {ImGuiKey_S, 83},
        {ImGuiKey_T, 84},
        {ImGuiKey_U, 85},
        {ImGuiKey_V, 86},
        {ImGuiKey_W, 87},
        {ImGuiKey_X, 88},
        {ImGuiKey_Y, 89},
        {ImGuiKey_Z, 90},
        {ImGuiKey_0, 48},
        {ImGuiKey_1, 49},
        {ImGuiKey_2, 50},
        {ImGuiKey_3, 51},
        {ImGuiKey_4, 52},
        {ImGuiKey_5, 53},
        {ImGuiKey_6, 54},
        {ImGuiKey_7, 55},
        {ImGuiKey_8, 56},
        {ImGuiKey_9, 57},
        {ImGuiKey_F1, 112},
        {ImGuiKey_F2, 113},
        {ImGuiKey_F3, 114},
        {ImGuiKey_F4, 115},
        {ImGuiKey_F5, 116},
        {ImGuiKey_F6, 117},
        {ImGuiKey_F7, 118},
        {ImGuiKey_F8, 119},
        {ImGuiKey_F9, 120},
        {ImGuiKey_F10, 121},
        {ImGuiKey_F11, 122},
        {ImGuiKey_F12, 123},
        {ImGuiKey_F13, 124},
        {ImGuiKey_F14, 125},
        {ImGuiKey_F15, 126},
        {ImGuiKey_F16, 127},
        {ImGuiKey_F17, 128},
        {ImGuiKey_F18, 129},
        {ImGuiKey_F19, 130},
        {ImGuiKey_F20, 131},
        {ImGuiKey_F21, 132},
        {ImGuiKey_F22, 133},
        {ImGuiKey_F23, 134},
        {ImGuiKey_F24, 135},
        {ImGuiKey_Apostrophe, 192},
        {ImGuiKey_Comma, 188},
        {ImGuiKey_Minus, 189},
        {ImGuiKey_Period, 190},
        {ImGuiKey_Slash, 191},
        {ImGuiKey_Semicolon, 186},
        {ImGuiKey_Equal, 187},
        {ImGuiKey_LeftBracket, 219},
        {ImGuiKey_Backslash, 220},
        {ImGuiKey_RightBracket, 221},
        {ImGuiKey_GraveAccent, 192},
        {ImGuiKey_CapsLock, 20},
        {ImGuiKey_ScrollLock, 145},
        {ImGuiKey_NumLock, 144},
        {ImGuiKey_PrintScreen, 44},
        {ImGuiKey_Pause, 19},
        {ImGuiKey_Keypad0, 96},
        {ImGuiKey_Keypad1, 97},
        {ImGuiKey_Keypad2, 98},
        {ImGuiKey_Keypad3, 99},
        {ImGuiKey_Keypad4, 100},
        {ImGuiKey_Keypad5, 101},
        {ImGuiKey_Keypad6, 102},
        {ImGuiKey_Keypad7, 103},
        {ImGuiKey_Keypad8, 104},
        {ImGuiKey_Keypad9, 105},
        {ImGuiKey_KeypadDecimal, 110},
        {ImGuiKey_KeypadDivide, 111},
        {ImGuiKey_KeypadMultiply, 106},
        {ImGuiKey_KeypadSubtract, 109},
        {ImGuiKey_KeypadAdd, 107},
        {ImGuiKey_KeypadEnter, 13},
        {ImGuiKey_KeypadEqual, 187},
        {ImGuiKey_LeftShift, VK_LSHIFT},
        {ImGuiKey_RightShift, VK_RSHIFT},
        {ImGuiKey_LeftCtrl, VK_LCONTROL},
        {ImGuiKey_RightCtrl, VK_RCONTROL},
        {ImGuiKey_LeftAlt, VK_LMENU},
        {ImGuiKey_RightAlt, VK_RMENU},
        {ImGuiKey_LeftSuper, VK_LWIN},
        {ImGuiKey_RightSuper, VK_RWIN},
    };
 
Последнее редактирование:
  • Нравится
Реакции: writeline

patrickkoo

Новичок
1
0
Парни такой вопрос как сделать чтобы после того как ты нажал определенную клавишу чтобы длл написанная на с++ нажала F6 и вписала определенный текст можно код с пояснениями <3 чтобы эти действия нажатие F6 и вписыванние опр текста выполняла именно в игре
 
  • Эм
Реакции: writeline

хуега)

РП игрок
Модератор
2,568
2,270
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):

C++:
auto drawlist = ImGui::GetBackgroundDrawList();

std::string huy = "huy"
drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
C++:
std::string utils::CP1251ToUTF8(const char *str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u)
        return 0;
    wchar_t *ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char *cres = new char[result_c];
    if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
 

Smeruxa

Известный
1,305
685
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):

C++:
auto drawlist = ImGui::GetBackgroundDrawList();

std::string huy = "huy"
drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
C++:
std::string utils::CP1251ToUTF8(const char *str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u)
        return 0;
    wchar_t *ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char *cres = new char[result_c];
    if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
Меня спасло, и за тебя помолюсь ( с этим в принципе не нужны приколы с преобразованиями, у меня так )
C++:
#pragma execution_character_set("utf-8")
 
  • Вау
Реакции: хуега)

Musaigen

abobusnik
Проверенный
1,585
1,309
Пытаюсь перевести строку из CP1251 в UTF8 для рендера в ImGUI, но результата 0 (в ответ получаю знаки вопроса):

C++:
auto drawlist = ImGui::GetBackgroundDrawList();

std::string huy = "huy"
drawlist->AddText(ImVec2{1000, 100}, 0xFFFFFFFF, utils::convertCP1251ToUTF8(huy.c_str()));
C++:
std::string utils::CP1251ToUTF8(const char *str)
{
    std::string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u)
        return 0;
    wchar_t *ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(CP_UTF8, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char *cres = new char[result_c];
    if (!WideCharToMultiByte(CP_UTF8, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
у тебя память течёт в 20 строке, удали ures
 
  • Нравится
Реакции: хуега)