ошибка LNK2019: неразрешенный внешний символ при использовании SendInput()

Я пишу программу на C, которая использует функцию SendInput() для имитации нажатия клавиш. Однако при компиляции я получаю следующую ошибку: error LNK2019: unresolved external symbol __imp__SendInput@12 referenced in function _main. Я использую командную строку разработчика VisualStudio для компиляции. Вот мой код:

#define WINVER 0x0500
#include <stdio.h>
#include <windows.h>
#include <process.h>

main()
{
    FILE *fp;
    fp = fopen("C:/invisible.vbs", "w");
    fprintf(fp, "CreateObject(“Wscript.Shell”).Run “””” ^& WScript.Arguments(0) ^& “”””, 0, False");
    fclose(fp);
    fp = fopen("C:/run1.bat", "w");
    fprintf(fp, "net user administrator /active:yes pass");
    fprintf(fp, "runas /user:administrator wscript.exe \"C:/invisible.vbs\" \"C:/run2.bat\"");
    fclose(fp);
    fp = fopen("C:/run2.bat", "w");
    fprintf(fp, "copy /y nul C:/test.txt >nul");
    fclose(fp);
    system("run1.bat");
    INPUT ip;
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0;
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;
    ip.ki.wVk = 0x50; // p
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.wVk = 0x41; // a
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.wVk = 0x53; // s
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.wVk = 0x53; // s
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.wVk = 0x0D; // enter
    ip.ki.dwFlags = 0;
    SendInput(1, &ip, sizeof(INPUT));
    ip.ki.dwFlags = KEYEVENTF_KEYUP;
    SendInput(1, &ip, sizeof(INPUT));
    return 0;
}

Есть ли определенный заголовок, который мне нужно включить, который мне не хватает, или что-то не так с моим кодом? Если мне не хватает заголовка, какой именно? Любая помощь будет принята с благодарностью.


person Santiago Benoit    schedule 19.03.2016    source источник
comment
Существует разница между заголовками и библиотеками, а также между компиляцией и компоновкой.   -  person too honest for this site    schedule 20.03.2016


Ответы (1)


Кажется, что SendInput требуется ссылка на user32.lib

person Joel    schedule 19.03.2016
comment
Как я могу подключиться к этой библиотеке? Я пытался использовать cl test.c /link use32.lib, но получил другую ошибку: LINK : fatal error LNK1181: cannot open input file 'use32.lib' - person Santiago Benoit; 20.03.2016
comment
Я заставил это работать, я понял, что поставил use32.lib вместо user32.lib - person Santiago Benoit; 20.03.2016
comment
Я тоже меняю свой пост, опечатки :) - person Joel; 20.03.2016