我试图使用GetForegroundWindow和GetWindowText函数获取活动窗口标题,这是我的代码
HWND hwnd = GetForegroundWindow();
char wname[255];
GetWindowText(hwnd,wname,255);
每次我尝试构建项目时都会收到此错误消息“错误:错误:无法将char转换为wchat_t *”
我正在使用c ++ builder xe7
那么,出了什么问题?
答案 0 :(得分:3)
您正在调用TCHAR
版GetWindowText()
。在“项目选项”中,您将" TCHAR地图设置为" 选项设置为wchar_t
,因此GetWindowText()
会映射到GetWindowTextW()
,一个wchar_t*
参数。这就是你无法传递char[]
缓冲区的原因。
所以,你需要:
将" TCHAR地图更改为" 改为char
,以便GetWindowText()
映射到GetWindowTextA()
代替(同样会影响每个人)您的代码中基于TCHAR
的其他API函数调用。仅在将旧版Unicode前代码迁移到C ++ Builder 2009 +时使用此方法。
将代码更改为使用TCHAR
代替:
TCHAR wname[255];
GetWindowText(hwnd,wname,255);
将代码更改为直接使用GetWindowText()
的Ansi或Unicode版本:
char wname[255];
GetWindowTextA(hwnd,wname,255);
wchar_t wname[255];
GetWindowTextW(hwnd,wname,255);
答案 1 :(得分:0)
您正在以Unicode感知模式构建应用程序; char
不足以容纳UTF-16字符。类型系统通过为您捕获这个来节省您从很多潜在的头痛。要么改为ASCII模式(简单但不好的解决方案),切换到使用宽字符串(恼人的解决方案),或者使用提供的宏在编译时根据构建参数进行选择(更烦人但最正确的解决方案)。
这是以上任何一种解决方案实现的代码片段:
HWND hwnd = GetForegroundWindow();
wchar_t wname[255];
GetWindowText(hwnd, wname, 255);
HWND hwnd = GetForegroundWindow();
TCHAR wname[255];
GetWindowTextW(hwnd, wname, 255);
如果您选择构建支持Unicode的应用程序(您应该这样做),您还必须记住使用wmain
或_tmain
作为适用,而不是使用普通的无聊main
。因为Windows。