Getting UI text from external app in C#

后端 未结 3 1215
小鲜肉
小鲜肉 2021-01-01 04:00

Is it possible to get UI text from an external application in C#.

In particular, is there a way to read Unicode text from a label (I assume it\'s a normal Windows l

3条回答
  •  囚心锁ツ
    2021-01-01 04:37

    If you just care about the standard Win32 label, then WM_GETTEXT will work fine, as outlined in the other answers.

    --

    There is an accessibility API - UIAutomation - for standard labels, it too uses WM_GETTEXT behind the scenes. One advantage to it, however, is that it can get text from several other types of controls, including most system controls, and often UI using non-system controls - including WPF, text in IE and Firefox, and others.

    // compile as:
    // csc file.cs /r:UIAutomationClient.dll /r:UIAutomationTypes.dll /r:WindowsBase.dll
    using System.Windows.Automation;
    using System.Windows.Forms;
    using System;
    
    class Test
    {
        public static void Main()
        {
            // Get element under pointer. You can also get an AutomationElement from a
                // HWND handle, or by navigating the UI tree.
            System.Drawing.Point pt = Cursor.Position;
            AutomationElement el = AutomationElement.FromPoint(new System.Windows.Point(pt.X, pt.Y));
            // Prints its name - often the context, but would be corresponding label text for editable controls. Can also get the type of control, location, and other properties.
            Console.WriteLine( el.Current.Name );
        }
    }
    

提交回复
热议问题