【发布时间】:2015-06-14 03:28:26
【问题描述】:
HWND ForeWindow = GetForegroundWindow();
wchar_t WindowTxt[1024] = { L'\0' };
GetWindowTextW(ForeWindow, WindowTxt, 1024);
wprintf(L"%s\n", WindowTxt);
std::wstring Str(WindowTxt);
std::wcout << L"Wnd: " << Str << L"\n";
使用上面的代码获取Skype窗口“Skype™”我得到输出:
“Skype?”
(wcout 行执行失败)
1)为什么GetWindowText的宽字符版本无法处理这个字符
2)为什么std::wstring解析wchar_t数组失败,然后打印到控制台
【问题讨论】:
-
GetWindowText 不是问题。控制台停留在 1980 年代,具有石砖的用户友好性。您必须切换到更好的编码,如 utf-8,使用 SetConsoleCP(CP_UTF8)。并更改其字体。
-
写入文件而不是打印到控制台会产生完全相同的问题。
-
调试器告诉你什么?
-
写入控制台,而不是设置流语言环境是问题所在,你们让我看输出而不是代码,我很快就发现了语言环境问题,谢谢。
-
另请查看
MessageBoxW()或OutputDebugStringW()。
标签: c++ windows unicode encoding