У меня такая же проблема с gcc - но это не ошибка компоновщика. Сообщение означает, что в winuser.h нет прототипа для функции, или, точнее, компилятор не может найти такой прототип. Это потому, что соответствующий бит winuser.h выглядит так:
#if (_WIN32_WINNT >= 0x0500)
WINUSERAPI BOOL WINAPI LockWorkStation(void);
#endif
Другими словами, вам нужна версия Windows> = 5 (т.е. Win2K), чтобы использовать эту функцию. В настоящее время я пытаюсь это на Win2K, и это не работает, что указывает на то, что макрос установлен неправильно. В настоящее время я мало занимаюсь «настоящим» программированием для Windows, поэтому не уверен, почему так должно быть.
Редактировать: Фактически, небольшой эксперимент показывает, что gcc считает, что версия Windows 2000 для Windows (по крайней мере, в моей установке) - 0x0400.
Далее: На самом деле макрос _WIN32_WINNT
является (как следует из подчеркивания в начале) зарезервированным именем в C и C ++ и не должен определяться в коде пользователя. Определение макроса WINVER
, похоже, имеет тот же эффект и является (по крайней мере, концептуально) более переносимым. Этот код компилируется на моей установке gcc:
#define WINVER 0x0500
#include <windows.h>
int main() {
LockWorkStation();
}