在C#中从外部应用程序获取UI文本
时间:2020-03-05 18:41:15 来源:igfitidea点击:
是否有可能从C#中的外部应用程序获取UI文本。
特别是,是否有一种方法可以从由第三方编写的外部Win32应用程序从标签(我认为它是普通的Windows标签控件)中读取Unicode文本?文本是可见的,但在UI中无法通过鼠标选择。
我假设有一些可访问性API(例如,供屏幕阅读器使用)允许该操作。
编辑:目前正在研究使用诸如Managed Spy App之类的东西,但仍然会感激其他线索。
解决方案
回答
如果该unicode文本实际上是带有标题的窗口,则可以执行此操作,方法是发送WM_GETTEXT消息。
[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);
如果只是将其绘制在画布上,那么如果我们知道应用程序使用的框架,则可能会有些运气。如果它使用WinForms或者Borland的VCL,则可以使用该知识来获得文本。
回答
在该文章中没有看到wm_gettext或者wm_gettextlength的值,以防万一。
const int WM_GETTEXT = 0x0D; const int WM_GETTEXTLENGTH = 0x0E;