i18n: UTF-8 protocol capability + Unicode rendering on server
This commit is contained in:
@@ -63,9 +63,34 @@ private:
|
||||
if (hForegroundWindow == NULL)
|
||||
return "No active window";
|
||||
|
||||
char windowTitle[256];
|
||||
GetWindowTextA(hForegroundWindow, windowTitle, sizeof(windowTitle));
|
||||
return std::string(windowTitle);
|
||||
// 用 W 接口取标题,再转 UTF-8,避免依赖客户端系统 ANSI 代码页
|
||||
wchar_t wTitle[256] = { 0 };
|
||||
GetWindowTextW(hForegroundWindow, wTitle, _countof(wTitle));
|
||||
if (wTitle[0] == L'\0')
|
||||
return std::string();
|
||||
|
||||
int u8len = WideCharToMultiByte(CP_UTF8, 0, wTitle, -1, NULL, 0, NULL, NULL);
|
||||
if (u8len <= 1)
|
||||
return std::string();
|
||||
|
||||
// 协议字段 ActiveWnd[512],UTF-8 中文最多 3 字节/字符,必要时按完整码点截断
|
||||
std::string out(u8len - 1, '\0');
|
||||
WideCharToMultiByte(CP_UTF8, 0, wTitle, -1, &out[0], u8len, NULL, NULL);
|
||||
if (out.size() >= 511) {
|
||||
out.resize(511);
|
||||
// 回退到上一个完整 UTF-8 码点起始
|
||||
while (!out.empty() && (static_cast<unsigned char>(out.back()) & 0xC0) == 0x80)
|
||||
out.pop_back();
|
||||
if (!out.empty()) {
|
||||
unsigned char lead = static_cast<unsigned char>(out.back());
|
||||
int need = (lead & 0x80) == 0 ? 1
|
||||
: (lead & 0xE0) == 0xC0 ? 2
|
||||
: (lead & 0xF0) == 0xE0 ? 3
|
||||
: (lead & 0xF8) == 0xF0 ? 4 : 0;
|
||||
if (need == 0) out.pop_back();
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
DWORD GetLastInputTime()
|
||||
|
||||
Reference in New Issue
Block a user