在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包装器提供的窗口句柄上找不到任何子窗口。
不幸的是,我不相信在已经只读的字段中影响别人程序的任何版本都会很容易。但是,让我向您提出一些可以帮助您获得创意果汁的想法。
在我看来,实际解决您的问题的唯一方法是:
不幸的是,从声音编程的角度来看,我只能建议反编译.NET程序集并重新编译。虽然这听起来并不可怕! .NET程序集反编译得非常好!我推荐Resharper DotPeek和ILSpy!
ILSpy方便,免费,直接并完成工作。但是没有内置的重新启动。您需要导出反编译的项目并自行编译或使用其他IDE编译。
Resharper是高度管理的,更新的,并且iirc包含一个在IDE中重新编译的选项。可能是一个有效的永久解决方案,因为如果没有其他方法是可行的解决方案,反编译和重新编译解决方案将非常容易。
我想你正在寻找这个(snoopwpf)
Snoop是Pete Blois在微软工作时创建的开源WPF间谍工具,现在由我自己维护Cory Plotts。随着时间的推移,一些人增加了贡献,最着名的是:Dan Hanan,Andrei Kashcha,Maciek Rakowski,Bailey Ling和Bastian Schmidt。
它允许您间谍/浏览正在运行的应用程序的可视树(无需调试器)......并更改属性......等等。