[英]How to search in unicode using FindWindow in C++
我在使用FindWindowW(NULL, "program name")
函數時遇到了搜索中文程序名的問題。
當我搜索英語時,它完美地工作。
有人能給我一個關於如何使用 unicode 搜索的線索嗎?
我還沒有弄清楚,有人可以指導我怎么做嗎?
#include <windows.h>
#include <stdio.h>
int main(){
HWND hWnd = FindWindowW(NULL,L"\uAA5A\uAA4C\uB873\uAB4C\uB6C7");
if(NULL == hWnd){
printf("NotFound!");
}else {
printf("Found!");
}
}
使用 FindWindow 的 Unicode(寬)版本並使用寬字符串進行搜索。 我還建議將源代碼保存為 UTF-8 編碼,並為 Microsoft 編譯器使用/utf-8
編譯器開關; 否則,編譯器將采用本地化的 ANSI 編碼來解釋寬字符串。 如果您的本地化編碼是中文變體,那很好,但如果您使用的是美國或西歐版本的 Windows,如果您在字符串常量中使用中文字符,Microsoft IDE 可能會提示您保存為 UTF-16:
例子:
#include <windows.h>
#include <stdio.h>
int main(void)
{
//HWND h = FindWindowW(NULL,L"馬克"); // works if saved in UTF-8 encoding
// // and compiled with /utf-8.
HWND h = FindWindowW(NULL,L"\u9a6c\u514b");
if(h == NULL)
printf("err = %ld\n",GetLastError());
else
printf("handle = %p\n",h);
}
在 Windows 上,我將終端窗口更改為帶有title 馬克
的匹配中文標題,此代碼找到了窗口:
C:\>title 馬克
C:\>test
handle = 00000000000B0258
C:\>test
handle = 00000000000B0258
微軟的 Spy++ 工具確認了句柄:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.