簡體   English   中英

如何在C++中使用FindWindow在unicode中搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM