gpt4 book ai didi

c# - 通过 UI 自动化清除 RichTextBox 文本?

转载 作者:行者123 更新时间:2023-11-30 12:38:08 25 4
gpt4 key购买 nike

在 C# 或 VB.NET 中,我想清除驻留在外部 WPF 应用程序中的只读 RichTextBox 控件的整个文本。该控件支持文本模式,但不支持值模式。

目标是防止此控件附加数千个新文本行,因为最后我注意到,当有很多很多文本行时,它会对应用程序的性能产生负面影响。

出于这个原因,或者,中断控件重绘(如果这在 WPF 语言中有任何意义,对不起,我来自 WinForms),或者欺骗最大字符限制,也可以(或者我认为所以)。


我进行了调查,但我不知道如何完成此操作,因为我认为该控件不提供 Win32 窗口句柄,或者至少不提供 AutomationElementInformation.NativeWindowHandle。此元素的属性为零,Microsoft's UI Inspect应用程序只给我主窗口的 win32 窗口句柄,如本报告所示:

How found:  Mouse move (1623,896)
hwnd=0x00000000009A0AFA 32bit class="HwndWrapper[processname.exe;;8b374e83-68a0-46c8-aa8b-c6792d5ff59e]" style=0x16CF0000 ex=0x4Name: ""
ControlType: UIA_DocumentControlTypeId (0xC36E)
LocalizedControlType: "document"
AutomationId: "rtbLog"
ClassName: "RichTextBox"
IsControlElement: true
IsContentElement: true
IsTextEditPatternAvailable: false
IsTextPatternAvailable: true
IsTextPattern2Available: false
IsValuePatternAvailable: false
...

...并且 Win32 API 中用于枚举窗口的典型函数在 hWnd 包装器提供的窗口句柄上找不到任何子窗口。

最佳答案

不幸的是,我不相信在一个已经只读的字段中影响其他人的程序的任何版本都会很容易。但是,让我向您提出一些想法,以帮助您激发创意。

在我看来,切实解决您的问题的唯一方法是:

  • 封装应用程序!从您控制的应用程序运行它并获得您的 Windows 句柄可能会容易得多。然后继续你之前的计划。为应用提供不同的父级可能会改变事物的层次结构并导致 WIN API 正确工作以找到句柄

  • 反编译并重新编译。 .NET 反编译相当干净,并且得到了很好的支持。临时解决方案,但相当快速和直接。

  • 打扰开发人员进行修复,直到他做出回应,如果您为此付费,我敢打赌他会看到电子邮件。

  • 像一个美丽的头脑程序员一样破解内存管理。可能是一个永久的解决方案,但非常困难

  • 这是我对你的问题的解读太多了,听起来这个应用程序在某处附加了数据。是否可以将时间戳附加到它附加的数据并创建一个单独的应用程序来管理该数据源?

  • 在减速微乎其微的环境中运行程序。如果该应用程序供客户使用,这无济于事,但如果它在办公室,这可能只是最直接的选择。

不幸的是,从合理编程的角度来看,我只能建议反编译 .NET 程序集并重新编译。这并不像听起来那么可怕! .NET 程序集反编译得非常好!我强烈推荐 Resharper DotPeek 和 ILSpy!

ILSpy 方便、免费、直接且可以完成工作。但重新编译不是内置的。您需要导出反编译的项目并自行编译或使用其他 IDE 进行编译。

Resharper 是高度管理的、更新良好的,并且 iirc 在 IDE 中包含一个重新编译的选项。可能是一个有效的永久解决方案,因为如果没有其他可行的解决方案,反编译和重新编译该解决方案将非常容易。

更新:

对于仍在寻找答案的任何人,有一个名为 FlaUI 的库.它是一个已封装用于 .NET 应用程序的 .NET 自动化库。它建立在现有 Windows.UIAutomation Native 框架之上。甚至可以启用基本 UIAutomation 框架中没有的一些功能。在这个和 FLAUIInspect 工具之间查看大多数窗口上的所有可用数据,我发现过去几个月通过这些工具 UI Automation 更加直接。

关于c# - 通过 UI 自动化清除 RichTextBox 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com