Získání Text uživatelského rozhraní od externí aplikace v jazyce C #

hlasů
4

Je možné se dostat UI textu z externí aplikace v jazyce C #.

Především je tu způsob, jak číst text Unicode z etikety (předpokládám, že je to normální kontrolní nálepka Windows) z externího Win32 aplikace, která byla napsána v 3rd party? Text je viditelný, ale nelze zvolit pomocí myši v uživatelském rozhraní.

Předpokládám, že tam je nějaká dopravní dostupnost API (např určen pro čtení z obrazovky), který toto umožňuje.

Edit: V současné době hledá do použití něco jako Managed Spy App ale přesto ocení všechny ostatní kabely.

Položena 20/08/2008 v 20:43
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
5

Dalo by se to udělat v případě, že unicode text je ve skutečnosti okno s titulkem zasláním WM_GETTEXT zprávy.

[DllImport("user32.dll")]
public static extern int SendMessage (IntPtr hWnd, int msg, int Param, System.Text.StringBuilder text);

System.Text.StringBuilder text = new System.Text.StringBuilder(255) ;  // or length from call with GETTEXTLENGTH
int RetVal = Win32.SendMessage( hWnd , WM_GETTEXT, text.Capacity, text);

Pokud je to jen namalovaný na plátně můžete mít trochu štěstí, pokud víte, co framework aplikace používá. Pokud používá WinForms nebo Borland VCL můžete použít tyto znalosti se dostat do textu.

Odpovězeno 20/08/2008 v 21:04
zdroj uživatelem

hlasů
2

Neviděl hodnoty pro WM_GETTEXT nebo wm_gettextlength v tomto článku, tak jen v případě, že ..

const int WM_GETTEXT = 0x0D;
const int WM_GETTEXTLENGTH = 0x0E;
Odpovězeno 20/08/2008 v 22:08
zdroj uživatelem

hlasů
5

Pokud jste právě péče o standardního označení Win32, pak WM_GETTEXT bude fungovat dobře, jak je uvedeno v další odpovědi.

-

K dispozici je dopravní dostupnost API - UIAutomation - pro standardní etikety, to taky používá v zákulisí WM_GETTEXT. Jednou z výhod, které jí však je, že se může dostat textu z několika dalších typů kontrol, včetně většiny řídicích systémů, a často UI pomocí ovládacích prvků nesystémových - včetně WPF, text v IE a Firefox a další.

// 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 );
    }
}
Odpovězeno 14/06/2012 v 23:34
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more