【发布时间】:2010-11-11 20:27:47
【问题描述】:
我有一个作为 Windows 窗体 .net 应用程序实现的旧版应用程序。它允许编写事件脚本(使用 vbs),但不允许改进它的 UI。
是否可以将一些自定义用户控件注入到遗留应用程序控件树中,以便进一步通过脚本功能与它们进行通信?
附言遗漏了遗留应用程序代码。从头开始重写也是不可能的
【问题讨论】:
我有一个作为 Windows 窗体 .net 应用程序实现的旧版应用程序。它允许编写事件脚本(使用 vbs),但不允许改进它的 UI。
是否可以将一些自定义用户控件注入到遗留应用程序控件树中,以便进一步通过脚本功能与它们进行通信?
附言遗漏了遗留应用程序代码。从头开始重写也是不可能的
【问题讨论】:
如果您竭尽全力并付出很多努力,我相信使用反射和代码重写或任何类似的东西都是可能的。但是,通过更改源代码然后重新编译来简单地修改 GUI,几乎可以肯定会更简单、更省时、更不容易出错。
如果您的 GUI 并不意味着灵活,那么应该通过重新设计或重构代码来使其灵活,而不是通过将现有代码滥用到它不应该做的事情中。
更新#1:正如评论中所说,由于您不再拥有源代码,因此重新编译的选项消失了。除非您从头开始重新编写应用程序或通过逆向工程工具(如 .NET Reflector)检索部分源代码。 (假设代码没有被混淆。)
更新#2:如果你想走枚举HWNDs(Win32窗口句柄)的路线,你可能会对一个相关的问题感兴趣:即修改Windows'默认文件打开/保存对话框。如果您想在这些对话框中插入或更改控件,则基本上必须处理HWNDs,然后使用本机 Win32 API 函数通过这些操作控件。
【讨论】:
Form 对象,包括它的所有子对象 Controls 只是从一个HWND -- 并坚持使用 Win32 API。我相信很有可能遍历一个过程'HWNDs(以查找表单)并找到一个特定HWND 的所有子HWNDs(控件)。