使用windows.h库时编译器无法识别部分类型与函数的问题求助
先把你给出的代码整理出来(注意getScreenHeight函数里的代码不完整):
#include <windows.h> #include <stdio.h> #include <stdlib.h> void moveUp(int with) { POINT pos; if (!GetCursorPos(&pos)) { puts("Unable to get cursor position\n"); exit(-1); } if (!SetCursorPos(pos.x, pos.y - with)) { puts("Unable to move cursor\n"); exit(-1); } puts("Success"); } int getScreenHeight() { return GetSystemMetrics(SM_CYSC... }
针对你遇到的「编译器无法识别部分类型和函数」的问题,我从几个常见方向帮你排查:
确认编译器环境是否适配Windows API
你必须使用Windows平台的编译器,比如Visual Studio的MSVC、MinGW(Windows版本),Linux/macOS下的GCC是无法识别windows.h和相关API的。如果用MinGW编译,一定要记得链接user32.lib——因为GetCursorPos、SetCursorPos、GetSystemMetrics这些函数都属于user32.dll,编译时需要显式指定链接库,命令示例:gcc your_code.c -o cursor_tool.exe -luser32要是用Visual Studio,新建「Windows控制台应用」项目后直接粘贴代码编译即可,VS会自动处理必要的库链接。
修复代码中的拼写/语法错误
你的getScreenHeight函数里,SM_CYSC...明显是未输入完整的宏,正确的宏应该是SM_CYSCREEN,用来获取屏幕的高度。补全后的函数应该是:int getScreenHeight() { return GetSystemMetrics(SM_CYSCREEN); }这种未完成的宏定义会直接导致编译器报错,误以为是未识别的标识符。
检查Windows SDK版本(可选)
这些都是Windows API里的基础函数,几乎所有版本的Windows SDK都支持,但如果你的编译器配置了过旧的SDK,可以尝试更新到较新的版本,或者确保没有定义WIN32_LEAN_AND_MEAN这类可能精简API的宏(不过一般不会影响这些基础函数)。
如果还有具体的编译错误提示,可以把错误信息贴出来,能更精准定位问题~
内容的提问来源于stack exchange,提问作者Márton Kardos

