7

LS,我在 C# 应用程序中使用 FindWindow 方法从 Web 浏览器获取窗口句柄

[DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, string lpWindowName );

当窗口标题不包含像这里这样的 utf 字符时,它工作得很好:

string caption1 = "pinvoke.net: findwindow (user32) - Google Chrome";
int hwnd = FindWindow(null, caption1);

但是当窗口标题中存在 utf 字符时它会失败:

string caption2 = "Słownik języka polskiego - Google Chrome";
int hwnd2 = FindWindow(null, caption2);

例如 hwnd == 0

您能否向我提供任何建议,如何在 c# 应用程序中获取包含 utf-8 字符的浏览器窗口的句柄。提前致谢。

ps 我已经看到关于在 c++ 中使用 FindWindow 和 utf 的评论,说:“你可以显式地使用 Unicode 版本的 API HWND windowHnd = FindWindowW(NULL, L"Minesweeper");” 但我仍然不知道如何在 c# 中正确地做到这一点

4

1 回答 1

10

我自己没有尝试过,但你应该可以这样做:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int FindWindow(string lpClassName, string lpWindowName );

根据 MSDN 关于DllImportAttribute.CharSet Field的文章,默认假设为CharSet.Ansi,这将导致您描述的行为。

于 2013-05-23T14:55:35.487 回答