今天在QT里面用windows API获取窗口名称,有些窗口名称中有中文。如果直接将窗口名称存入QString,显示出来会有乱码。如何解决看下面的代码。
HWND winHandle = GetForegroundWindow();
int cTxtLen = GetWindowTextLength(winHandle);
PSTR pszMem = (PSTR) VirtualAlloc((LPVOID) NULL,
(DWORD) (cTxtLen + 1), MEM_COMMIT,
PAGE_READWRITE);
GetWindowText(winHandle, pszMem,
cTxtLen + 1);
// pszMem可能含有中文字符。tmpName在初始化时必须要用QString::fromLocal8Bit,否则会出现乱码。
QString tmpName = QString::fromLocal8Bit(pszMem);
if(this->appName != tmpName){
this->appName = tmpName;
QDateTime time = QDateTime::currentDateTime();
this->ui->textBrowser->append("\n");
this->ui->textBrowser->append(time.toString("hh:mm:ss"));
// 经过QString::fromLocal8Bit处理,显示在QTextBrowser中就不会有乱码。
this->ui->textBrowser->append(this->appName);
}
VirtualFree(pszMem, 0, MEM_RELEASE);