2013-05-23 138 views
6

LS, Tôi đang sử dụng FindWindow phương pháp trong C# ứng dụng để có được xử lý cửa sổ từ trình duyệt webký tự utf khi sử dụng FindWindow user32.dll trong C# ứng dụng

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

nó hoạt động tốt khi tiêu đề cửa sổ không chứa utf chars như ở đây:

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

nhưng nó không thành công khi ký tự utf có mặt trong tiêu đề cửa sổ:

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

ví dụ: hwnd == 0

Bạn vui lòng cung cấp cho tôi bất kỳ đề xuất nào về cách xử lý cửa sổ trình duyệt chứa các ký tự utf-8 trong ứng dụng C#. Cảm ơn trước.

ps Tôi đã nhìn thấy những nhận xét về việc sử dụng FindWindow với utf trong C++, nói: "Bạn rõ ràng có thể sử dụng phiên bản Unicode của API HWND windowHnd = FindWindowW (NULL, L" Minesweeper ");" nhưng tôi vẫn không biết làm thế nào để làm điều đó đúng trong C#

+0

Không có UTF-8 ở bất cứ đâu tại đây. Những gì bạn có là UTF-16. –

+0

Xem thêm http://msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx – rogerdpack

Trả lời

9

Tôi đã không cố gắng này bản thân mình, nhưng bạn sẽ có thể làm điều này:

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

Theo bài báo MSDN của trên DllImportAttribute.CharSet Field , giả định mặc định sẽ là CharSet.Ansi và điều đó sẽ dẫn đến hành vi bạn mô tả.

+0

Thnx rất nhiều jszigeti! Hoạt động như một sự quyến rũ! – user2413800

+0

@ user2413800 đánh dấu nó là câu trả lời, sau đó: D – jszigeti

+0

ps Tôi đã cố gắng bỏ phiếu cho câu trả lời giúp Ur, nhưng danh tiếng của tôi sẽ không cho phép tôi :) – user2413800