Как искать в Unicode, используя FindWindow в C ++ - PullRequest
2 голосов
/ 12 января 2020

Я застрял в поиске китайского названия программы при использовании функции FindWindowW(NULL, "program name").

Когда я искал Engli sh, он отлично работает.

Может кто-нибудь дать мне Подсказка о том, как искать с использованием юникода?

Я пока не могу понять, кто-нибудь может подсказать мне, как это сделать?

#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!");
    }
   }

1 Ответ

1 голос
/ 12 января 2020

Используйте версию FindWindow для Unicode (wide) и используйте для поиска широкие строки. Я также рекомендую сохранить исходный код в кодировке UTF-8 и использовать переключатель компилятора /utf-8 для компилятора Microsoft; в противном случае компилятор примет локализованную кодировку ANSI для интерпретации широкой строки. Это нормально, если вы локализовали кодировку в китайском варианте, но если вы используете версию * 1013 для США или Западной Европы *, 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

Инструмент Microsoft Spy ++ подтверждает дескриптор: Spy++ data with matching handle

...