none
C# WPF WinAPI RRS feed

  • Вопрос

  • Здравствуйте. Есть код:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Runtime.InteropServices;
    
    
    
    
    
    /// <summary>
    
    /// Класс обертка для WinAPI
    
    /// </summary>
    
    public static class WinAPI
    
    {
    
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        public static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
    
        [DllImport("user32.dll", SetLastError = true)]
    
        public static extern IntPtr GetWindow(IntPtr HWnd, GetWindow_Cmd cmd);
    
    
    
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
    
        public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, [Out] StringBuilder lParam);
    
    
    
        public enum GetWindow_Cmd : uint
    
        {
    
            GW_HWNDFIRST = 0,
    
            GW_HWNDLAST = 1,
    
            GW_HWNDNEXT = 2,
    
            GW_HWNDPREV = 3,
    
            GW_OWNER = 4,
    
            GW_CHILD = 5,
    
            GW_ENABLEDPOPUP = 6,
    
            WM_GETTEXT = 0x000D
    
        }
    
    }
    
    
    
    namespace WpfApp3
    {
        /// <summary>
        /// Логика взаимодействия для MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void button_click(object sender, EventArgs e)
    
            {
    
                IntPtr ptr = WinAPI.FindWindow(null, "MainWindow");
    
                //Если окно найдено, то отбращаемся к его дочерним объектам
    
                if (ptr.ToInt32() != 0)
    
                {
    
                    IntPtr[] child = new IntPtr[15];
    
                    child[0] = WinAPI.GetWindow(ptr, WinAPI.GetWindow_Cmd.GW_CHILD);
    
                    StringBuilder title = new StringBuilder(20);
    
                    for (int i = 1; i <= 5; i++)
    
                    {
    
                        child[i] = WinAPI.GetWindow(ptr, WinAPI.GetWindow_Cmd.GW_HWNDNEXT);
    
                        /* ! */
                        WinAPI.SendMessage(child[i - 1], Convert.ToInt32(WinAPI.GetWindow_Cmd.WM_GETTEXT), (IntPtr)title.Capacity, title);
    
                        treeView.Items.Add(title.ToString());
    
    
    
    
                    }
    
                }
    
            }
        }
    }
    

    Почему в TreeView выводятся иероглифы, а не нормальный читаемый текст?

    17 июля 2018 г. 10:52

Ответы

  • Здравствуйте,

    Попробуйте изменить стиль текста, к примеру на Lucida Sans.


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    17 июля 2018 г. 13:13
    Модератор