2013-05-23 13 views
6

LS, używam FindWindow metody w C# aplikacji, aby uzyskać uchwyt okna z przeglądarki internetowejUTF znaków podczas korzystania USER32.DLL FindWindow w C# aplikacji

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

to działa dobrze, gdy tytuł okna nie zawiera utf znaków jak tutaj:

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

ale nie kiedy UTF znaki są obecne w tytule okna:

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

np. hwnd == 0

Czy mógłbyś podać mi jakieś sugestie, jak uzyskać dostęp do okna przeglądarki zawierającego znaki UTF-8 w aplikacji C#. Z góry dzięki.

ps już widział komentarz na temat korzystania FindWindow z UTF w C++, mówiąc: "Można jawnie użyć wersji Unicode API HWND windowHnd = FindWindowW (NULL, L" Saper ");" ale ja nadal nie wiem jak to zrobić poprawnie w języku C#

+0

Tu nie ma żadnego UTF-8. To, co masz, to UTF-16. –

+0

Zobacz także http://msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx – rogerdpack

Odpowiedz

9

nie próbowałem ten sam, ale powinieneś być w stanie to zrobić:

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

Zgodnie z artykułem MSDN w sprawie DllImportAttribute.CharSet Field domyślnym założeniem będzie CharSet.Ansi, a to spowoduje zachowanie, które opisujesz.

+0

Thnx very much jszigeti! Działa jak urok! – user2413800

+0

@ user2413800 oznaczyć jako odpowiedź, następnie: D – jszigeti

+0

ps Próbowałem głosować na Ur pomagając mi odpowiedzieć, ale moja reputacja nie pozwala mi :) – user2413800

Powiązane problemy