当前位置: 首页 > 编程语言 > C#

在C#中从外部应用程序获取UI文本分享

时间:2023-04-11 00:13:46 C#

C#学习教程:在C#中从外部应用程序中获取UI文本特别是,有没有办法从第三方编写的外部Win32应用程序读取标签中的Unicode文本(我假设它是一个普通的Windows标签控件)?文本可见,但无法在UI中使用鼠标选择。我假设有一些可访问性API(例如屏幕阅读器)允许这样做。编辑:目前正在寻找使用诸如管理员间谍应用程序之类的东西,但仍会感谢任何其他线索。如果该unicode文本实际上是一个带有标题的窗口,您可以通过发送WM_GETTEXT消息来实现。[DllImport("user32.dll")]publicstaticexternintSendMessage(IntPtrhWnd,intmsg,intParam,System.Text.StringBuildertext);System.Text.StringBuildertext=newSystem.Text.StringBuilder(255);//或使用GETTEXTLENGTH调用的长度intRetVal=Win32.SendMessage(hWnd,WM_GETTEXT,text.Capacity,text);如果它只是在画布上绘图,那么如果您知道应用程序使用的框架,您可能会有些运气。如果它使用WinForms或Borland的VCL,您可以使用这些知识来获取文本。如果您只关心标准的Win32标签,那么WM_GETTEXT可以正常工作,如其他答案中所述。-有一个辅助API-UIAutomation-用于标准标签,它也在幕后使用WM_GETTEXT。然而,它的一个优点是它可以从其他几种类型的控件中获取文本,包括大多数系统控件和通常使用非系统控件的UI——包括WPF、IE和Firefox等中的文本。//编译为://cscfile.cs/r:UIAutomationClient.dll/r:UIAutomationTypes.dll/r:WindowsBase.dllusingSystem.Windows.Automation;使用System.Windows.Forms;使用系统;classTest{publicstaticvoidMain(){//获取指针下的元素。您还可以从//HWND句柄或通过导航UI树获取AutomationElement。System.Drawing.Pointpt=Cursor.Position;AutomationElementel=AutomationElement.FromPoint(newSystem.Windows.Point(pt.X,pt.Y));//打印它的名字——通常是上下文,但也可能是可编辑控件的相应标签文本。还可以获得控件的类型、位置等属性。Console.WriteLine(el.Current.Name);}}在那篇文章中没有看到wm_gettext或wm_gettextlength的值,所以以防万一。以上是C#学习教程:从C#中的外部应用程序获取UI文本共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——constintWM_GETTEXT=0x0D;constintWM_GETTEXTLENGTH=0x0E;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除除非转载,否则请注明出处: