Windows程序管理器(progman.exe)作为Windows 3.x和Windows NT 3.x的默认外壳,它包含对程序组和程序项的管理,以及一个简单的运行对话框和关机对话框。虽然在Win9x/NT4中被资源管理器取代,但其本体一直被保留至Windows XP SP1。自1992年以来,其源代码近十年几乎未作出任何改动。如上,我们可以从OpenNT 4.5的源代码中提取progman.exe的源代码,仅对其进行最小改动(转换为VS解决方案、可在x86/x64/arm64架构上编译和运行、补全位于代码树其他位置的头部文件、删除无用文件、将内部二进制算术转换为C语言、将内部Shell API转换为公共API),即可让它在现代Windows上运行。
虽然对现代Windows而言progman.exe早就应该被扔进历史的垃圾堆,但是这东西在某些特殊环境下还是有点用的,比如没有GUI的ServerCore。
然而,原始版本的progman.exe拥有自己的图标渲染引擎,在64位的Windows上表现并不完美。与系统自带的外壳图标渲染引擎相比,其主要差异包括:
- 无法读取64位PE文件中的图标
- 不支持NT6.x下带mun的dll文件
- 支持在64位Windows下读取Win16 NE文件中的图标
- 对高彩色图标的支持不受系统设置(Shell Icon BPP)影响
如上,要想做到更加完美,除替换过时API外,还需要进行以下改动:
- 运行对话框、关机对话框和图标渲染引擎改用shell32的API实现
- 添加上下文菜单和标准快捷键(Ctrl+C、Ctrl+V)支持
- 启用Common Controls 6.0,让窗体上的控件用uxtheme渲染
此外,由于现代Windows砍掉了winhlp32帮助引擎,所以可以从Windows Me的安装文件中提取progman.chm以替换原有的progman.hlp。