gpt4 book ai didi

c - GetWindowText 时替换字符\uFFFD(C 代码)

转载 作者:行者123 更新时间:2023-11-30 19:22:17 25 4
gpt4 key购买 nike

我正在为我的“正在播放”插件获取 Spotify 的窗口标题,其功能为:

GetWindowText(spotify_window_handle, title, title_length)

但输出包含替换字符\uFFFD。

Ex. Spotify - Killswitch Engage � One Last Sunset

如何在 C 中用 - 替换 �?

完整代码如下:

char* spotify_title(int window_handle)
{
int title_length = GetWindowTextLength(window_handle);
if(title_length != 0)
{
char* title;
title = (char*)malloc((++title_length) * sizeof *title );
if(title != NULL)
{
GetWindowText(window_handle, title, title_length);
if(strcmp(title, "Spotify") != 0)
{
return title;
}
else
{
return "Spotify is not playing anything right now. Type !botnext command to restart playback.";
}
}
else
{
printf("PLUGIN: Unable to allocate memory for title\n");
}
free(title);
}
else
{
printf("PLUGIN: Unable to get Spotify window title\n");
}
}
// End of Spotify get title function

最佳答案

在 Unicode->Ansi 转换期间使用替换字符。没有看到如何title实际上已声明(是使用 char 还是 wchar_t ?),我的猜测是您正在调用 GetWindowText() 的 Ansi 版本(又名 GetWindowTextA() )并且窗口标题包含无法在操作系统的默认 Ansi 语言环境中表示的 Unicode 字符,因此 GetWindowTextA()将窗口文本转换为 Ansi 进行输出时替换该字符。请记住,Windows 实际上是基于 Unicode 的操作系统,因此您应该使用 GetWindowText() 的 Unicode 版本。 (又名 GetWindowTextW() ),例如:

WCHAR title[256];
int title_length = 256;
GetWindowTextW(spotify_window_handle, title, title_length);

或者:

int title_length = GetWindowTextLengthW(spotify_window_handle);
LPWSTR title = (LPWSTR) malloc((title_length+1) * sizeof(WCHAR));
GetWindowTextW(spotify_window_handle, title, title_length+1);
...
free(title);

或者至少确保您的项目配置为针对 Unicode 进行编译,以便 UNICODE_UNICODE在编译期间定义。这将使 GetWindowText()映射到GetWindowTextW()而不是GetWindowTextA() 。然后您将不得不使用TCHAR为您title缓冲区,例如:

TCHAR title[256];
int title_length = 256;
GetWindowText(spotify_window_handle, title, title_length);

或者:

int title_length = GetWindowTextLength(spotify_window_handle);
LPTSTR title = (LPTSTR) malloc((title_length+1) * sizeof(TCHAR));
GetWindowText(spotify_window_handle, title, title_length+1);
...
free(title);

关于c - GetWindowText 时替换字符\uFFFD(C 代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com