Compare commits

...

64 Commits

Author SHA1 Message Date
WindowsNT351
1166c60d51
Update README.md 2025-08-25 21:08:48 +08:00
WindowsNT351
fd0359a37c 2.02 Readme 2025-08-25 21:04:56 +08:00
WindowsNT351
484fc1b738
Update README.md 2025-08-24 19:50:08 +08:00
WindowsNT351
2c7fb2ee94
Update README.md 2025-08-24 19:06:11 +08:00
WindowsNT351
62c66fec6c
Update README.md 2025-08-24 19:01:07 +08:00
WindowsNT351
e9baf36447 202C102 2025-08-24 18:59:26 +08:00
WindowsNT351
70f2860221
Update README.md 2025-08-23 13:08:14 +08:00
WindowsNT351
7451b9cdb2
Update README.md 2025-08-23 12:20:10 +08:00
WindowsNT351
f6aa765b4d Update README.md 2025-08-22 21:35:29 +08:00
WindowsNT351
47aa52ee2a Update README 2025-08-22 21:32:58 +08:00
WindowsNT351
4c73dfbffc
Update README.md 2025-08-22 21:08:33 +08:00
WindowsNT351
6393084f54
Update README.md 2025-08-22 20:59:51 +08:00
WindowsNT351
426d4b8e54
Update README.md 2025-08-22 20:41:59 +08:00
WindowsNT351
3c16010d41
Update README.md 2025-08-22 20:19:41 +08:00
WindowsNT351
b50be14f3b
Update README.md 2025-08-22 20:18:29 +08:00
WindowsNT351
e7330cd0fe
Update README.md 2025-08-22 20:18:06 +08:00
WindowsNT351
8f25400991
Update README.md 2025-08-22 20:17:22 +08:00
WindowsNT351
c8fc4b101c 202C101 2025-08-22 16:01:40 +08:00
WindowsNT351
002e7b3c5b
Update README.md 2025-08-21 15:43:12 +08:00
WindowsNT351
0fe5b9320f
Update README.md 2025-08-21 15:40:53 +08:00
WindowsNT351
ee96f06234
Update README.md 2025-08-21 15:38:16 +08:00
WindowsNT351
b9be8f4746 update readme 2025-08-21 15:16:45 +08:00
WindowsNT351
afa21246ae 202B105 2025-08-21 15:08:59 +08:00
WindowsNT351
c952d07516 202B105 2025-08-20 20:30:09 +08:00
WindowsNT351
0d833b1313
202B105 2025-08-20 16:21:24 +08:00
WindowsNT351
e646930fe4 202B105 2025-08-19 16:45:54 +08:00
WindowsNT351
b90ea3d6f8
202B105 2025-08-18 21:34:03 +08:00
WindowsNT351
5581c18bd8 202B105 2025-08-18 14:36:08 +08:00
WindowsNT351
54ffedacee 202B104 2025-08-10 18:58:44 +08:00
WindowsNT351
5fe72cef2a 202B102 2025-07-09 16:21:42 +08:00
WindowsNT351
7f435ff783
Update README_EN.md 2025-04-20 11:14:30 +08:00
WindowsNT351
42c21b6a89
Update README.md 2025-04-20 11:14:12 +08:00
WindowsNT351
5f858be3cf
Update README_EN.md 2025-02-07 21:41:20 +08:00
WindowsNT351
3e46772429
Update README.md 2025-02-07 21:41:02 +08:00
WindowsNT351
259f2c563a
Update README_EN.md 2025-02-07 21:40:15 +08:00
WindowsNT351
045d733578
Update README.md 2025-02-07 21:39:51 +08:00
WindowsNT351
f44c8768a2
Update README_EN.md 2025-02-07 21:37:30 +08:00
WindowsNT351
81f96c3ddf
Update README.md 2025-02-07 21:36:15 +08:00
WindowsNT351
61ae773f22 readme 2025-02-07 21:32:42 +08:00
WindowsNT351
290cb992e4
Update README_EN.md 2025-02-07 21:29:26 +08:00
WindowsNT351
0baca08d13
Update README.md 2025-02-07 21:20:52 +08:00
WindowsNT351
c9817c23e5
Update README_EN.md 2024-08-27 13:59:03 +08:00
WindowsNT351
661025fe1e
Update README.md 2024-08-27 13:58:19 +08:00
WindowsNT351
7390ed79d7
Update README.md 2024-08-27 13:57:41 +08:00
WindowsNT351
11a9b235a5
Update README.md 2024-08-23 16:23:22 +08:00
WindowsNT351
78a2ebccf5
Update README_EN.md 2024-08-21 20:03:16 +08:00
WindowsNT351
0258a742ae
Update README.md 2024-08-21 16:14:39 +08:00
WindowsNT351
7dfea0158c
Update README_EN.md 2024-08-21 16:12:32 +08:00
WindowsNT351
0a6c025148
Update README_EN.md 2024-08-21 16:06:32 +08:00
WindowsNT351
645dc67cac
Update README.md 2024-08-21 16:00:48 +08:00
WindowsNT351
f485f1e31d
Update README.md 2024-08-21 15:53:49 +08:00
WindowsNT351
00be57c2d3
Update README.md 2024-08-21 15:24:57 +08:00
WindowsNT351
3e3ff63cdc
Update README.md 2024-08-21 15:24:36 +08:00
WindowsNT351
bda64c81a8
Update README.md 2024-08-21 15:12:35 +08:00
WindowsNT351
78af0daa47
Update README.md 2024-08-21 15:12:02 +08:00
WindowsNT351
711c11e0e2 Update cetl.png 2024-08-21 14:29:51 +08:00
WindowsNT351
e09fea8a0b
Update README_EN.md 2024-08-21 14:25:28 +08:00
WindowsNT351
66a6df7902
Update README.md 2024-08-14 19:50:33 +08:00
WindowsNT351
a0a71f9d81 201C101 2024-08-14 17:21:29 +08:00
WindowsNT351
628838bdf4
Update README_EN.md 2024-08-08 18:04:44 +08:00
WindowsNT351
d0c435e777
Update README_EN.md 2024-08-08 18:04:28 +08:00
WindowsNT351
ed3c72c32b
Update README.md 2024-08-08 18:03:05 +08:00
WindowsNT351
7433f0f309 Update cetl.png 2024-08-08 18:01:43 +08:00
WindowsNT351
61ce5e589f
Update README_EN.md 2024-08-08 17:56:29 +08:00
84 changed files with 3797 additions and 1669 deletions

View File

@ -1,5 +1,5 @@
/*CEVCHECK.EXE for CECollections P2.0 2.01*/ /*CEVCHECK.EXE for CECollections 2.02*/
/*Copyright 351Workshop 2022-2024*/ /*Copyright 351Workshop 2022-2025*/
/*Build on Tubro C++*/ /*Build on Tubro C++*/
/*Run on x86 DOS*/ /*Run on x86 DOS*/
@ -11,17 +11,17 @@ int main(int argc, char **argv)
{ {
if (argc == 1) if (argc == 1)
{ {
printf("\nWindows CE video support checking program\n\n"); printf("\nWindows CE video & CPU support checking program\n\n");
printf("Usage: cevcheck [CEVER]\n"); printf("Usage: cevcheck [CEVER]\n");
printf("CEVER sample: 211STD\n\n"); printf("CEVER sample: 211STD\n\n");
printf("Return: VESASupport*10+MobileSupport\n\n"); printf("Return: NormolCPUSpt*100 + LegacyDisp*10 + InverDisp\n\n");
printf("Last build:ver.201B101 Copyright 351Workshop 2022-2024\n"); printf("Last build:ver.202B102 Copyright 351Workshop 2022-2025\n");
return -1; return -1;
} }
if(!(argv[1][0] >= '0' && argv[1][0] <= '9')) if(!(argv[1][0] >= '0' && argv[1][0] <= '9'))
return 100; return 200;
char CEID[10] = {0}; char CEID[10] = {0};
strcpy(CEID, argv[1]); strcpy(CEID, argv[1]);
@ -32,6 +32,7 @@ int main(int argc, char **argv)
char CEEdion[10] = { 0 }; char CEEdion[10] = { 0 };
strncpy(CEEdion, CEID + 3, 3); strncpy(CEEdion, CEID + 3, 3);
int currentCPUSupport = 1;
int currentVESASupport = 1; int currentVESASupport = 1;
int currentHalfSupport = 0; int currentHalfSupport = 0;
@ -41,10 +42,16 @@ int main(int argc, char **argv)
else else
currentVESASupport = 0; currentVESASupport = 0;
if (iCEVer <= 210)
currentCPUSupport=0;
else
currentCPUSupport=1;
if ((CEEdion[0] == 'S' && CEEdion[1] == 'P' && CEEdion[2] == 0) || (CEEdion[0] == 'P' && CEEdion[1] == 'P' && CEEdion[2] == 'C' && CEEdion[3] == 0)) if ((CEEdion[0] == 'S' && CEEdion[1] == 'P' && CEEdion[2] == 0) || (CEEdion[0] == 'P' && CEEdion[1] == 'P' && CEEdion[2] == 'C' && CEEdion[3] == 0))
currentHalfSupport = 1; currentHalfSupport = 1;
else else
currentHalfSupport = 0; currentHalfSupport = 0;
return currentVESASupport * 10 + currentHalfSupport; printf("%d",currentCPUSupport * 100 + currentVESASupport * 10 + currentHalfSupport);
return currentCPUSupport * 100 + currentVESASupport * 10 + currentHalfSupport;
} }

386
README.md
View File

@ -1,74 +1,354 @@
<div align="center"> <div align="center">
<img alt="LOGO" src="./WNT/menu3.exe/res/about.bmp" /><br />
<img alt="LOGO" src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/WNT/menu2.exe/res/about.bmp" /><br /> <h1>CE Collections -2.02-</h1>
# CE Collections -2.01- <p>不止一个合集</p>
不止一个合集<br /><br /> <p>
English version: <a href="./README_EN.md">https://github.com/WindowsNT351/CE-Collections/blob/main/README_EN.md</a><br />
English version: https://github.com/WindowsNT351/CE-Collections/blob/main/README_EN.md </p>
</div> </div>
### ONEW CE Collections ---
## ❓什么是CE Collections<br />
CE Collections集合了几乎所有的CECE内核基础的官方版本如Windows Mobile镜像和模拟器包括使用Loadcepc引导的x86Bin镜像、使用DeviceEmulator引导的ArmBin镜像和适用于Windows NT的Shell模拟器。<br />
## 📥如何使用 # ✏️ 什么是 CE Collections
**本镜像不止能在虚拟机里启动使用CEPCx86镜像还能在Windows中打开MENU2.EXE,使用其他形式镜像/模拟器两个平台直接引导和Windows启动)能启动的Windows CE版本不同!!!!!** <br /><br /> CE Collections 集合了几乎所有基于 CE 内核的官方Windows版本例如 Windows CE Core,Windows Mobile,Windows Phone等的镜像和模拟器。
将iso载入虚拟光驱或虚拟机里推荐Windows XP SP3因为Windows PPC 2000模拟器无法在NT6.x上运行打开根目录下的WNT\MENU2.exe选择想要开启的Windows CE版本单击Run即可打开模拟器<br />
在引导早期的CE时菜单可能会询问是否使用高分辨率模式这是因为现代虚拟机无法正常模拟当时的显卡导致早期CE只能用低分辨率模式如果想使用高分辨率模式请使用PCEM或者86Box等可以模拟当时的硬件的模拟器推荐使用PCEM中的S3 ViRGE<br />
## ❓QA: 镜像包括:
Q:从光盘引导后选择Windows CE 2.x到Windows 3.x黑屏 A:分辨率可能选错了在VMware等虚拟机中需要使用低分辨率模式另外VMware新版本在模拟老系统时非常卡也有可能导致黑屏。<br /> - 使用 Loadcepc 引导的 x86Bin 镜像
Q:我已经使用了PCem但是依旧用不了高分辨率 A:在PCem中需要选择S3 ViRGE显卡搭配性能大于等于486/33的CPU才能使用高分辨率。<br /> - 使用 DeviceEmulator 引导的 ArmBin 镜像
Q:PCem中无法引导光盘 A:使用7Zip等压缩软件打开ISO文件解压[boot]下的img文件并从软盘引导。<br /> - 使用 XDE Emulator 引导的 ArmBin 镜像
Q:关机怎么用不了 A:真就用不了。<br />
Q:在CEPC引导器中选择完系统后显示Error image section doesn't fit in allocated block A:内存太小了,调大内存。<br /> 模拟器包括:
Q:Windows EC 2013引导后黑屏 A:创建虚拟机时不要使用VMware的DOS换用Windows XP。<br /> - 适用于 Windows 7-11 的 <a href="https://github.com/WindowsNT351/Whitebox">Whitebox</a> 模拟器
Q:Windows Mobile分辨率太抽象了 A:换另一个分辨率选项试试。<br /> - 适用于 Windows XP-11 的 Arm DeviceEmulator 模拟器
Q:Shell Emulator无法多个一起启动 A:不要多个Shell Emulator一起启动若不小心一起启动请注销或重启并运行[CDROM]:\WNT\200HPC\ceu.reg。<br /> - 适用于 Windows 7 - 8.1 的 XDE Emulator 模拟器
Q:Windows PPC 2000没法在Windows Vista及以上系统工作 A:没办法Windows API不兼容所以最好的体验Shell Emulator的系统是Windows XP。<br /> - 适用于 Windows NT(4.0-11,部分版本不支持新的Windows版本) 的独立 Shell 模拟器
Q:为什么整体是英文的? A:英文的镜像比较全好Build所以选了英文版镜像菜单啥的适配镜像就全是英文的了<br />
Q:我的Windows CE/Mobile实体机不起动了你能帮帮我吗 A:6<br /> # 📥 如何使用
Q:你能把其他Windows集成进来吗 A:看看项目名啊啊啊啊啊<br /> ## WinNT平台模拟器使用方法
1. 在插入光盘之前启动宿主操作系统NT4.0-Win11
2. 插入光盘并等待弹出菜单,如果没有,运行[CD(DVD)ROM]\WNT\Menu3.exe。
3. 选择要启动的操作系统(模拟器)。注意,当使用不同的主机操作系统时,会有一些不同的限制。
- Windows NT 4.0 可用Shell Emulator这是Shell Emulator的最佳宿主操作系统。
- Windows 2000 - XP 可以Shell Emulatorx64宿主系统上不能运行Auto PC 1.0和ARM DeviceEmulator。
- Windows 7 - 8.1 可用Shell EmulatorPocket PC 2000和x64宿主系统上的Auto PC 1.0除外ARM DeviceEmulator、XDE Emulator和Whitebox Emulator。
- Windows 10 - 11 可用Shell EmulatorPocket PC 2000和x64宿主系统上的Auto PC 1.0除外ARM DeviceEmulator和Whitebox Emulator。
<img src="./menuwnt.png" width="900px;" alt=""/>
4. 完成!
## CEPC平台使用方法
**注意CEPC平台并不能启动全部镜像或模拟器。**
1. 插入光盘(或启动软盘)并从中启动。
2. 选择要启动的操作系统,[下一页]和[上一页]按键位于右下角和左下角。注意,启动镜像时存在一些限制。
- 全部镜像
- 请使用大于64MB以上的内存否则有些过大的镜像不能装载进内存或可用运行用内存过小推荐使用128MB。
- Windows CE 2.0-2.10
- 对于PCem、VMware、VBox、Qemu现代实体机或其他现代虚拟机这些镜像无法正常启动。
- 对于86Box请使用WinChip CPU并关闭动态重编译器。
- 对于实体机请使用486或Pentium586CPU。
<img src="./menudos.png" width="800px;" alt=""/>
3. 选择想使用的分辨率或确认启动。请注意,启动镜像有时存在一些限制。
- VGA8BPP显示驱动
- 对于VMware、VBox、Qemu或其他现代虚拟机只能使用低分辨率模式。
- 对于86Box PCem或实体机务必使用S3视频卡WinCE2.0使用S3Trio64其他版本使用S3Virge这样能开启高分辨率否则只能使用低分辨率。
- Windows Mobile 的VESA显示驱动
- 由于Windows Mobile显示为竖向有些显卡在遇到此分辨率时会显示错误发生这种情况时请尝试使用另一个分辨率。
<img src="./menudos2.png" width="800px;" alt=""/>
<img src="./menudos3.png" width="800px;" alt=""/>
4. 完成!
# 🔧 CE-Collections 各部分是如何工作的
## WinNT Platform
1. 插入光盘,自动打开[CD(DVD)ROM]:\WNT\Menu3.exe
2. Menu3.exe加载显示[CD(DVD)ROM]:\WNT\menu.enus配置文件加载[CD(DVD)ROM]:\CECV20.D0版本配置文件。
3. 选择要启动的模拟器/镜像
- Shell Emulator类
1. 使用shellmgr [模拟器种类] [路径] [主程序名称]。
2. shellmgr将模拟器复制到系统用户TEMP文件夹。
3. shellmgr检测宿主系统是否符合当前模拟器。
4. shellmgr对于不同模拟器做准备工作。
- WinCE 1.0 设置需要的环境变量
- HPC/PPC 2.x 替换模板注册表内模拟器路径,合并注册表
- PPC 2000 替换模板注册表内模拟器路径,合并注册表(不同的目录结构)
- APC 1.0 替换模板注册表内模拟器路径合并注册表加载WCEFS.sys驱动如果是Windows Vista以上系统循环终止ApcHook.sys(如果不终止会导致系统蓝屏)。
5. shellmgr启动对应的主程序。
6. shellmgr等待主程序关闭。
7. shellmgr卸载装载的驱动删除临时文件。
- ARM DeviceEmulator类
1. 直接使用DeviceEmulator /video [适用于本镜像的分辨率] /memsize 256
- CEPC WhiteboxEmulator类
1. 直接使用Whitebox [分辨率选择见CEPC相比于DOSCEPC此处区分更详细] /M:[对应的86Box配置文件] [NK.bin]
- XDE Emulator类
1. 使用xdemgr [XDE版本] [NK.bin]。
2. xdemgr检测宿主系统是否符合当前模拟器。
3. xdemgr复制XDE的VMM.sys(系统为32位)或VMM64.sys(系统为64位)到TEMP文件夹并加载。
4. xdemgr复制XDE的配置文件到TEMP文件夹。
5. xdemgr启动XDE模拟器。
6. xdemgr等待XDE关闭。
7. xdemgr卸载驱动删除临时文件。
## CEPC Platform
1. 插入光盘/启动软盘并从中引导至MS-DOS 7.1。
2. 加载LOGO.sys显示启动logo。加载光驱驱动IDE
3. 检测D:是否为CE-Collections光盘若不是遍历寻找。
4. 打开[CD(DVD)ROM]:\DOS\Menu.bat加载[CD(DVD)ROM]:\CECV20.D0版本配置文件。
5. 用户选择启动的镜像。
6. 自动检测选择的镜像为何种镜像2.0-2.10/2.11-2.12 HPC2000/3.0-2013/WinMobile
- 2.0-2.10
1. 显示警告提示框。
2. 使用Loadcepc /D:3 [NK.bin]
- 2.11-2.12 HPC2000
1. 显示分辨率选择提示框。
2. 高分辨率使用Loadcepc /D:3 [NK.bin]
低分辨率使用Loadcepc /D:0 [NK.bin](此分辨率几乎不可用)
- 3.0-2013
1. 显示确认启动提示框。
2. 使用Loadcepc /L:800x600x16 [NK.bin]
- WinMobile
1. 显示分辨率选择提示框。
2. 修复分辨率使用Loadcepc /L:175x240x16 [NK.bin]
原始分辨率使用Loadcepc /L:320x400x16 [NK.bin]
### Loadcepc是什么
Loadcepc是Windows CE x86镜像的引导器Bootloader起到将NK.bin加载至内存设置显示分辨率跳转到指定地址的作用。
DOS只是CE启动的跳板CE启动后DOS提供的中断例程和驻留在内存的程序将不可用x86CE不是基于DOS的。
# ❓ QA
Q: 在 86Box 或 PCem 中无法引导光盘
A: 请使用 7Zip 等压缩软件打开 ISO 文件,解压 [boot] 文件夹中的 img 文件,然后从软盘引导。
Q: 在 CEPC 引导器中选择完系统后显示 “Error image section doesn't fit in allocated block”
A: 内存可能设定过小,请适当调大内存。
Q: Windows EC 2013 引导后黑屏
A: 内存可能设定过小,请适当调大内存。
Q: 为什么我在WinNT Loader里面打开某个版本后没有反应
A: 可能是窗口在Menu背后打开或者宿主系统版本低于本模拟器所需的版本。
Q: 为什么整体内容是英文的?
A: 因为英文镜像资源较全,构建也较完善,所以选择了英文版镜像;菜单等内容也相应采用英文格式。
Q: 我的 Windows CE/Mobile 实体机无法启动,能帮忙解决吗? / 能帮我安装一下这个WinCE软件吗
A: 无法回答。
Q: 你能把其他 Windows 系统集成进来吗?
A: 请看项目名称——答案自明。
## ❗以下是本项目集成的CE镜像和模拟器 # 🔨 本项目集成的 CE 镜像和模拟器
绿色:支持 黄色:有资源,可集成,但未集成 浅黄色:有资源,技术不可集成 红色:无资源<br />
<img src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/cetl.png"/>
## ℹ关于 | | | | CE-Collections Supporting | | |
本项目由ONEW成员共同开发<br /><br /> |---------------------------|---------|--------------|-----------------------------------|----------------------|----------------------|
| | Version | Core Version | Name | Shell | Emulator |
| | 1.x | 1.00 | Windows CE 1.00 | ----- | Shell Emulator |
| | | 1.01 | Windows CE 1.01 | ----- | Shell Emulator |
| | 2.x | 2.00 | Windows CE 2.0(or 2.01?) | ----- | CEPC |
| | | | Handheld PC 2.0 | ----- | Shell Emulator |
| | | 2.01 | Auto PC 1.0 | ----- | Shell Emulator |
| | | | Palm-size PC 1.0 | ----- | Shell Emulator |
| | | 2.10 | Windows CE 2.10 | ----- | CEPC |
| | | 2.11 | Windows CE 2.11 | ----- | CEPC |
| | | | Palm-size PC 1.1<br>(Simplified Chinese) | ----- | Shell Emulator |
| | | | Palm-size PC 1.2 | ----- | Shell Emulator |
| | | | Handheld PC 3.0 | ----- | Shell Emulator |
| | | 2.12 | Windows CE 2.12 | ----- | CEPC |
| | 3.x | 3.00 | Windows CE 3.0 | ----- | CEPC |
| | | | Pocket PC 2000 | ----- | Shell Emulator |
| | | | Handheld PC 2000 | ----- | CEPC |
| | | | Windows Mobile 2002 | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | 4.x | 4.00 | Windows CE 4.0 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | 4.10 | Windows CE 4.1 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | 4.20 | Windows CE 4.2 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | | Windows Mobile 2003 | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | | 4.21 | Windows Mobile 2003 SE | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | 5.x | 5.00 | Windows CE 5.0 | Standard Shell | CEPC |
| | | | | IP Phone | CEPC |
| | | | | Thin Client | CEPC |
| | | | Networked Media Device 5.0 | ----- | CEPC |
| | | 5.10 | Windows Mobile 5.0 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| Windows <br>CE Famliy | | | Windows Mobile 5.2 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | 5.20 | Windows Mobile 6.0 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.0.2 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.1 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.1.4 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.5 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.5.3 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | 6.x | 6.00 | Windows CE 6.0<br>(RTM&R2&R3) | Standard Shell | CEPC |
| | | | | IP Phone | CEPC |
| | | | | Thin Client | CEPC |
| | | | | NMD UI(5.0) | CEPC |
| | 7.x | 7.00 | Windows Embedded <br>Compact 7.0 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | | | Silverlight ThemeA | CEPC |
| | | | | Silverlight ThemeB | CEPC |
| | | | | Silverlight ThemeC | CEPC |
| | | | | Silverlight ThemeD | CEPC |
| | | | Automotive Embedded 7 | ----- | CEPC |
| | | | Windows Phone 7 | ----- | XDE 1.0 |
| | | | Windows Phone 7 NoDo | ----- | XDE 1.0 |
| | | 7.10 | Windows Phone 7.5 | ----- | XDE "1.2" |
| | | | Windows Phone 7.5 Refresh | ----- | XDE "1.2" |
| | | | Windows Phone 7.8 | ----- | XDE "1.2" |
| | 8.x | 8.00 | Windows Embedded <br>Compact 2013 | Mini Shell | CEPC |
| | | | | Silverlight ThemeA | CEPC |
| | | | | Silverlight ThemeB | CEPC |
| | | | | Silverlight ThemeC | CEPC |
| | | | | Silverlight ThemeD | CEPC |
<table>
<tr> # 关于
<td align="center"><a href="https://space.bilibili.com/484165196"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663857759dcbe7c89c6455282b29bc8695211ad7924a0.jpg" width="150px;" alt=""/><br /><sub><b>351<br />351Workshop</b></sub></a><br /></td> ## 开发团队 / 贡献者
<td align="center"><a href="https://space.bilibili.com/1756824708"><img src="https://github.com/Inter1006/PenPointOS_Vbox/blob/Readme_Files/b_fa517952f054ca8c99a234cc1b50b50b.jpg" width="150px;" alt=""/><br /><sub><b>Inter1006<br />INTER_INIT</b></sub></a><br /></td> <div class="center" >
<td align="center"><a href="https://space.bilibili.com/410046866"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663903084330ee6855a3795b453f2ab6ded4863c9b08a.jpg" width="150px;" alt=""/><br /><sub><b>GoldApple<br />不务正业的金苹果</b></sub></a><br /></td> <table>
<td align="center"><a href="https://space.bilibili.com/648710692"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663907859cac6209da2520c4e1c83c6a99fb65ae1bcb4.jpg" width="150px;" alt=""/><br /><sub><b>WinPad(御坂)<br />とある科学の手机副屏</b></sub></a><br /></td> <td>
<td align="center"><a href="https://space.bilibili.com/2057331843"><img src="https://github.com/Inter1006/Extensions/blob/main/17206639278647b179c13f807cbc2bf27b899725d34fc5c79.jpg" width="150px;" alt=""/><br /><sub><b>DZY<br />DZY20070614</b></sub></a><br /></td> 主开发者<br />
<td align="center"><a href="https://space.bilibili.com/437201853"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663947047a3c221d7c72c685e35b27b3fe6d41b6f8f93.jpg" width="150px;" alt=""/><br /><sub><b>Zesa<br />LinuxMEMZ</b></sub></a><br /></td> - <a href="https://www.351workshop.top/">351 - 351Workshop@Bilibili</a><br />
</tr> 赞助<br />
- <a href="https://space.bilibili.com/432808178">IBM_Official@Bilibili</a><br />
</table> - <a href="https://www.zhihu.com/people/peng-an-dr-quest/posts">蓬岸@知乎</a><br />
</td>
<td>
镜像 / 开发工具提供<br />
- <a href="https://space.bilibili.com/432808178">IBM_Official@Bilibili</a><br />
- <a href="https://www.zhihu.com/people/peng-an-dr-quest/posts">蓬岸@知乎</a><br />
- <a href="https://alexisgaming95.neocities.org/">lucss21a@Discord</a><br />
美工<br />
- <a href="https://space.bilibili.com/1756824708">WinPad - とある科学の手机副屏@Bilibili</a><br />
</td>
<td>
协助开发<br />
- <a href="https://space.bilibili.com/648710692">Inter - -INTER_INIT-@Bilibili</a><br />
- <a href="https://space.bilibili.com/437201853">Zesa - Zesa_IO1i0lO@Bilibili</a><br />
- <a href="https://space.bilibili.com/410046866">不务正业的金苹果@Bilibili</a><br />
- <a href="https://space.bilibili.com/2057331843">DZY20070614@Bilibili</a><br />
</td>
</table>
</div>
<p align="center">
开发团队 ONEW Studio QQ 群981893945 —— 欢迎加入!
</p>
## 特别感谢
- ONEW Studio<br />
- <a href="http://panretro.com">厦门市远东在线技术研究院</a><br />
- <a href="https://www.compumuseum.com/">网页里的电脑博物馆</a><br />
## 使用到的其他开源项目
- DOS-LOGO: http://retro.timb.us/Documents/Software/DOS-LOGO.html
- Whitebox: https://github.com/WindowsNT351/Whitebox
# ⚒️ SDK及其他相关工具下载
### Windows CE 1.x
#### Windows CE 1.0x
[Microsoft Visual C++ For Windows CE Version 1.0](https://archive.org/details/msvcceu.100)<br />
<br /> <br />
ONEW Studio QQ交流群:**981893945** 欢迎来玩<br /><br />
本项目使用了以下项目的代码/资源:<br /> ### Windows CE 2.x
CE<br /> #### Windows CE 2.00
大多数镜像为自己用Platform Builder编译的<br /> Microsoft Windows CE Embedded Toolkit<br />
少部分模拟器/镜像为示例镜像版本或是M$的SDK提取<br /> [Microsoft Handheld PC 2.0 Platform SDK](https://archive.org/details/wincesdk)<br />
x86CEPC Bootloader(LOADCEPC)/工具 为M$官方版6.0修改版<br /> #### Windows CE 2.01
Microsoft Palm-size PC 1.0 Platform SDK: [Programming Windows CE Disc](https://archive.org/details/mspress_programmingwindowsce_0970002166)<br />
Microsoft Auto PC 1.0 Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
#### Windows CE 2.10
[Microsoft Windows CE 2.10 Enhancement Pack for Windows CE Embedded Toolkit](https://www.betaarchive.com/database/view_release.php?uuid=0bef77bc-078b-468d-9ed0-18c51508948d)<br />
#### Windows CE 2.11
[Microsoft Windows CE 2.11 Platform Builder](https://archive.org/details/MicrosoftWindowsCEPlatformBuilder2.11Disc1.iso.7z)<br />
[Microsoft Palm-size PC 1.1 Platform SDK](https://web.archive.org/web/20051218093617/http://download.microsoft.com/download/wincepalm/pdasdk/1.1/WCE/CN/PPC_SDK(CHS).zip)<br />
Microsoft Palm-size PC 1.2 Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
Microsoft Handheld PC 3.0(HPC Pro) Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
#### Windows CE 2.12
[Microsoft Windows CE 2.12 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=e73feaeb-c4dc-4915-9b16-1692c269d3b5)<br />
<br />
其他:<br /> ### Windows CE 3.x
DOS-LOGO: http://retro.timb.us/Documents/Software/DOS-LOGO.html<br /> #### Windows CE 3.00
[Microsoft Windows CE 3.0 Platform Builder(Part 1)](https://archive.org/details/ms-wince-pb30)<br />
[Microsoft Windows CE 3.0 Platform Builder(Part 2)](https://archive.org/details/ms-wince-pb30_5-11)<br />
[Microsoft Pocket PC 2000(Palm-size PC 3.0) Platform SDK(Backup)](https://pan.baidu.com/s/14ykCvhJfTmiYzloPs6ApRg) 提取码6zjx<br />
[Microsoft Handheld PC 2000 SDK](https://archive.org/details/hpc2ksdkusa)<br />
[Microsoft Smart Phone 2002 SDK](https://archive.org/download/windows-mobile-sdks-2023/smartphone_2002_sdk.exe)<br />
[Microsoft Pocket PC 2002 SDK](https://archive.org/download/windows-mobile-sdks-2023/ppc2002_sdk.exe)<br />
<br />
### Windows CE 4.x
#### Windows CE 4.00
[Microsoft Windows CE.net 4.0 Platform Builder Emulation Edition(Backup)](https://www.123pan.com/s/KDyhTd-zTPN3) 提取码:eGCt<br />
[Microsoft Windows CE.net 4.0 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=51000b20-9a15-4403-8b56-c3759aa682b7)<br />
#### Windows CE 4.10
[Microsoft Windows CE.net 4.1 Platform Builder Emulation Edition](https://archive.org/details/winceemul41)<br />
[Microsoft Windows CE.net 4.1 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=fc6d66f5-e047-4303-9f0e-82e7f1de6645)<br />
#### Windows CE 4.20
[Microsoft Windows CE.net 4.2 Platform Builder Emulation Edition](https://archive.org/details/winceemul42)<br />
[Microsoft Windows CE.net 4.2 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=2b657ca7-2b53-4aac-8b1e-446b5669fda9)<br />
[Microsoft Windows Mobile 2003 SDK](https://archive.org/download/WMSDK/Microsoft%20Pocket%20PC%202003%20SDK.msi)<br />
#### Windows CE 4.21
[Microsoft Windows Mobile 2003 SE Images](https://archive.org/download/WMSDK/WM2003SEimages.msi)<br />
<br />
### Windows CE 5.x
#### Windows CE 5.00
[Microsoft Windows CE.net 5.0 Platform Builder](https://archive.org/details/en_win_ce_net_cd1)<br />
[Microsoft Windows CE.net 5.0 Networked Media Device Feature Pack](https://www.hpcfactor.com/downloads/2011/Windows_CE_5.0_Networked_Media_Device_Feature_Pack/version_1.0)<br />
#### Windows CE 5.10
[Microsoft Windows Mobile 5.0 SDK](https://archive.org/download/WMSDK/Windows%20Mobile%205.0%20Pocket%20PC%20SDK.msi)<br />
[Microsoft Windows Mobile 5.2 Images](https://web.archive.org/web/20130219020835/http://download.microsoft.com/download/c/b/b/cbb8bc58-07b9-46bb-86ba-d12bb0d9b1d9/efp.msi)<br />
#### Windows CE 5.20
[Microsoft Windows Mobile 6 Professional SDK](https://web.archive.org/web/20200108141243*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK.msi)<br />
[Microsoft Windows Mobile 6 Standard SDK](https://web.archive.org/web/20200108142416*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Standard%20SDK.msi)<br />
[Microsoft Windows Mobile 6.0.2 Professional SDK](https://web.archive.org/web/20231105012934*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK%20Refresh.msi)<br />
[Microsoft Windows Mobile 6.0.2 Standard SDK](https://web.archive.org/web/20220707014038*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Standard%20SDK%20Refresh.msi)<br />
[Microsoft Windows Mobile 6.1 Standard Images](https://web.archive.org/web/20130330025109/http://download.microsoft.com/download/d/c/7/dc73c8e7-f9c3-49de-821f-5588eeefcac4/Windows%20Mobile%206.1%20Standard%20Images%20(USA).msi)<br />
[Microsoft Windows Mobile 6.1 Professional Images](https://web.archive.org/web/20130330025531/http://download.microsoft.com/download/d/c/7/dc73c8e7-f9c3-49de-821f-5588eeefcac4/Windows%20Mobile%206.1%20Professional%20Images%20(USA).msi)<br />
[Microsoft Windows Mobile 6.1.4 Professional Images](https://archive.org/download/WMSDK/Windows%20Mobile%206.1.4%20Professional%20Images%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.1.4 Standard Images](https://archive.org/download/WMSDK/Windows%20Mobile%206.1.4%20Standard%20Images%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5 Professional DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5%20Professional%20Developer%20Tool%20Kit%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5 Standard DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5%20Standard%20Developer%20Tool%20Kit%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5.3 Professional DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5.3%20Professional%20DTK.msi)<br />
[Microsoft Windows Mobile 6.5.3 Standard DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5.3%20Standard%20DTK.msi)<br />
<br />
### Windows CE 6.x
#### Windows CE 6.00
[Microsoft Windows Embedded CE 6.0 Platform Builder](https://archive.org/details/en_windows_embedded_ce_6.0_dvd)<br />
[Microsoft Windows Embedded CE 6.0 Platform Builder R2](https://archive.org/details/windows-embedded-ce-6.0-r2)<br />
[Microsoft Windows Embedded CE 6.0 Platform Builder R3](https://archive.org/details/en_windows_embedded_ce_6.0_r3_dvd__x16-28730)<br />
<br />
### Windows CE 7.x
#### Windows CE 7.00
[Microsoft Windows Embedded Compact 7.0 Platform Builder](https://archive.org/details/WindowsEmbeddedCompact7)<br />
[Microsoft Windows Embedded Automotive 7.0 Platform Builder](https://archive.org/details/windows-embedded-automotive-7)<br />
[Microsoft Windows Phone 7 SDK](https://archive.org/download/wpdt-rtm-en-1/WPDT_RTM_en1.iso)<br />
#### Windows CE 7.10
[Microsoft Windows Phone 7.1 SDK](https://archive.org/download/wpsdkv-71-en-1_202303/WPSDKv71_en1.iso)<br />
<br />
### Windows CE 8.x
#### Windows CE 8.00
[Microsoft Windows Embedded Compact 2013 Platform Builder](https://archive.org/details/en_windows_embedded_compact_2013_x86_x64_dvd_2247108)
## 🤝友情链接 ## 🤝友情链接
[WinPad的CEShellCollection](https://github.com/WinPad1993/Windows_CE_Win32_Shell_Emulator_Collection_in_a_WindowsPE)<br />
👆点击戳一下WinPad<br />
[Inter的PenPointOS模拟器](https://github.com/Inter1006/PenPointOS_Vbox/tree/main)<br /> [Inter的PenPointOS模拟器](https://github.com/Inter1006/PenPointOS_Vbox/tree/main)<br />
👆点击戳一下Inter<br /> 👆点击戳一下Inter<br />
[樱之谷-MC服务器](www.sakuravalley.xyz)<br />
👆点击戳一下Axium. 钰<br />
<br /><br /><br /><br /> <br /><br /><br /><br />
Copyright 351Workshop 2022-2024 Copyright 351Workshop 2022-2025

View File

@ -1,65 +1,333 @@
<div align="center"> <div align="center">
<img alt="LOGO" src="./WNT/menu3.exe/res/about.bmp" /><br />
<img alt="LOGO" src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/WNT/menu2.exe/res/about.bmp" /><br /> <h1>CE Collections -2.02-</h1>
# CE Collections -2.01- <p>Not just a simple collection.</p>
More than one Collection<br />
</div> </div>
### ONEW CE Collections ---
## ❓What is CE Collections<br />
CE Collections integrates almost all CE(official versions of CEs, such as Windows Mobile) images and emulators, including x86 Bin images booted by Loadcepc, ArmBin images booted by DeviceSimulator, and Shell emulators for Windows NT.<br />
## 📥How to use # ✏️ What is CE Collections?
**This image can not only boot and use the CEPCx86 image in a virtual machine, but also,you can open MENU2.EXE in Windows and use other forms of images/emulators. The two platforms (direct boot and MENU2 in Windows) can boot different versions of Windows CE!!!!!** <br /><br /> CE Collections gathers almost all the official images and emulators based on the CE kernel (such as Windows CE Core Windows Mobile and Windows Phone).
Load ISO into a virtual optical drive or virtual machine (Windows XP SP3 is recommended as the Windows PPC 2000 emulator cannot run on NT6. x). Open [CDROM]:\WNT\MENU2.exe, select the Windows CE version you want to open, and click Run to open the emulator.Or just boot it directly and choose the system you want to boot.<br />
When booting early CEs in CEPC Boot Loader, the menu may ask whether to use high-resolution mode, because modern virtual machines cannot emulate graphics cards properly, resulting in early CE only being able to use low resolution mode. If you want to use high-resolution mode, please use emulators such as PCEM or 86Box that can emulate hardware at that old time. It is recommended to use S3 ViRGE in PCEM<br />
## ❓QA: The image includes:
Q: After booting from the CD, select Windows CE version from 2.x to Windows 3.x and I got a black screen! A: The resolution may be selected incorrectly. In virtual machines such as VMware, low resolution mode is required. In addition, the new version of VMware is very slow when simulating old systems, which may also cause black screens<br /> - x86Bin images booted via Loadcepc.
Q: I have already used PCem, but still cannot use high-resolution A: In PCem, you need to choose an S3 ViRGE graphics card with a CPU greater than or equal to 486/33 to use high-resolution<br /> - ArmBin images booted via DeviceEmulator.
Q: In PCem, CD cannot be booted. A: Use compression software such as 7Zip to open the ISO file, extract the img file under [boot], and boot from the floppy disk<br /> - ArmBin images booted via XDE Emulator.
Q: Why can't I use the shutdown in the CEPC? A: You really can't use it<br />
Q: In the CEPC bootloader, after selecting the system, the Error image section does not fit in allocated block showed A: The memory is too small, increase the memory<br /> The emulator includes:
Q: Windows EC 2013 black screen after booting A: Do not use VMware [DOS] option when creating a virtual machine, switch to [Windows XP] option<br /> - <a href="https://github.com/WindowsNT351/Whitebox">Whitebox</a> Emulator compatible with Windows 7 - 11.
Q: Windows Mobile resolution is too abstract. A: Try changing to another resolution option<br /> - Arm DeviceEmulator Emulator compatible with Windows XP - 11.
Q: Shell Simulators cannot be started together A: Do not start multiple Shell Simulators together. If you accidentally start them together, please log off or restart and run [CDROM]:\WNT\200HPC\CEU.reg<br /> - XDE Emulator Emulator compatible with Windows 7 - 8.1.
Q: Windows PPC 2000 Shell Emulator cannot work on Windows Vista and above systems. A: No way, the Windows API is not compatible, so the best system to experience Shell emulator is Windows XP<br /> - Standalone Shell Emulator Emulator compatible with Windows NT(4.0 - 11, some of them don't support newer Windows).
Q: My Windows CE or Mobile machine is not starting, can you help me? A: Well....<br />
Q: Can you integrate other Windows into it? A: Look at the project name!!!!!!<br /> # 📥 How to use?
## WinNT Platform Emulator usage
1. Boot the host OS(NT4.0 - Win11) before you Insert the disc.
2. Insert the disc and wait the Menu pop out, if not, please run [CD(DVD)ROM]:\WNT\Menu3.exe.
3. Select the OS(emulator) you want to start up. Please notice that there is some diffrent limitations when you're using diffrent host OS.
- for Windows NT 4.0, you can use emulators based on Shell Emulator, this is the best host OS to use Shell Emulator.
- for Windows 2000 - XP, you can use emulators based on Shell Emulator(except Auto PC 1.0 on x64 OS) and ARM Device Emulator.
- for Windows 7 - 8.1, you can use emulator based on Shell Emulator(except Pocket PC 2000, and Auto PC 1.0 on x64 OS) ARM Device Emulator XDE Emulator and Whitebox Emulator.
- for Windows 10 - 11, you can use emulator based on Shell Emulator(except Pocket PC 2000, and Auto PC 1.0 on x64 OS) ARM Device Emulator and Whitebox Emulator.
4. Done! Enjoy your Windows CE.
<img src="./menuwnt.png" width="900px;" alt=""/>
## CEPC Platform Emulator usage
**Attention! CEPC Platform cannot boot all the images!**
0. Make sure you have more than 64MB memory, lower than 64MB may cause the image can't be loaded into the memory. We suggest to use 128MB memory to use CEPC.
1. Insert the disc(or boot floppy) and boot from it.
2. Select the OS you want to boot, the [Next Page] and the [Previous Page] are in the bottom right and bottom left corner.Please notice that there is some limitations when you're booting 2.0-2.10 images.
- for PCem VMware VBox Qemu modern real machine or other modern VMs, these image won't boot properly.
- for 86Box, please use WinChip CPU without Dynamic Recompiler.
- for old real machine, please use 486 or Pentium(586) CPU.
<img src="./menudos.png" width="800px;" alt=""/>
3. Select the resolution you want. Please notice that there is some limitations when you're booting 2.0-3.0 images which using VGA8BPP display driver.
- for VMware VBox Qemu or other modern VMs, you can only use the Low Resolution mode.
- for 86Box PCem or real machine, please use S3 video card(particular S3Trio64 for WinCE2.0 or S3Virge for higher version) as much as possible to use the High Resolution, if not, you can only use the Low Resolution.
<img src="./menudos2.png" width="800px;" alt=""/>
<img src="./menudos3.png" width="800px;" alt=""/>
4. Done! Enjoy your Windows CE.
# 🔧 How does CE-Collections works?
## WinNT Platform
1. Insert the disc, Autorun will start [CD(DVD)ROM]:\WNT\Menu3.exe.
2. Menu3.exe load and display [CD(DVD)ROM]:\WNT\menu.enus configuration file, and load [CD(DVD)ROM]:\CECV20.D0 version config file.
3. Choose the emulator / image you want to boot(start).
- Shell Emulator Family
1. Run shellmgr [Type of emulator] [Path to emulator] [Main executable file path].
2. Shellmgr copy the whole emulator files into TEMP(User or System) folder。
3. Shellmgr check does the host OS is the required OS.
4. Shellmgr doing preparation works.
- for WinCE 1.0: Set the required environment variable.
- for HPC/PPC 2.x: Replace the path to emulator in the REG file, Merge the REG file.
- for PPC 2000: Replace the path to emulator in the REG file, Merge the REG file.(diffrent file structure)
- for APC 1.0Replace the path to emulator in the REG file, Merge the REG file, load WCEFS.sys driver. If the host is vista or higher, kill ApcHook.sys driver(if doen't do that will cause BSOD)。
5. Shellmgr start the main executable file.
6. Shellmgr wait for the main progrom closed.
7. Shellmgr unload the driver and delete the TEMP files.
- ARM DeviceEmulator Fmaily
1. Run DeviceEmulator /video [resolution] /memsize 256
- CEPC WhiteboxEmulator Family
1. Run Whitebox [resolution, see CEPC. But much more detailed for each image here] /M:[86Box config file] [NK.bin]
- XDE Emulator Family
1. Run xdemgr [XDE Version] [NK.bin]。
2. Xdemgr check does the host OS is the required OS。
3. Xdemgr copy VMM.sys(if host OS is x86) or VMM64.sys(if host OS is AMD64) of XDE Emulator to TEMP folder and load it.
4. Xdemgr copy the config file of XDE Emulator into TEMP folder.
5. Xdemgr start XDE Emulator.
6. Xdemgr wait for the Emulator closed。
7. Xdemgr unload the driver and delete the TEMP files.
## CEPC Platform
1. Insert the disc / boot floppy disk, boot MS-DOS 7.1 from it。
2. Load LOGO.sys display startup logo. Load CD(DVD)ROM driver(IDE)。
3. Detect is D: drive a CE-Collections disc, if not, find the disc ergodic。
4. Start [CD(DVD)ROM]:\DOS\Menu.bat, Load [CD(DVD)ROM]:\CECV20.D0 version config file.
5. Choose the image to load.
6. Auto detect which type is the image(2.0-2.10/2.11-2.12 HPC2000/3.0-2013/WinMobile)。
- 2.0-2.10
1. Display the Warning Dialog.
2. Run Loadcepc /D:3 [NK.bin]
- 2.11-2.12 HPC2000
1. Display the Resolution Choosing Dialog.
2. High Resolution use Loadcepc /D:3 [NK.bin]
Low Resolution use Loadcepc /D:0 [NK.bin] (this resolution almost unusable)
- 3.0-2013
1. Display the Confirm Dialog.
2. Run Loadcepc /L:800x600x16 [NK.bin]
- WinMobile
1. Display the Resolution Choosing Dialog.
2. Fixed Resolution use Loadcepc /L:175x240x16 [NK.bin]
Original Resolution use Loadcepc /L:320x400x16 [NK.bin]
### What is Loadcepc?
Loadcepc is Bootloader for Windows CE x86 images, it will load the NK.bin into memory, set the resolution, and jump to the boot address.
DOS is just a springboard for CE, after CE booted, the interrupt of DOS won't work after that, x86CE does't based on DOS.
# ❓ QA
Q: I cannot boot the disc in 86Box or PCem.
A: Please use 7Zip or another compression tool to open the ISO file, extract the img file from the [boot] folder, and then boot from a floppy disk.
Q: In the CEPC bootloader, after selecting a system, it shows “Error image section doesn't fit in allocated block”.
A: The memory might be set too low; please increase the memory allocation.
Q: After booting Windows EC 2013, the screen is black.
A: The memory might be set too low; please increase the memory allocation.
Q: Why there is no any activities after I choose a version in WinNT Menu?
A: The emulator may display behind the Menu, or the host OS is not the required OS for the emulator.
Q: My physical Windows CE/Mobile device doesnt boot, can you help solve this? / Can you install this WinCE software for me?
A: Well, I can't answer that.
Q: Can you integrate other Windows OS?
A: Just look at the project name the answer is self-evident.
## ❗Here is the systems that CEC can emulated # 🔨 CE Images and Emulators Integrated in this Project
Green: Supports<br />
Yellow: Has resources, can be integrated, but not integrated<br />
Light yellow: Has resources, cannot be integrated<br />
Red: No resources<br />
<img src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/cetl.png"/>
## About | | | | CE-Collections Supporting | | |
This project is developed by ONEW members:<br /><br /> |---------------------------|---------|--------------|-----------------------------------|----------------------|----------------------|
| | Version | Core Version | Name | Shell | Emulator |
| | 1.x | 1.00 | Windows CE 1.00 | ----- | Shell Emulator |
| | | 1.01 | Windows CE 1.01 | ----- | Shell Emulator |
| | 2.x | 2.00 | Windows CE 2.0(or 2.01?) | ----- | CEPC |
| | | | Handheld PC 2.0 | ----- | Shell Emulator |
| | | 2.01 | Auto PC 1.0 | ----- | Shell Emulator |
| | | | Palm-size PC 1.0 | ----- | Shell Emulator |
| | | 2.10 | Windows CE 2.10 | ----- | CEPC |
| | | 2.11 | Windows CE 2.11 | ----- | CEPC |
| | | | Palm-size PC 1.1<br>(Simplified Chinese) | ----- | Shell Emulator |
| | | | Palm-size PC 1.2 | ----- | Shell Emulator |
| | | | Handheld PC 3.0 | ----- | Shell Emulator |
| | | 2.12 | Windows CE 2.12 | ----- | CEPC |
| | 3.x | 3.00 | Windows CE 3.0 | ----- | CEPC |
| | | | Pocket PC 2000 | ----- | Shell Emulator |
| | | | Handheld PC 2000 | ----- | CEPC |
| | | | Windows Mobile 2002 | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | 4.x | 4.00 | Windows CE 4.0 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | 4.10 | Windows CE 4.1 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | 4.20 | Windows CE 4.2 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | | Windows Mobile 2003 | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | | 4.21 | Windows Mobile 2003 SE | Pocket PC | CEPC |
| | | | | Smart Phone | CEPC |
| | 5.x | 5.00 | Windows CE 5.0 | Standard Shell | CEPC |
| | | | | IP Phone | CEPC |
| | | | | Thin Client | CEPC |
| | | | Networked Media Device 5.0 | ----- | CEPC |
| | | 5.10 | Windows Mobile 5.0 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| Windows <br>CE Famliy | | | Windows Mobile 5.2 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | 5.20 | Windows Mobile 6.0 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.0.2 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.1 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.1.4 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.5 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | | | Windows Mobile 6.5.3 | Pocket PC | Device Emulator |
| | | | | Smart Phone | Device Emulator |
| | 6.x | 6.00 | Windows CE 6.0<br>(RTM&R2&R3) | Standard Shell | CEPC |
| | | | | IP Phone | CEPC |
| | | | | Thin Client | CEPC |
| | | | | NMD UI(5.0) | CEPC |
| | 7.x | 7.00 | Windows Embedded <br>Compact 7.0 | Standard Shell | CEPC |
| | | | | Thin Client | CEPC |
| | | | | Silverlight ThemeA | CEPC |
| | | | | Silverlight ThemeB | CEPC |
| | | | | Silverlight ThemeC | CEPC |
| | | | | Silverlight ThemeD | CEPC |
| | | | Automotive Embedded 7 | ----- | CEPC |
| | | | Windows Phone 7 | ----- | XDE 1.0 |
| | | | Windows Phone 7 NoDo | ----- | XDE 1.0 |
| | | 7.10 | Windows Phone 7.5 | ----- | XDE "1.2" |
| | | | Windows Phone 7.5 Refresh | ----- | XDE "1.2" |
| | | | Windows Phone 7.8 | ----- | XDE "1.2" |
| | 8.x | 8.00 | Windows Embedded <br>Compact 2013 | Mini Shell | CEPC |
| | | | | Silverlight ThemeA | CEPC |
| | | | | Silverlight ThemeB | CEPC |
| | | | | Silverlight ThemeC | CEPC |
| | | | | Silverlight ThemeD | CEPC |
<table>
<tr> # About
<td align="center"><a href="https://space.bilibili.com/484165196"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663857759dcbe7c89c6455282b29bc8695211ad7924a0.jpg" width="150px;" alt=""/><br /><sub><b>351<br />351Workshop</b></sub></a><br /></td> ## Develoment Team / Contributor
<td align="center"><a href="https://space.bilibili.com/1756824708"><img src="https://github.com/Inter1006/PenPointOS_Vbox/blob/Readme_Files/b_fa517952f054ca8c99a234cc1b50b50b.jpg" width="150px;" alt=""/><br /><sub><b>Inter1006<br />INTER_INIT</b></sub></a><br /></td> <div class="center" >
<td align="center"><a href="https://space.bilibili.com/410046866"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663903084330ee6855a3795b453f2ab6ded4863c9b08a.jpg" width="150px;" alt=""/><br /><sub><b>GoldApple<br />不务正业的金苹果</b></sub></a><br /></td> <table>
<td align="center"><a href="https://space.bilibili.com/648710692"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663907859cac6209da2520c4e1c83c6a99fb65ae1bcb4.jpg" width="150px;" alt=""/><br /><sub><b>WinPad(御坂)<br />とある科学の手机副屏</b></sub></a><br /></td> <td>
<td align="center"><a href="https://space.bilibili.com/2057331843"><img src="https://github.com/Inter1006/Extensions/blob/main/17206639278647b179c13f807cbc2bf27b899725d34fc5c79.jpg" width="150px;" alt=""/><br /><sub><b>DZY<br />DZY20070614</b></sub></a><br /></td> Developer<br />
<td align="center"><a href="https://space.bilibili.com/437201853"><img src="https://github.com/Inter1006/Extensions/blob/main/1720663947047a3c221d7c72c685e35b27b3fe6d41b6f8f93.jpg" width="150px;" alt=""/><br /><sub><b>Zesa<br />LinuxMEMZ</b></sub></a><br /></td> - <a href="https://www.351workshop.top/">351 - 351Workshop@Bilibili</a><br />
</tr> Sponsor<br />
- <a href="https://space.bilibili.com/432808178">IBM_Official@Bilibili</a><br />
</table> - <a href="https://www.zhihu.com/people/peng-an-dr-quest/posts">蓬岸@知乎</a><br />
</td>
<td>
Image / Develoment Tools Providing<br />
- <a href="https://space.bilibili.com/432808178">IBM_Official@Bilibili</a><br />
- <a href="https://www.zhihu.com/people/peng-an-dr-quest/posts">蓬岸@知乎</a><br />
- <a href="https://alexisgaming95.neocities.org/">lucss21a@Discord</a><br />
Artworks<br />
- <a href="https://space.bilibili.com/1756824708">WinPad - とある科学の手机副屏@Bilibili</a><br />
</td>
<td>
Development Helper<br />
- <a href="https://space.bilibili.com/648710692">Inter - -INTER_INIT-@Bilibili</a><br />
- <a href="https://space.bilibili.com/437201853">Zesa - Zesa_IO1i0lO@Bilibili</a><br />
- <a href="https://space.bilibili.com/410046866">不务正业的金苹果@Bilibili</a><br />
- <a href="https://space.bilibili.com/2057331843">DZY20070614@Bilibili</a><br />
</td>
</table>
</div>
## Thanks to
- ONEW Studio<br />
- <a href="http://panretro.com">Fareast Online Research</a><br />
- <a href="https://www.compumuseum.com/">Compumuseum</a><br />
## Other opensource project used in the project
- DOS-LOGO: http://retro.timb.us/Documents/Software/DOS-LOGO.html
- Whitebox: https://github.com/WindowsNT351/Whitebox
# ⚒️ SDK and other toolkits download
### Windows CE 1.x
#### Windows CE 1.0x
[Microsoft Visual C++ For Windows CE Version 1.0](https://archive.org/details/msvcceu.100)<br />
<br /> <br />
This project utilized the code and resources of the following projects:<br /> ### Windows CE 2.x
CE:<br /> #### Windows CE 2.00
Most images are compiled by myself using Platform Builder.<br /> Microsoft Windows CE Embedded Toolkit<br />
A small number of emulators and images are sample image versions or official SDK extracts.<br /> [Microsoft Handheld PC 2.0 Platform SDK](https://archive.org/details/wincesdk)<br />
x86CEPC Bootloader(LOADCEPC)/utilities are moded from the code comes from official PB 6.0.<br /> #### Windows CE 2.01
Microsoft Palm-size PC 1.0 Platform SDK: [Programming Windows CE Disc](https://archive.org/details/mspress_programmingwindowsce_0970002166)<br />
Microsoft Auto PC 1.0 Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
#### Windows CE 2.10
[Microsoft Windows CE 2.10 Enhancement Pack for Windows CE Embedded Toolkit](https://www.betaarchive.com/database/view_release.php?uuid=0bef77bc-078b-468d-9ed0-18c51508948d)<br />
#### Windows CE 2.11
[Microsoft Windows CE 2.11 Platform Builder](https://archive.org/details/MicrosoftWindowsCEPlatformBuilder2.11Disc1.iso.7z)<br />
[Microsoft Palm-size PC 1.1 Platform SDK](https://web.archive.org/web/20051218093617/http://download.microsoft.com/download/wincepalm/pdasdk/1.1/WCE/CN/PPC_SDK(CHS).zip)<br />
Microsoft Palm-size PC 1.2 Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
Microsoft Handheld PC 3.0(HPC Pro) Platform SDK: [Windows CE Developers Conference DevCon 99 Conference CD](https://archive.org/details/windowscedevcon99conferencecd)<br />
#### Windows CE 2.12
[Microsoft Windows CE 2.12 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=e73feaeb-c4dc-4915-9b16-1692c269d3b5)<br />
<br />
### Windows CE 3.x
#### Windows CE 3.00
[Microsoft Windows CE 3.0 Platform Builder(Part 1)](https://archive.org/details/ms-wince-pb30)<br />
[Microsoft Windows CE 3.0 Platform Builder(Part 2)](https://archive.org/details/ms-wince-pb30_5-11)<br />
[Microsoft Pocket PC 2000(Palm-size PC 3.0) Platform SDK(Backup)](https://pan.baidu.com/s/14ykCvhJfTmiYzloPs6ApRg) Key 6zjx<br />
[Microsoft Handheld PC 2000 SDK](https://archive.org/details/hpc2ksdkusa)<br />
[Microsoft Smart Phone 2002 SDK](https://archive.org/download/windows-mobile-sdks-2023/smartphone_2002_sdk.exe)<br />
[Microsoft Pocket PC 2002 SDK](https://archive.org/download/windows-mobile-sdks-2023/ppc2002_sdk.exe)<br />
<br />
### Windows CE 4.x
#### Windows CE 4.00
[Microsoft Windows CE.net 4.0 Platform Builder Emulation Edition(Backup)](https://www.123pan.com/s/KDyhTd-zTPN3) Key eGCt<br />
[Microsoft Windows CE.net 4.0 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=51000b20-9a15-4403-8b56-c3759aa682b7)<br />
#### Windows CE 4.10
[Microsoft Windows CE.net 4.1 Platform Builder Emulation Edition](https://archive.org/details/winceemul41)<br />
[Microsoft Windows CE.net 4.1 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=fc6d66f5-e047-4303-9f0e-82e7f1de6645)<br />
#### Windows CE 4.20
[Microsoft Windows CE.net 4.2 Platform Builder Emulation Edition](https://archive.org/details/winceemul42)<br />
[Microsoft Windows CE.net 4.2 Platform Builder](https://www.betaarchive.com/database/view_release.php?uuid=2b657ca7-2b53-4aac-8b1e-446b5669fda9)<br />
[Microsoft Windows Mobile 2003 SDK](https://archive.org/download/WMSDK/Microsoft%20Pocket%20PC%202003%20SDK.msi)<br />
#### Windows CE 4.21
[Microsoft Windows Mobile 2003 SE Images](https://archive.org/download/WMSDK/WM2003SEimages.msi)<br />
<br />
### Windows CE 5.x
#### Windows CE 5.00
[Microsoft Windows CE.net 5.0 Platform Builder](https://archive.org/details/en_win_ce_net_cd1)<br />
[Microsoft Windows CE.net 5.0 Networked Media Device Feature Pack](https://www.hpcfactor.com/downloads/2011/Windows_CE_5.0_Networked_Media_Device_Feature_Pack/version_1.0)<br />
#### Windows CE 5.10
[Microsoft Windows Mobile 5.0 SDK](https://archive.org/download/WMSDK/Windows%20Mobile%205.0%20Pocket%20PC%20SDK.msi)<br />
[Microsoft Windows Mobile 5.2 Images](https://web.archive.org/web/20130219020835/http://download.microsoft.com/download/c/b/b/cbb8bc58-07b9-46bb-86ba-d12bb0d9b1d9/efp.msi)<br />
#### Windows CE 5.20
[Microsoft Windows Mobile 6 Professional SDK](https://web.archive.org/web/20200108141243*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK.msi)<br />
[Microsoft Windows Mobile 6 Standard SDK](https://web.archive.org/web/20200108142416*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Standard%20SDK.msi)<br />
[Microsoft Windows Mobile 6.0.2 Professional SDK](https://web.archive.org/web/20231105012934*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Professional%20SDK%20Refresh.msi)<br />
[Microsoft Windows Mobile 6.0.2 Standard SDK](https://web.archive.org/web/20220707014038*/http://download.microsoft.com/download/f/2/3/f232f773-7edc-4300-be07-d3b76a5b3a91/Windows%20Mobile%206%20Standard%20SDK%20Refresh.msi)<br />
[Microsoft Windows Mobile 6.1 Standard Images](https://web.archive.org/web/20130330025109/http://download.microsoft.com/download/d/c/7/dc73c8e7-f9c3-49de-821f-5588eeefcac4/Windows%20Mobile%206.1%20Standard%20Images%20(USA).msi)<br />
[Microsoft Windows Mobile 6.1 Professional Images](https://web.archive.org/web/20130330025531/http://download.microsoft.com/download/d/c/7/dc73c8e7-f9c3-49de-821f-5588eeefcac4/Windows%20Mobile%206.1%20Professional%20Images%20(USA).msi)<br />
[Microsoft Windows Mobile 6.1.4 Professional Images](https://archive.org/download/WMSDK/Windows%20Mobile%206.1.4%20Professional%20Images%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.1.4 Standard Images](https://archive.org/download/WMSDK/Windows%20Mobile%206.1.4%20Standard%20Images%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5 Professional DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5%20Professional%20Developer%20Tool%20Kit%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5 Standard DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5%20Standard%20Developer%20Tool%20Kit%20%28USA%29.msi)<br />
[Microsoft Windows Mobile 6.5.3 Professional DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5.3%20Professional%20DTK.msi)<br />
[Microsoft Windows Mobile 6.5.3 Standard DKT](https://archive.org/download/WMSDK/Windows%20Mobile%206.5.3%20Standard%20DTK.msi)<br />
<br />
### Windows CE 6.x
#### Windows CE 6.00
[Microsoft Windows Embedded CE 6.0 Platform Builder](https://archive.org/details/en_windows_embedded_ce_6.0_dvd)<br />
[Microsoft Windows Embedded CE 6.0 Platform Builder R2](https://archive.org/details/windows-embedded-ce-6.0-r2)<br />
[Microsoft Windows Embedded CE 6.0 Platform Builder R3](https://archive.org/details/en_windows_embedded_ce_6.0_r3_dvd__x16-28730)<br />
<br />
### Windows CE 7.x
#### Windows CE 7.00
[Microsoft Windows Embedded Compact 7.0 Platform Builder](https://archive.org/details/WindowsEmbeddedCompact7)<br />
[Microsoft Windows Embedded Automotive 7.0 Platform Builder](https://archive.org/details/windows-embedded-automotive-7)<br />
[Microsoft Windows Phone 7 SDK](https://archive.org/download/wpdt-rtm-en-1/WPDT_RTM_en1.iso)<br />
#### Windows CE 7.10
[Microsoft Windows Phone 7.1 SDK](https://archive.org/download/wpsdkv-71-en-1_202303/WPSDKv71_en1.iso)<br />
<br />
### Windows CE 8.x
#### Windows CE 8.00
[Microsoft Windows Embedded Compact 2013 Platform Builder](https://archive.org/details/en_windows_embedded_compact_2013_x86_x64_dvd_2247108)
Others:<br />
DOS-LOGO: http://retro.timb.us/Documents/Software/DOS-LOGO.html<br />
<br /><br /><br /><br /> <br /><br /><br /><br />
Copyright 351Workshop 2022-2024 Copyright 351Workshop 2022-2025

BIN
TimeLine.xlsx Normal file

Binary file not shown.

21
WNT/hiderun.exe/main.cpp Normal file
View File

@ -0,0 +1,21 @@
#include <stdlib.h>
#include <stdio.h>
#include <afxwin.h>
#include <iostream>
using namespace std;
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
int main(int argc, char **argv)
{
if(argc<=1)
return 1;
char batBuffer[120] = { 0 };
for (int i = 0; i < argc - 2; i++)
{
strcat_s(batBuffer, argv[i + 2]);
strcat_s(batBuffer, " ");
}
cout << batBuffer << endl;
ShellExecute(NULL, "open", argv[1], batBuffer, NULL, SW_HIDE);
return 0;
}

View File

@ -1 +0,0 @@
Build2553 - 5RC2

View File

@ -1,104 +0,0 @@
// DigHelp.cpp: 实现文件
//
#include "pch.h"
#include "menu2.h"
#include "DigHelp.h"
#include "afxdialogex.h"
// DigHelp 对话框
IMPLEMENT_DYNAMIC(DigHelp, CDialogEx)
DigHelp::DigHelp(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
{
}
DigHelp::~DigHelp()
{
}
void DigHelp::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC1, m_text1);
}
BEGIN_MESSAGE_MAP(DigHelp, CDialogEx)
ON_BN_CLICKED(IDOK, &DigHelp::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &DigHelp::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BUTTON1, &DigHelp::OnBnClickedButton1)
END_MESSAGE_MAP()
// DigHelp 消息处理程序
void DigHelp::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnOK();
}
void DigHelp::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}
int beforeNum = 0;
TCHAR lpPath_[255] = { 0 };
void DigHelp::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
int maxInfo = GetPrivateProfileInt(L"sug", L"maxInfo", -1, lpPath_);
TCHAR currentInfo[255] = { 0 };
srand(time(0));
int curNum = 0;
do {
curNum = rand() % maxInfo; // 生成随机数
} while (curNum==beforeNum);
beforeNum = curNum;
TCHAR currentID[255] = { 0 };
wsprintf(currentID, L"%d", curNum);
GetPrivateProfileString(L"sug", currentID, NULL, currentInfo, 255, lpPath_);
m_text1.SetWindowText(currentInfo);
}
BOOL DigHelp::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
ShowWindow(SW_NORMAL);
CRect rtDesk;
CRect rtDlg;
::GetWindowRect(::GetDesktopWindow(), &rtDesk);
GetWindowRect(&rtDlg);
int iXpos = rtDesk.Width() / 2 - rtDlg.Width() / 2;
int iYpos = rtDesk.Height() / 2 - rtDlg.Height() / 2;
SetWindowPos(NULL, iXpos, iYpos, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
GetCurrentDirectory(MAX_PATH, lpPath_);
wsprintf(lpPath_, L"%s\\menu.enus", lpPath_);
int maxInfo = GetPrivateProfileInt(L"sug", L"maxInfo", -1, lpPath_);
TCHAR currentInfo[255] = { 0 };
srand(time(0));
int randomNum = rand()%maxInfo; // 生成随机数
beforeNum = randomNum;
TCHAR currentID[255] = { 0 };
wsprintf(currentID, L"%d", randomNum);
GetPrivateProfileString(L"sug", currentID, NULL, currentInfo, 255, lpPath_);
m_text1.SetWindowText(currentInfo);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

View File

@ -1,29 +0,0 @@
#pragma once
// DigHelp 对话框
class DigHelp : public CDialogEx
{
DECLARE_DYNAMIC(DigHelp)
public:
DigHelp(CWnd* pParent = nullptr); // 标准构造函数
virtual ~DigHelp();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG1 };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedButton1();
virtual BOOL OnInitDialog();
CStatic m_text1;
};

Binary file not shown.

Binary file not shown.

View File

@ -1,22 +0,0 @@
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.pch
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\vc141.pdb
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\pch.obj
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2dlg.obj
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.obj
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\dighelp.obj
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\about.obj
c:\users\351\documents\visual studio 2017\projects\cec20\release\menu2.exe
c:\users\351\documents\visual studio 2017\projects\cec20\release\menu2.pdb
c:\users\351\documents\visual studio 2017\projects\cec20\release\menu2.ipdb
c:\users\351\documents\visual studio 2017\projects\cec20\release\menu2.iobj
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.res
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\cl.command.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\cl.read.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\cl.write.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\link.command.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\link.read.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\link.write.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\menu2.write.1u.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\rc.command.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\rc.read.1.tlog
c:\users\351\documents\visual studio 2017\projects\cec20\menu2\release\menu2.tlog\rc.write.1.tlog

View File

@ -1,7 +0,0 @@
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Platforms\Win32\PlatformToolsets\v141_xp\Toolset.targets(39,5): warning MSB8051: 面向 Windows XP 的支持已被弃用,将来的 Visual Studio 版本不再提供该支持。请访问 https://go.microsoft.com/fwlink/?linkid=2023588获取详细信息。
正在生成代码
0 of 263 functions ( 0.0%) were compiled, the rest were copied from previous compilation.
0 functions were new in current compilation
0 functions had inline decision re-evaluated but remain unchanged
已完成代码的生成
menu2.vcxproj -> C:\Users\351\Documents\Visual Studio 2017\Projects\cec20\Release\menu2.exe

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
#TargetFrameworkVersion=v4.0:PlatformToolSet=v141_xp:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=7.0
Release|Win32|C:\Users\351\Documents\Visual Studio 2017\Projects\cec20\|

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,112 +0,0 @@
// about.cpp: 实现文件
//
#include "pch.h"
#include "menu2.h"
#include "about.h"
#include "afxdialogex.h"
// about 对话框
IMPLEMENT_DYNAMIC(about, CDialogEx)
about::about(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_ABOUT_DIALOG, pParent)
{
}
about::~about()
{
}
void about::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATICVER, m_textver);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
}
BEGIN_MESSAGE_MAP(about, CDialogEx)
ON_BN_CLICKED(IDOK, &about::OnBnClickedOk)
END_MESSAGE_MAP()
// about 消息处理程序
void about::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnOK();
}
TCHAR* AsciiToUnicode(char *str)
{
DWORD dwNum = 0;
dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
TCHAR* pwHostName = new TCHAR[dwNum];
MultiByteToWideChar(CP_ACP, 0, str, -1, pwHostName, dwNum);
return pwHostName;
}
TCHAR lpPath__[255] = { 0 };
BOOL about::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
ShowWindow(SW_NORMAL);
CRect rtDesk;
CRect rtDlg;
::GetWindowRect(::GetDesktopWindow(), &rtDesk);
GetWindowRect(&rtDlg);
int iXpos = rtDesk.Width() / 2 - rtDlg.Width() / 2;
int iYpos = rtDesk.Height() / 2 - rtDlg.Height() / 2;
SetWindowPos(NULL, iXpos, iYpos, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
wsprintf(lpPath__, L"..\\CECD0.20");
HANDLE hFile = CreateFile(
lpPath__, // 文件名
GENERIC_READ, // 读权限
0, // 不共享
NULL, // 安全属性
OPEN_EXISTING, // 打开已存在的文件
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 模板文件的句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(L"ERROR");
return 1;
}
// 确定文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
// 分配内存读取文件
char buffer[255] = { 0 };
DWORD dwRead = 0;
// 读取文件内容
if (ReadFile(hFile, buffer, dwFileSize, &dwRead, NULL)) {
buffer[dwFileSize] = '\0'; // 添加字符串终止符
}
// 关闭文件句柄
CloseHandle(hFile);
m_textver.SetWindowText(AsciiToUnicode(buffer));
m_edit1.SetWindowText( L"Name Bilibili ID\r\n"
"351 351Workshop\r\n"
"Inter -INTER_INIT-\r\n"
"WinPad とある科学の手机副屏\r\n"
"GoldApple 不务正业的金苹果\r\n"
"DZY DZY20070614\r\n"
"Zesa LinuxMEMZ\r\n"
"XJBLMNP(?");
//HWND hWndEdit1 = m_edit1.GetSafeHwnd();
//::SendMessage(hWndEdit1, EM_LINESCROLL, 0, 3);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

View File

@ -1,29 +0,0 @@
#pragma once
// about 对话框
class about : public CDialogEx
{
DECLARE_DYNAMIC(about)
public:
about(CWnd* pParent = nullptr); // 标准构造函数
virtual ~about();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUT_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
virtual BOOL OnInitDialog();
CStatic m_textver;
afx_msg void OnStnClicked65535();
CEdit m_edit1;
};

View File

@ -1,133 +0,0 @@
// Win9x:
//
// The CRT now uses several "W" versions of functions which is more practial to require
// the use of the Microsoft Layer for Unicode (MSLU) for Windows 9x to implement it. The
// unicows.dll (for 9x) should be placed in the program folder with the .exe if using it.
// unicows.dll is only loaded on 9x platforms. The way Win9x works without the MSLU is
// that several "W" version of functions are located in kernel32.dll but they are just a
// stub that returns failure code. To implement the unicode layer (unicows) the unicode.lib
// must be linked prior to the other libs that should then linked in after unicode.lib.
// The libraries are:
//
// kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib
// version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib
// secur32.lib oleacc.lib oledlg.lib sensapi.lib
//
#include <windows.h>
// pull items from ntdef.h
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
typedef _Return_type_success_(return >= 0) LONG NTSTATUS;
//
// implementation of replacement function for GetModuleHandleExW
//
extern "C" BOOL WINAPI ImplementGetModuleHandleExW(DWORD dwFlags, LPCWSTR lpModuleName, HMODULE* phModule)
{
// check flag combinations
if (phModule == NULL ||
dwFlags & ~(GET_MODULE_HANDLE_EX_FLAG_PIN | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT | GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS) ||
((dwFlags & GET_MODULE_HANDLE_EX_FLAG_PIN) && (dwFlags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT)) ||
(lpModuleName == NULL && (dwFlags & GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS))) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
// check if to get by address
if (dwFlags & GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS) {
*phModule = NULL;
typedef PVOID(NTAPI *LPFN_RtlPcToFileHeader)(PVOID PcValue, PVOID * BaseOfImage);
const HMODULE hmodkernel32 = GetModuleHandleW(L"kernel32");
const LPFN_RtlPcToFileHeader pfnRtlPcToFileHeader = reinterpret_cast<LPFN_RtlPcToFileHeader>(GetProcAddress(hmodkernel32, "RtlPcToFileHeader"));
if (pfnRtlPcToFileHeader) {
// use RTL function (nt4+)
pfnRtlPcToFileHeader((PVOID)lpModuleName, (PVOID*)phModule);
}
else {
// query memory directly (win9x)
MEMORY_BASIC_INFORMATION mbi;
if (VirtualQuery((PVOID)lpModuleName, &mbi, sizeof(mbi)) >= offsetof(MEMORY_BASIC_INFORMATION, AllocationProtect)) {
*phModule = reinterpret_cast<HMODULE>(mbi.AllocationBase);
}
}
}
else {
// standard getmodulehandle - to see if loaded
*phModule = GetModuleHandleW(lpModuleName);
}
// check if module found
if (*phModule == NULL) {
SetLastError(ERROR_DLL_NOT_FOUND);
return FALSE;
}
// check if reference needs updating
if ((dwFlags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT) == 0) {
typedef NTSTATUS(NTAPI *LPFN_LdrAddRefDll)(ULONG Flags, PVOID BaseAddress);
#define LDR_ADDREF_DLL_PIN 0x00000001
const HMODULE hmodntdll = GetModuleHandleW(L"ntdll");
const LPFN_LdrAddRefDll pfnLdrAddRefDll = reinterpret_cast<LPFN_LdrAddRefDll>(GetProcAddress(hmodntdll, "LdrAddRefDll"));
if (pfnLdrAddRefDll) {
// update dll reference
if (!NT_SUCCESS(pfnLdrAddRefDll((dwFlags & GET_MODULE_HANDLE_EX_FLAG_PIN) ? LDR_ADDREF_DLL_PIN : 0, *phModule))) {
SetLastError(ERROR_GEN_FAILURE);
return FALSE;
}
}
else if (dwFlags & GET_MODULE_HANDLE_EX_FLAG_PIN) {
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}
else {
WCHAR *filename;
if ((filename = reinterpret_cast<WCHAR*>(VirtualAlloc(NULL, MAX_PATH * sizeof(WCHAR), MEM_COMMIT, PAGE_READWRITE))) != NULL) {
DWORD ret = GetModuleFileNameW(*phModule, filename, MAX_PATH);
if (ret < MAX_PATH) {
*phModule = LoadLibraryW(filename);
}
else *phModule = NULL;
VirtualFree(filename, 0, MEM_RELEASE);
// ensure load library success
if (*phModule == NULL) {
return FALSE;
}
}
else {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
}
}
return TRUE;
}
//
// implementation of replacement function for SetFilePointerEx
//
extern "C" BOOL WINAPI ImplementSetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
{
DWORD ret = SetFilePointer(hFile, liDistanceToMove.LowPart, &liDistanceToMove.HighPart, dwMoveMethod);
if (ret == INVALID_SET_FILE_POINTER) {
if (GetLastError() != NO_ERROR) {
return FALSE;
}
}
// check if provide file location
if (lpNewFilePointer) {
lpNewFilePointer->LowPart = ret;
lpNewFilePointer->HighPart = liDistanceToMove.HighPart;
}
// success
return TRUE;
}

View File

@ -1,49 +0,0 @@
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // MFC 支持功能区和控制条
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

View File

@ -1,250 +0,0 @@
.386
.MODEL flat, stdcall
USE_W_STRINGS EQU 1 ; Flag on which GetModuleHandle version to use
USE_WIN9X EQU 1 ; Flag on if to include Win9x specific requirements
EXTRN STDCALL ImplementGetModuleHandleExW@12 : PROC
EXTRN STDCALL ImplementSetFilePointerEx@20 : PROC
;; Declare functions that we will call statically
IF USE_W_STRINGS
EXTRN STDCALL _imp__GetModuleHandleW@4 : DWORD
ELSE
EXTRN STDCALL _imp__GetModuleHandleA@4 : DWORD
ENDIF
EXTRN STDCALL _imp__GetProcAddress@8 : DWORD
.DATA
;; Override the import symbols from kernel32.dll
__imp__InitializeSListHead@4 DWORD DownlevelInitializeSListHead
__imp__GetModuleHandleExW@12 DWORD DownlevelGetModuleHandleExW
__imp__EncodePointer@4 DWORD DownlevelEncodeDecodePointer
__imp__DecodePointer@4 DWORD DownlevelEncodeDecodePointer
;__imp__HeapSetInformation@16 dd DownlevelHeapSetInformation
__imp__SetFilePointerEx@20 DWORD ImplementSetFilePointerEx@20
EXTERNDEF STDCALL __imp__InitializeSListHead@4 : DWORD
EXTERNDEF STDCALL __imp__GetModuleHandleExW@12 : DWORD
EXTERNDEF STDCALL __imp__EncodePointer@4 : DWORD
EXTERNDEF STDCALL __imp__DecodePointer@4 : DWORD
;EXTERNDEF STDCALL __imp__HeapSetInformation@16 : DWORD
EXTERNDEF STDCALL __imp__SetFilePointerEx@20 : DWORD
; For Win9x support - need to change return value to TRUE for the crt startup
IF USE_WIN9X
__imp__InitializeCriticalSectionAndSpinCount@8 DWORD DownlevelInitializeCriticalSectionAndSpinCount
EXTERNDEF STDCALL __imp__InitializeCriticalSectionAndSpinCount@8 : DWORD
ENDIF
CONST SEGMENT
IF USE_W_STRINGS
kszKernel32 DB 'k', 00H, 'e', 00H, 'r', 00H, 'n', 00H, 'e', 00H, 'l', 00H, '3', 00H, '2', 00H, 00H, 00H
kszAdvApi32 DB 'a', 00H, 'd', 00H, 'v', 00H, 'a', 00H, 'p', 00H, 'i', 00H, '3', 00H, '2', 00H, 00H, 00H
ELSE
kszKernel32 DB "kernel32", 00H
kszAdvApi32 DB "advapi32", 00H
ENDIF
kszInitializeSListHead DB "InitializeSListHead", 00H
kszGetModuleHandleExW DB "GetModuleHandleExW", 00H
kszInitializeCriticalSectionAndSpinCount DB "InitializeCriticalSectionAndSpinCount", 00H
kszGetVersion DB "GetVersion", 00H
; Windows XP and Server 2003 and later have RtlGenRandom, which is exported as SystemFunction036.
; If needed, we could fall back to CryptGenRandom(), but that will be much slower
; because it has to drag in the entire crypto API.
; (See also: https://blogs.msdn.microsoft.com/michael_howard/2005/01/14/cryptographically-secure-random-number-on-windows-without-using-cryptoapi/)
; kszSystemFunction036 DB "SystemFunction036", 00H
CONST ENDS
.CODE
; C++ translation:
; extern "C" VOID WINAPI DownlevelInitializeSListHead(PSLIST_HEADER pHead)
; {
; const HMODULE hmodKernel32 = ::GetModuleHandleW(L"kernel32");
; typedef decltype(InitializeSListHead)* pfnInitializeSListHead;
; const pfnInitializeSListHead pfn = reinterpret_cast<pfnInitializeSListHead>(::GetProcAddress(hmodKernel32, "InitializeSListHead"));
; if (pfn)
; {
; // call WinAPI function
; pfn(pHead);
; }
; else
; {
; // fallback implementation for downlevel
; pHead->Alignment = 0;
; }
; }
DownlevelInitializeSListHead PROC
;; Get a handle to the DLL containing the function of interest.
push OFFSET kszKernel32
IF USE_W_STRINGS
call DWORD PTR _imp__GetModuleHandleW@4 ; Returns the handle to the library in EAX.
ELSE
call DWORD PTR _imp__GetModuleHandleA@4 ; Returns the handle to the library in EAX.
ENDIF
;; Attempt to obtain a pointer to the function of interest.
push OFFSET kszInitializeSListHead ; Push 2nd parameter (string containing function's name).
push eax ; Push 1st parameter (handle to the library).
call DWORD PTR _imp__GetProcAddress@8 ; Returns the pointer to the function in EAX.
;; Test for success, and call the function if we succeeded.
test eax, eax ; See if we successfully retrieved a pointer to the function.
je SHORT FuncNotSupported ; Jump on failure (ptr == 0), or fall through in the most-likely case.
jmp eax ; We succeeded (ptr != 0), so tail-call the function.
;; The dynamic call failed, presumably because the function isn't available.
;; So do what _RtlInitializeSListHead@4 (which is what we jump to on uplevel platforms) does,
;; which is to set pHead->Alignment to 0. It is a QWORD-sized value, so 32-bit code must
;; clear both of the DWORD halves.
FuncNotSupported:
mov edx, DWORD PTR [esp+4] ; get pHead->Alignment
xor eax, eax
mov DWORD PTR [edx], eax ; pHead->Alignment = 0
mov DWORD PTR [edx+4], eax
ret 4
DownlevelInitializeSListHead ENDP
; C++ translation:
; extern "C" BOOL WINAPI DownlevelGetModuleHandleExW(DWORD dwFlags, LPCTSTR lpModuleName, HMODULE* phModule)
; {
; const HMODULE hmodKernel32 = ::GetModuleHandleW(L"kernel32");
; typedef decltype(GetModuleHandleExW)* pfnGetModuleHandleExW;
; const pfnGetModuleHandleExW pfn = reinterpret_cast<pfnGetModuleHandleExW>(::GetProcAddress(hmodKernel32, "GetModuleHandleExW"));
; if (pfn)
; {
; // call WinAPI function
; return pfn(dwFlags, lpModuleName, phModule);
; }
; else
; {
; // fallback for downlevel: return failure
; return FALSE;
; }
; }
DownlevelGetModuleHandleExW PROC
;; Get a handle to the DLL containing the function of interest.
push OFFSET kszKernel32
IF USE_W_STRINGS
call DWORD PTR _imp__GetModuleHandleW@4 ; Returns the handle to the library in EAX.
ELSE
call DWORD PTR _imp__GetModuleHandleA@4 ; Returns the handle to the library in EAX.
ENDIF
;; Attempt to obtain a pointer to the function of interest.
push OFFSET kszGetModuleHandleExW ; Push 2nd parameter (string containing function's name).
push eax ; Push 1st parameter (handle to the library).
call DWORD PTR _imp__GetProcAddress@8 ; Returns the pointer to the function in EAX.
;; Test for success, and call the function if we succeeded.
test eax, eax ; See if we successfully retrieved a pointer to the function.
je SHORT FuncNotSupported ; Jump on failure (ptr == 0), or fall through in the most-likely case.
jmp eax ; We succeeded (ptr != 0), so tail-call the function.
;; The dynamic call failed, presumably because the function isn't available.
;; The basic VS 2015 CRT (used in a simple Win32 app) only calls this function
;; in try_cor_exit_process(), as called from common_exit (both in exit.cpp),
;; where it uses it to attempt to get a handle to the module mscoree.dll.
;; Since we don't care about managed apps, that attempt should rightfully fail.
;; If this turns out to be used in other contexts, we'll need to revisit this
;; and implement a proper fallback.
FuncNotSupported:
jmp ImplementGetModuleHandleExW@12
DownlevelGetModuleHandleExW ENDP
DownlevelEncodeDecodePointer proc
mov eax, [esp+4]
ret 4
DownlevelEncodeDecodePointer endp
; DownlevelHeapSetInformation proc
; mov eax, 1
; ret 10h
; DownlevelHeapSetInformation endp
; DownlevelSystemFunction036 PROC
; int 3 ; break --- stub unimplemented
; ret 8
; DownlevelSystemFunction036 ENDP
; Win9x section
IF USE_WIN9X
; here we need to return 1 for the crt startup code which checks the return value which on 9x is "none" (throws exception instead)
; This section will change the imported function on the first call for NT based OS so that every call doesn't require additional processing.
DownlevelInitializeCriticalSectionAndSpinCount proc
push OFFSET kszKernel32
IF USE_W_STRINGS
call DWORD PTR _imp__GetModuleHandleW@4 ; Returns the handle to the library in EAX.
ELSE
call DWORD PTR _imp__GetModuleHandleA@4 ; Returns the handle to the library in EAX.
ENDIF
;; Save copy of handle
push eax
;; Attempt to obtain a pointer to the function of interest.
push OFFSET kszInitializeCriticalSectionAndSpinCount ; Push 2nd parameter (string containing function's name).
push eax ; Push 1st parameter (handle to the library).
call DWORD PTR _imp__GetProcAddress@8 ; Returns the pointer to the function in EAX.
;; Test for success, and call the function if we succeeded.
test eax, eax ; See if we successfully retrieved a pointer to the function.
jz SHORT FuncNotSupported ; Jump on failure (ptr == 0), or fall through in the most-likely case.
;; save address and get back kernel32 handle
xchg dword ptr [esp],eax
;; Attempt to obtain a pointer to the function of interest.
push OFFSET kszGetVersion ; Push 2nd parameter (string containing function's name).
push eax ; Push 1st parameter (handle to the library).
call DWORD PTR _imp__GetProcAddress@8 ; Returns the pointer to the function in EAX.
;; See if function exists
test eax,eax
jz SHORT FuncNotSupported
;; call GetVersion
call eax
;; check if win9x
test eax,80000000h
pop eax ; get back address of InitializeCriticalSectionAndSpinCount function
jz WinNT
;; for Win9x we need to call and then change return code
push [esp+8] ; Copy the 1st parameter (+4 for IP return address, +4 for fist param)
push [esp+8] ; Copy the 2nd parameter (recall esp moves on push)
call eax
mov eax,1
ret 8
WinNT:
;; Change the call address for next calls and call directly
mov __imp__InitializeCriticalSectionAndSpinCount@8,eax
jmp eax
;; We should never end up here but if we do, fail the call
FuncNotSupported:
pop eax
xor eax,eax
ret 8
DownlevelInitializeCriticalSectionAndSpinCount endp
ENDIF
END

View File

@ -1,5 +0,0 @@
[1]
fat=0
name="CE"
cmd="DeviceEmulator.exe"
para="..\ARMV4\WM65PPC.bin"

View File

@ -1,107 +0,0 @@

// menu2.cpp: 定义应用程序的类行为。
//
#include "pch.h"
#include "framework.h"
#include "menu2.h"
#include "menu2Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Cmenu2App
BEGIN_MESSAGE_MAP(Cmenu2App, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// Cmenu2App 构造
Cmenu2App::Cmenu2App()
{
// 支持重新启动管理器
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的 Cmenu2App 对象
Cmenu2App theApp;
// Cmenu2App 初始化
BOOL Cmenu2App::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// 创建 shell 管理器,以防对话框包含
// 任何 shell 树视图控件或 shell 列表视图控件。
CShellManager *pShellManager = new CShellManager;
// 激活“Windows Native”视觉管理器以便在 MFC 控件中启用主题
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
Cmenu2Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
}
// 删除上面创建的 shell 管理器。
if (pShellManager != nullptr)
{
delete pShellManager;
}
#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
ControlBarCleanUp();
#endif
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}

View File

@ -1,32 +0,0 @@

// menu2.h: PROJECT_NAME 应用程序的主头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "include 'pch.h' before including this file for PCH"
#endif
#include "resource.h" // 主符号
// Cmenu2App:
// 有关此类的实现,请参阅 menu2.cpp
//
class Cmenu2App : public CWinApp
{
public:
Cmenu2App();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
extern Cmenu2App theApp;

Binary file not shown.

View File

@ -1,229 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{CFE8D300-EF37-486D-BA7F-C82809264B39}</ProjectGuid>
<Keyword>MFCProj</Keyword>
<RootNamespace>menu2</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141_xp</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Static</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WINDOWS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Midl>
<MkTypLibCompatible>false</MkTypLibCompatible>
<ValidateAllParameters>true</ValidateAllParameters>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</Midl>
<ResourceCompile>
<Culture>0x0804</Culture>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="about.h" />
<ClInclude Include="DigHelp.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="menu2.h" />
<ClInclude Include="menu2Dlg.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="Resource.h" />
<ClInclude Include="targetver.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="about.cpp" />
<ClCompile Include="DigHelp.cpp" />
<ClCompile Include="menu2.cpp" />
<ClCompile Include="menu2Dlg.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="menu2.rc" />
</ItemGroup>
<ItemGroup>
<None Include="res\menu2.rc2" />
</ItemGroup>
<ItemGroup>
<Image Include="E:\Desktop\background - 副本 (2).bmp" />
<Image Include="E:\Desktop\background2.bmp" />
<Image Include="res\about.bmp" />
<Image Include="res\background.bmp" />
<Image Include="res\flag.bmp" />
<Image Include="res\info.ico" />
<Image Include="res\menu2.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets" />
</Project>

View File

@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="menu2.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="menu2Dlg.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="framework.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="targetver.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="Resource.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="pch.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="DigHelp.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="about.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="menu2.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="menu2Dlg.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="pch.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="DigHelp.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="about.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="menu2.rc">
<Filter>资源文件</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<None Include="res\menu2.rc2">
<Filter>资源文件</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Image Include="res\menu2.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="E:\Desktop\background2.bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\background.bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\info.ico">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\flag.bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="E:\Desktop\background - 副本 (2).bmp">
<Filter>资源文件</Filter>
</Image>
<Image Include="res\about.bmp">
<Filter>资源文件</Filter>
</Image>
</ItemGroup>
</Project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<RESOURCE_FILE>menu2.rc</RESOURCE_FILE>
</PropertyGroup>
</Project>

View File

@ -1,236 +0,0 @@

// menu2Dlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "menu2.h"
#include "menu2Dlg.h"
#include "afxdialogex.h"
#include "DigHelp.h"
#include "about.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define MAXTREE 255
// Cmenu2Dlg 对话框
Cmenu2Dlg::Cmenu2Dlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MENU2_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Cmenu2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE1, m_tree);
}
BEGIN_MESSAGE_MAP(Cmenu2Dlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &Cmenu2Dlg::OnTvnSelchangedTree1)
ON_BN_CLICKED(IDOK, &Cmenu2Dlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &Cmenu2Dlg::OnBnClickedCancel)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, &Cmenu2Dlg::OnNMClickSyslink1)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK2, &Cmenu2Dlg::OnNMClickSyslink2)
ON_NOTIFY(NM_CLICK, IDC_SYSLINK3, &Cmenu2Dlg::OnNMClickSyslink3)
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &Cmenu2Dlg::OnNMDblclkTree1)
END_MESSAGE_MAP()
// Cmenu2Dlg 消息处理程序
void Cmenu2Dlg::MyExpandTree(HTREEITEM hTreeItem)
{
if (!m_tree.ItemHasChildren(hTreeItem))//如果树控件根节点没有子节点则返回
{
return;
}
HTREEITEM hNextItem = m_tree.GetChildItem(hTreeItem);//若树控件的根节点有子节点则获取根节点的子节点
while (hNextItem != NULL)//若有
{
MyExpandTree(hNextItem);//递归,展开子节点下的所有子节点
hNextItem = m_tree.GetNextItem(hNextItem, TVGN_NEXT);//获取根节点的下一个子节点
}
m_tree.Expand(hTreeItem, TVE_EXPAND);//展开节点
}
TCHAR lpPath[255] = { 0 };
HTREEITEM treeStr[255] = { 0 };
BOOL Cmenu2Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
GetCurrentDirectory(MAX_PATH, lpPath);
wsprintf(lpPath, L"%s\\menu.enus", lpPath);
SetWindowLong(m_hWnd, GWL_STYLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX);
treeStr[0] = m_tree.InsertItem(L"Windows CE", 1, 0, TVI_ROOT);
for (int i = 1; i < 255; i++)
{
TCHAR iniCBuffer[255] = { 0 };
wsprintf(iniCBuffer, L"%d", i);
int currentFat = GetPrivateProfileInt(iniCBuffer, L"fat", -1, lpPath);
if (currentFat == -1)
break;
TCHAR currentName[255] = { 0 };
GetPrivateProfileString(iniCBuffer, L"name", NULL, currentName, 255, lpPath);
treeStr[i] = m_tree.InsertItem(currentName, 1, 0, treeStr[currentFat]);
}
MyExpandTree(m_tree.GetRootItem());
DigHelp *dlg = new DigHelp;
dlg->Create(IDD_DIALOG1, NULL);
dlg->ShowWindow(SW_SHOWNORMAL);//SW_SHOW是对话框的显示方式
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void Cmenu2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialogEx::OnPaint();
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP1); //对话框的背景图片
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld = dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR Cmenu2Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void Cmenu2Dlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void doCommand(TCHAR *cmd, TCHAR *para)
{
ShellExecute(NULL, L"open", cmd, para, NULL, SW_SHOWNORMAL);
}
void Cmenu2Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//CDialogEx::OnOK();
HTREEITEM hselected = m_tree.GetSelectedItem();
int currentTreeID = 0;
for (; currentTreeID < 255; currentTreeID++)
{
if (hselected == treeStr[currentTreeID])
break;
}
TCHAR currentINIHead[255] = { 0 };
TCHAR currentINICmd[255] = { 0 };
TCHAR currentINIPara[255] = { 0 };
wsprintf(currentINIHead, L"%d", currentTreeID);
GetPrivateProfileString(currentINIHead, L"cmd", NULL, currentINICmd, 255, lpPath);
GetPrivateProfileString(currentINIHead, L"para", NULL, currentINIPara, 255, lpPath);
if (currentINICmd[0] != NULL)
doCommand(currentINICmd, currentINIPara);
}
void Cmenu2Dlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnCancel();
}
void Cmenu2Dlg::OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
doCommand(L"..\\DOCS\\UpdateLog.txt", NULL);
*pResult = 0;
}
void Cmenu2Dlg::OnNMClickSyslink2(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
doCommand(L"..\\DOCS\\TimeLine.xlsx", NULL);
*pResult = 0;
}
void Cmenu2Dlg::OnNMClickSyslink3(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
//doCommand(L".\\about.exe", NULL);
about *dlg = new about;
dlg->Create(IDD_ABOUT_DIALOG, NULL);
dlg->ShowWindow(SW_SHOWNORMAL);//SW_SHOW是对话框的显示方式
*pResult = 0;
}
void Cmenu2Dlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
Cmenu2Dlg::OnBnClickedOk();
*pResult = 0;
}

View File

@ -1,45 +0,0 @@

// menu2Dlg.h: 头文件
//
#pragma once
// Cmenu2Dlg 对话框
class Cmenu2Dlg : public CDialogEx
{
// 构造
public:
Cmenu2Dlg(CWnd* pParent = nullptr); // 标准构造函数
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MENU2_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult);
CTreeCtrl m_tree;
void MyExpandTree(HTREEITEM hTreeItem);
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
afx_msg void OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnNMClickSyslink2(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnNMClickSyslink3(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult);
};

View File

@ -1,5 +0,0 @@
// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。

View File

@ -1,23 +0,0 @@
// pch.h: 这是预编译标头文件。
// 下方列出的文件仅编译一次,提高了将来生成的生成性能。
// 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
// 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
// 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
#ifndef PCH_H
#define PCH_H
// 添加要在此处预编译的标头
#ifndef WINVER
#define WINVER 0x0501
#endif
#ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows XP.
#define _WIN32_WINNT 0x0501
#endif
#include "framework.h"
#include <afxcontrolbars.h>
#include <afxcontrolbars.h>
#endif //PCH_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,31 +0,0 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 menu2.rc 使用
//
#define IDD_MENU2_DIALOG 102
#define IDR_MAINFRAME 128
#define IDB_BITMAP3 130
#define IDB_BITMAP1 131
#define IDI_ICON1 132
#define IDD_DIALOG1 133
#define IDD_ABOUT_DIALOG 134
#define IDB_BITMAP2 135
#define IDC_TREE1 1000
#define IDC_SYSLINK1 1001
#define IDC_SYSLINK2 1002
#define IDC_SYSLINK3 1003
#define IDC_BUTTON1 1004
#define IDC_STATIC1 1005
#define IDC_STATICVER 1006
#define IDC_EDIT1 1007
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 136
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1008
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@ -1,8 +0,0 @@
#pragma once
// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>

70
WNT/menu3.exe/ReadMe.txt Normal file
View File

@ -0,0 +1,70 @@
================================================================================
MICROSOFT 基础类库: menu3 项目概述
===============================================================================
应用程序向导已为您创建了这个 menu3 应用程序。此应用程序不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写应用程序的起点。
本文件概要介绍组成 menu3 应用程序的每个文件的内容。
menu3.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
menu3.h
这是应用程序的主要头文件。它包括其他项目特定的头文件(包括 Resource.h),并声明 Cmenu3App 应用程序类。
menu3.cpp
这是包含应用程序类 Cmenu3App 的主要应用程序源文件。
menu3.rc
这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源位于 2052 中。
res\menu3.ico
这是用作应用程序图标的图标文件。此图标包括在主要资源文件 menu3.rc 中。
res\menu3.rc2
此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。
/////////////////////////////////////////////////////////////////////////////
应用程序向导创建一个对话框类:
menu3Dlg.hmenu3Dlg.cpp - 对话框
这些文件包含 Cmenu3Dlg 类。该类定义应用程序主对话框的行为。该对话框的模板位于 menu3.rc 中,该文件可以在 Microsoft Visual C++ 中进行编辑。
/////////////////////////////////////////////////////////////////////////////
其他功能:
ActiveX 控件
应用程序包括对使用 ActiveX 控件的支持。
/////////////////////////////////////////////////////////////////////////////
其他标准文件:
StdAfx.hStdAfx.cpp
这些文件用于生成名为 menu3.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
Resource.h
这是标准头文件,它定义新的资源 ID。
Microsoft Visual C++ 读取并更新此文件。
menu3.manifest
应用程序清单文件供 Windows XP 用来描述应用程序
对特定版本并行程序集的依赖性。加载程序使用此
信息从程序集缓存加载适当的程序集或
从应用程序加载私有信息。应用程序清单可能为了重新分发而作为
与应用程序可执行文件安装在相同文件夹中的外部 .manifest 文件包括,
也可能以资源的形式包括在该可执行文件中。
/////////////////////////////////////////////////////////////////////////////
其他注释:
应用程序向导使用“TODO:”指示应添加或自定义的源代码部分。
如果应用程序在共享的 DLL 中使用 MFC则需要重新发布这些 MFC DLL如果应用程序所用的语言与操作系统的当前区域设置不同则还需要重新发布对应的本地化资源 MFC80XXX.DLL。有关这两个主题的更多信息请参见 MSDN 文档中有关 Redistributing Visual C++ applications (重新发布 Visual C++ 应用程序)的章节。
/////////////////////////////////////////////////////////////////////////////

108
WNT/menu3.exe/aboutDlg.cpp Normal file
View File

@ -0,0 +1,108 @@
// aboutDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "menu3.h"
#include "aboutDlg.h"
// CaboutDlg 对话框
IMPLEMENT_DYNAMIC(CaboutDlg, CDialog)
CaboutDlg::CaboutDlg(CWnd* pParent /*=NULL*/)
: CDialog(CaboutDlg::IDD, pParent)
{
}
CaboutDlg::~CaboutDlg()
{
}
void CaboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CaboutDlg, CDialog)
END_MESSAGE_MAP()
// CaboutDlg 消息处理程序
TCHAR* AsciiToUnicode(char *str)
{
DWORD dwNum = 0;
dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
TCHAR* pwHostName = new TCHAR[dwNum];
MultiByteToWideChar(CP_ACP, 0, str, -1, pwHostName, dwNum);
return pwHostName;
}
BOOL CaboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
MessageBox(L"aaaaa");
ShowWindow(SW_NORMAL);
CRect rtDesk;
CRect rtDlg;
::GetWindowRect(::GetDesktopWindow(), &rtDesk);
GetWindowRect(&rtDlg);
int iXpos = rtDesk.Width() / 2 - rtDlg.Width() / 2;
int iYpos = rtDesk.Height() / 2 - rtDlg.Height() / 2;
SetWindowPos(NULL, iXpos, iYpos, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
TCHAR lpPath[255] = { 0 };
wsprintf(lpPath, L"..\\CECD0.20");
HANDLE hFile = CreateFile(
lpPath, // 文件名
GENERIC_READ, // 读权限
0, // 不共享
NULL, // 安全属性
OPEN_EXISTING, // 打开已存在的文件
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 模板文件的句柄
);
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(L"ERROR");
return 1;
}
// 确定文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
// 分配内存读取文件
char buffer[255] = { 0 };
DWORD dwRead = 0;
// 读取文件内容
if (ReadFile(hFile, buffer, dwFileSize, &dwRead, NULL)) {
buffer[dwFileSize] = '\0'; // 添加字符串终止符
}
// 关闭文件句柄
CloseHandle(hFile);
GetDlgItem(IDC_STATIC1)->SetWindowText(AsciiToUnicode(buffer));
GetDlgItem(IDC_EDIT1)->SetWindowText( L"Developer\r\n"
L" 351 351Workshop@Bilibili\r\n"
L"Sponsor\r\n"
L" IBM IBM_Official@Bilibili\r\n"
L" Dr.Quest 蓬岸@知乎\r\n"
L"Image Providing\r\n"
L" Alexis lucss21a@Discord\r\n"
L"Artworks\r\n"
L" WinPad とある科学の手机副屏@Bilibili\r\n"
L"Guidance and Testing\r\n"
L" Inter -INTER_INIT-@Bilibili\r\n"
L" GoldApple 不务正业的金苹果@Bilibili\r\n"
L" Zesa LinuxMEMZ@Bilibili\r\n"
L" DZY DZY20070614@Bilibili\r\n");
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

23
WNT/menu3.exe/aboutDlg.h Normal file
View File

@ -0,0 +1,23 @@
#pragma once
// CaboutDlg 对话框
class CaboutDlg : public CDialog
{
DECLARE_DYNAMIC(CaboutDlg)
public:
CaboutDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CaboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
};

546
WNT/menu3.exe/menu.enus Normal file
View File

@ -0,0 +1,546 @@
[sug]
maxInfo=7
0="Background color in Shell Emulator depends on your host computer's setting."
1="Sound in CE 1.x Shell Emulator depends on your host computer's setting."
2="Reset your computer to boot into CEPC Loader."
3="LOADCEPC.EXE will load the CE image to the memory."
4="If the CEPC Loader show an error,you can try to increase memory."
5="CE Collections was called CEPC Collection before!"
6="Don't use more than one Shell Emulator at the same time!"
[0]
fat=-2
nodeNum=999
name="Windows CE Family"
[1]
fat=0
name="1.x"
[2]
fat=0
name="2.x"
[3]
fat=0
name="3.x"
[4]
fat=0
name="4.x"
[5]
fat=0
name="5.x"
[6]
fat=0
name="6.x"
[7]
fat=0
name="7.x"
[8]
fat=0
name="8.x"
[11]
fat=1
name="1.0x"
[13]
fat=2
name="2.00"
[14]
fat=2
name="2.01"
[15]
fat=2
name="2.10"
[16]
fat=2
name="2.11"
[17]
fat=2
name="2.12"
[18]
fat=3
name="3.00"
[19]
fat=4
name="4.00"
[20]
fat=4
name="4.10"
[21]
fat=4
name="4.20"
[22]
fat=4
name="4.21"
[23]
fat=5
name="5.00"
[24]
fat=5
name="5.10"
[25]
fat=5
name="5.20"
[26]
fat=6
name="6.00"
[30]
fat=7
name="7.00"
[31]
fat=7
name="7.10"
[32]
fat=8
name="8.00"
[101]
fat=11
name="Windows CE 1.0x"
cmd="hiderun.vbs"
para=""shellmgr 1 .\10xSTD SHELL32.exe""
[201]
fat=13
name="Windows CE 2.0"
cmd="hiderun.vbs"
para=""whitebox.exe /D:3 /M:PRO2.cfg ..\..\I486\20xSTD.bin""
dir=".\whitebox\"
[202]
fat=13
name="Handheld PC 2.0"
cmd="hiderun.vbs"
para=""shellmgr 2 .\200HPC explorem.exe""
[203]
fat=14
name="Auto PC 1.0"
cmd="hiderun.vbs"
para=""shellmgr 4 .\201APC APCHW.exe""
[204]
fat=14
name="Palm-size PC 1.0"
cmd="hiderun.vbs"
para=""shellmgr 2 .\201PPC SHELL32.exe""
[205]
fat=15
name="Windows CE 2.10"
cmd="hiderun.vbs"
para=""whitebox.exe /D:3 ..\..\I486\210STD.bin""
dir=".\whitebox\"
[206]
fat=16
name="Windows CE 2.11"
cmd="hiderun.vbs"
para=""whitebox.exe /D:3 ..\..\I486\211STD.bin""
dir=".\whitebox\"
[207]
fat=16
name="Palm-size PC 1.1"
cmd="hiderun.vbs"
para=""shellmgr 2 .\211PPC1 SHELL32.exe""
[208]
fat=16
name="Palm-szie PC 1.2"
cmd="hiderun.vbs"
para=""shellmgr 2 .\211PPC2 SHELL32.exe""
[209]
fat=16
name="Handheld PC 3.0"
cmd="hiderun.vbs"
para=""shellmgr 2 .\211HPC explorej.exe""
[200]
fat=17
name="Windows CE 2.12"
cmd="hiderun.vbs"
para=""whitebox.exe /D:3 ..\..\I486\212STD.bin""
dir=".\whitebox\"
[301]
fat=18
name="Windows CE 3.0"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\300STD.bin""
dir=".\whitebox\"
[302]
fat=18
name="Pocket PC 2000"
cmd="hiderun.vbs"
para=""shellmgr 3 .\300PPC2K SHELL32.exe""
[303]
fat=18
name="Handheld PC 2000"
cmd="hiderun.vbs"
para=""whitebox.exe /D:3 ..\..\I486\300HPC.bin""
dir=".\whitebox\"
[304]
fat=18
name="Windows Mobile 2002"
[305]
fat=304
name="Pocket PC"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\300PPC.bin""
dir=".\whitebox\"
[306]
fat=304
name="Smart Phone"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\300SP.bin""
dir=".\whitebox\"
[401]
fat=19
name="Windows CE.net 4.0"
[402]
fat=401
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\400STD.bin""
dir=".\whitebox\"
[403]
fat=401
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\400TC.bin""
dir=".\whitebox\"
[404]
fat=20
name="Windows CE.net 4.1"
[405]
fat=404
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\410STD.bin""
dir=".\whitebox\"
[406]
fat=404
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\410TC.bin""
dir=".\whitebox\"
[407]
fat=21
name="Windows CE.net 4.2"
[408]
fat=407
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\420STD.bin""
dir=".\whitebox\"
[409]
fat=407
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\420TC.bin""
dir=".\whitebox\"
[410]
fat=21
name="Windows Mobile 2003"
[411]
fat=410
name="Pocket PC"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\420PPC.bin""
dir=".\whitebox\"
[412]
fat=410
name="Smart Phone"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\420SP.bin""
dir=".\whitebox\"
[413]
fat=22
name="Windows Mobile 2003 SE"
[414]
fat=413
name="Pocket PC"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\421PPC.bin""
dir=".\whitebox\"
[415]
fat=413
name="Smart Phone"
cmd="hiderun.vbs"
para=""whitebox.exe /L:240x320x16 ..\..\I486\421SP.bin""
dir=".\whitebox\"
[501]
fat=23
name="Windows CE.net 5.0"
[502]
fat=501
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\500STD.bin""
dir=".\whitebox\"
[503]
fat=501
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\500TC.bin""
dir=".\whitebox\"
[504]
fat=501
name="IP Phone"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\500IPP.bin""
dir=".\whitebox\"
[505]
fat=23
name="Networked Media Device 5.0"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\500NMD.bin""
dir=".\whitebox\"
[506]
fat=24
name="Windows Mobile 5.0"
[507]
fat=506
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\510PPC.bin /memsize 256"
[508]
fat=506
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\510SP.bin /memsize 256"
[509]
fat=24
name="Windows Mobile 5.2"
[510]
fat=509
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\510PPC2.bin /memsize 256"
[511]
fat=509
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\510SP2.bin /memsize 256"
[512]
fat=25
name="Windows Mobile 6.0"
[513]
fat=512
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC.bin /memsize 256"
[514]
fat=512
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP.bin /memsize 256"
[515]
fat=25
name="Windows Mobile 6.0.2"
[516]
fat=515
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC02.bin /memsize 256"
[517]
fat=515
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP02.bin /memsize 256"
[518]
fat=25
name="Windows Mobile 6.1"
[519]
fat=518
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC1.bin /memsize 256"
[520]
fat=518
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP1.bin /memsize 256"
[521]
fat=25
name="Windows Mobile 6.1.4"
[522]
fat=521
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC14.bin /memsize 256"
[523]
fat=521
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP14.bin /memsize 256"
[524]
fat=25
name="Windows Mobile 6.5"
[525]
fat=524
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC5.bin /memsize 256"
[526]
fat=524
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP5.bin /memsize 256"
[527]
fat=25
name="Windows Mobile 6.5.3"
[528]
fat=527
name="Pocket PC"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520PPC53.bin /memsize 256"
[529]
fat=527
name="Smart Phone"
cmd="DeviceEmulator.exe"
para="..\ARMV4\520SP53.bin /memsize 256"
[601]
fat=26
name="Windows Embedded CE 6.0"
[602]
fat=601
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\60xSTD.bin""
dir=".\whitebox\"
[603]
fat=601
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\60xTC.bin""
dir=".\whitebox\"
[604]
fat=601
name="IP Phone"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\60xIPP.bin""
dir=".\whitebox\"
[605]
fat=601
name="NMD UI(5.0)"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\60xNMD.bin""
dir=".\whitebox\"
[701]
fat=30
name="Windows Embedded Compact 7.0"
[702]
fat=701
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700STD.bin""
dir=".\whitebox\"
[703]
fat=701
name="Thin Client"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700TC.bin""
dir=".\whitebox\"
[704]
fat=701
name="Silverlight"
[705]
fat=704
name="Theme A"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700SL1.bin""
dir=".\whitebox\"
[706]
fat=704
name="Theme B"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700SL2.bin""
dir=".\whitebox\"
[707]
fat=704
name="Theme C"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700SL3.bin""
dir=".\whitebox\"
[708]
fat=704
name="Theme D"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700SL4.bin""
dir=".\whitebox\"
[709]
fat=30
name="Automotive Embedded 7"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\700APC.bin""
dir=".\whitebox\"
[710]
fat=30
name="Windows Phone 7"
cmd="hiderun.vbs"
para="".\xdemgr 0 ..\..\ARMV40\700WP.bin""
[711]
fat=30
name="Windows Phone 7 NoDo"
cmd="hiderun.vbs"
para="".\xdemgr 0 ..\..\ARMV40\700WPN.bin""
[712]
fat=31
name="Windows Phone 7.5"
cmd="hiderun.vbs"
para="".\xdemgr 2 ..\..\ARMV40\710WP5.bin""
[713]
fat=31
name="Windows Phone 7.5 Refresh"
cmd="hiderun.vbs"
para="".\xdemgr 2 ..\..\ARMV40\710WP5R.bin""
[714]
fat=31
name="Windows Phone 7.8"
cmd="hiderun.vbs"
para="".\xdemgr 2 ..\..\ARMV40\710WP8.bin""
[801]
fat=32
name="Windows Embedded Compact 2013"
[802]
fat=801
name="Standard"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\800STD.bin""
dir=".\whitebox\"
[803]
fat=801
name="Silverlight"
[804]
fat=803
name="Theme A"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\800SL1.bin""
dir=".\whitebox\"
[805]
fat=803
name="Theme B"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\800SL2.bin""
dir=".\whitebox\"
[806]
fat=803
name="Theme C"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\800SL3.bin""
dir=".\whitebox\"
[807]
fat=803
name="Theme D"
cmd="hiderun.vbs"
para=""whitebox.exe /L:800x600x16 ..\..\I486\800SL4.bin""
dir=".\whitebox\"

BIN
WNT/menu3.exe/menu3.aps Normal file

Binary file not shown.

78
WNT/menu3.exe/menu3.cpp Normal file
View File

@ -0,0 +1,78 @@
// menu3.cpp : 定义应用程序的类行为。
//
#include "stdafx.h"
#include "menu3.h"
#include "menu3Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Cmenu3App
BEGIN_MESSAGE_MAP(Cmenu3App, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// Cmenu3App 构造
Cmenu3App::Cmenu3App()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 Cmenu3App 对象
Cmenu3App theApp;
// Cmenu3App 初始化
BOOL Cmenu3App::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("CE-Collection"));
Cmenu3Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此处放置处理何时用“确定”来关闭
// 对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用“取消”来关闭
// 对话框的代码
}
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}

31
WNT/menu3.exe/menu3.h Normal file
View File

@ -0,0 +1,31 @@
// menu3.h : PROJECT_NAME 应用程序的主头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif
#include "resource.h" // 主符号
// Cmenu3App:
// 有关此类的实现,请参阅 menu3.cpp
//
class Cmenu3App : public CWinApp
{
public:
Cmenu3App();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
extern Cmenu3App theApp;

220
WNT/menu3.exe/menu3.rc Normal file
View File

@ -0,0 +1,220 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 中文(中华人民共和国) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
"LANGUAGE 4, 2\r\n"
"#pragma code_page(936)\r\n"
"#include ""res\\menu3.rc2"" // 非 Microsoft Visual C++ 编辑的资源\r\n"
"#include ""afxres.rc"" // 标准组件\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON "res\\menu3.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 346, 344
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About CE-Collections"
FONT 9, "宋体", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,267,316,54,17,WS_GROUP
CONTROL 130,IDC_STATIC,"Static",SS_BITMAP,6,4,333,67
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,75,345,1
LTEXT "CE-Collections Project",IDC_STATIC,43,81,89,8
LTEXT "<VER>",IDC_STATIC1,43,93,278,8
LTEXT "Develoment:",IDC_STATIC,43,215,45,8
EDITTEXT IDC_EDIT1,48,228,273,78,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL
LTEXT "Copyright:",IDC_STATIC,43,115,41,8
LTEXT "351Workshop 2022-2025",IDC_STATIC,48,127,85,8
LTEXT "Microsoft Crop.",IDC_STATIC,48,139,61,8
LTEXT "Thanks to:",IDC_STATIC,43,159,41,8
LTEXT "FarEast Online Research 2025-2025",IDC_STATIC,48,183,133,8
LTEXT "ONEW Studio 2022-2025",IDC_STATIC,48,171,85,8
LTEXT "Compumuseum 2025-2025",IDC_STATIC,48,196,85,8
END
IDD_MENU3_DIALOG DIALOGEX 0, 0, 683, 512
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
FONT 9, "宋体", 0, 0, 0x1
BEGIN
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | WS_BORDER | WS_TABSTOP,265,137,385,295
PUSHBUTTON "Run>>",IDOK,594,441,56,16
LTEXT "Help",IDC_STATICBTN2,14,137,67,16
LTEXT "Version list",IDC_STATICBTN3,14,160,67,16
LTEXT "About...",IDC_STATICBTN1,14,203,67,16
END
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "351Workshop"
VALUE "FileDescription", "CE-Collections WinNT platform loader"
VALUE "FileVersion", "2.02.RC1.02"
VALUE "InternalName", "menu3.exe"
VALUE "LegalCopyright", "Copyright 351Workshop 2022-2025"
VALUE "OriginalFilename", "menu3.exe"
VALUE "ProductName", "CE-Collections"
VALUE "ProductVersion", "2.02.RC1.02"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
VERTGUIDE, 43
VERTGUIDE, 48
VERTGUIDE, 321
END
IDD_MENU3_DIALOG, DIALOG
BEGIN
VERTGUIDE, 14
VERTGUIDE, 81
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_BITMAP1 BITMAP "res\\background.bmp"
IDB_BITMAP2 BITMAP "res\\about.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// Cursor
//
IDC_CURSOR1 CURSOR "res\\hand.cur"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "About CE-Collections(&A)..."
END
#endif // 中文(中华人民共和国) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#pragma code_page(936)
#include "res\menu3.rc2" // 非 Microsoft Visual C++ 编辑的资源
#include "afxres.rc" // 标准组件
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

284
WNT/menu3.exe/menu3.vcproj Normal file
View File

@ -0,0 +1,284 @@
<?xml version="1.0" encoding="gb2312"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="menu3"
ProjectGUID="{FA3449F6-31A9-4D7D-9FD6-4313C952F258}"
RootNamespace="menu3"
Keyword="MFCProj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="false"
ValidateParameters="false"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="2052"
AdditionalIncludeDirectories="$(IntDir)"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="false"
ValidateParameters="false"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
MinimalRebuild="false"
RuntimeLibrary="0"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="2052"
AdditionalIncludeDirectories="$(IntDir)"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Ô´Îļþ"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\menu3.cpp"
>
</File>
<File
RelativePath=".\menu3Dlg.cpp"
>
</File>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Í·Îļþ"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\menu3.h"
>
</File>
<File
RelativePath=".\menu3Dlg.h"
>
</File>
<File
RelativePath=".\Resource.h"
>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
</Filter>
<Filter
Name="×ÊÔ´Îļþ"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\res\about.bmp"
>
</File>
<File
RelativePath=".\res\background.bmp"
>
</File>
<File
RelativePath=".\res\hand.cur"
>
</File>
<File
RelativePath=".\res\menu3.ico"
>
</File>
<File
RelativePath=".\menu3.rc"
>
</File>
<File
RelativePath=".\res\menu3.rc2"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="menu3.rc"
/>
</Globals>
</VisualStudioProject>

396
WNT/menu3.exe/menu3Dlg.cpp Normal file
View File

@ -0,0 +1,396 @@
// menu3Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "menu3.h"
#include "menu3Dlg.h"
#include "afxwin.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
public:
CEdit m_edit1;
CStatic m_textver;
virtual BOOL OnInitDialog();
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
DDX_Control(pDX, IDC_STATIC1, m_textver);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// Cmenu3Dlg 对话框
Cmenu3Dlg::Cmenu3Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Cmenu3Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Cmenu3Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE1, m_tree);
}
BEGIN_MESSAGE_MAP(Cmenu3Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDCANCEL, &Cmenu3Dlg::OnBnClickedCancel)
ON_BN_CLICKED(IDOK, &Cmenu3Dlg::OnBnClickedOk)
ON_NOTIFY(NM_DBLCLK, IDC_TREE1, &Cmenu3Dlg::OnNMDblclkTree1)
ON_WM_CTLCOLOR()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
// Cmenu3Dlg 消息处理程序
void Cmenu3Dlg::MyExpandTree(HTREEITEM hTreeItem)
{
if (!m_tree.ItemHasChildren(hTreeItem))//如果树控件根节点没有子节点则返回
{
return;
}
HTREEITEM hNextItem = m_tree.GetChildItem(hTreeItem);//若树控件的根节点有子节点则获取根节点的子节点
while (hNextItem != NULL)//若有
{
MyExpandTree(hNextItem);//递归,展开子节点下的所有子节点
hNextItem = m_tree.GetNextItem(hNextItem, TVGN_NEXT);//获取根节点的下一个子节点
}
m_tree.Expand(hTreeItem, TVE_EXPAND);//展开节点
}
TCHAR lpPath[255] = { 0 };
HTREEITEM *treeStr;
BOOL Cmenu3Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
wsprintf(lpPath, L".\\menu.enus");
GetDlgItem(IDC_STATICBTN1)->GetWindowRect(&m_rectbtn1);
ScreenToClient(&m_rectbtn1);
GetDlgItem(IDC_STATICBTN2)->GetWindowRect(&m_rectbtn2);
ScreenToClient(&m_rectbtn2);
GetDlgItem(IDC_STATICBTN3)->GetWindowRect(&m_rectbtn3);
ScreenToClient(&m_rectbtn3);
//SetWindowLong(m_hWnd, GWL_STYLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX);
int iNodeNum = GetPrivateProfileInt(L"0", L"nodeNum", 255, lpPath);
treeStr = new HTREEITEM[iNodeNum]();
for (int i = 0; i < iNodeNum; i++)
{
TCHAR iniCBuffer[255] = { 0 };
wsprintf(iniCBuffer, L"%d", i);
int currentFat = GetPrivateProfileInt(iniCBuffer, L"fat", -1, lpPath);
if (currentFat == -1)
continue;//201C101
TCHAR currentName[255] = { 0 };
GetPrivateProfileString(iniCBuffer, L"name", NULL, currentName, 255, lpPath);
if (currentFat == -2)
treeStr[0] = m_tree.InsertItem(currentName, 1, 0, TVI_ROOT);
else
treeStr[i] = m_tree.InsertItem(currentName, 1, 0, treeStr[currentFat]);
}
MyExpandTree(m_tree.GetRootItem());
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void Cmenu3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void Cmenu3Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP1); //对话框的背景图片
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld = dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR Cmenu3Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void Cmenu3Dlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
void Cmenu3Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
HTREEITEM hselected = m_tree.GetSelectedItem();
int currentTreeID = 0;
int iNodeNum = GetPrivateProfileInt(L"0", L"nodeNum", 255, lpPath);
for (; currentTreeID < iNodeNum; currentTreeID++)
{
if (hselected == treeStr[currentTreeID])
break;
}
TCHAR currentINIHead[255] = { 0 };
TCHAR currentINICmd[255] = { 0 };
TCHAR currentINIPara[255] = { 0 };
TCHAR currentINIDir[255] = { 0 };
wsprintf(currentINIHead, L"%d", currentTreeID);
GetPrivateProfileString(currentINIHead, L"cmd", NULL, currentINICmd, 255, lpPath);
GetPrivateProfileString(currentINIHead, L"para", NULL, currentINIPara, 255, lpPath);
GetPrivateProfileString(currentINIHead, L"dir", NULL, currentINIDir, 255, lpPath);
if (currentINICmd[0] != NULL)
{
ShellExecute(NULL, L"open", currentINICmd, currentINIPara, currentINIDir, SW_SHOWNORMAL);
}
}
void Cmenu3Dlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
OnBnClickedOk();
}
HBRUSH Cmenu3Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (pWnd->GetDlgCtrlID() == IDC_STATICBTN1 ||
pWnd->GetDlgCtrlID() == IDC_STATICBTN2 ||
pWnd->GetDlgCtrlID() == IDC_STATICBTN3)
{
pDC->SetTextColor(RGB(64,148,199));
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
void Cmenu3Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (point.x > m_rectbtn1.left && point.x < m_rectbtn1.right && point.y < m_rectbtn1.bottom && point.y > m_rectbtn1.top)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else if (point.x > m_rectbtn2.left && point.x < m_rectbtn2.right && point.y < m_rectbtn2.bottom && point.y > m_rectbtn2.top)
{
ShellExecute(NULL, L"open", L"..\\DOCS\\HELP.txt", NULL, NULL, SW_SHOWNORMAL);
}
else if (point.x > m_rectbtn3.left && point.x < m_rectbtn3.right && point.y < m_rectbtn3.bottom && point.y > m_rectbtn3.top)
{
ShellExecute(NULL, L"open", L"..\\DOCS\\VERS.bmp", NULL, NULL, SW_SHOWNORMAL);
}
CDialog::OnLButtonUp(nFlags, point);
}
void Cmenu3Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ((point.x > m_rectbtn1.left && point.x < m_rectbtn1.right && point.y < m_rectbtn1.bottom && point.y > m_rectbtn1.top) ||
(point.x > m_rectbtn2.left && point.x < m_rectbtn2.right && point.y < m_rectbtn2.bottom && point.y > m_rectbtn2.top) ||
(point.x > m_rectbtn3.left && point.x < m_rectbtn3.right && point.y < m_rectbtn3.bottom && point.y > m_rectbtn3.top))
{
HCURSOR hCursor;
hCursor = ::LoadCursor ( NULL, IDC_HAND );
if(hCursor == NULL)
hCursor = LoadCursor ( AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_CURSOR1) );
::SetCursor ( hCursor );
Sleep(10);
}
CDialog::OnMouseMove(nFlags, point);
}
TCHAR* AsciiToUnicode(char *str)
{
DWORD dwNum = 0;
dwNum = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
TCHAR* pwHostName = new TCHAR[dwNum];
MultiByteToWideChar(CP_ACP, 0, str, -1, pwHostName, dwNum);
return pwHostName;
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
ShowWindow(SW_NORMAL);
CRect rtDesk;
CRect rtDlg;
::GetWindowRect(::GetDesktopWindow(), &rtDesk);
GetWindowRect(&rtDlg);
int iXpos = rtDesk.Width() / 2 - rtDlg.Width() / 2;
int iYpos = rtDesk.Height() / 2 - rtDlg.Height() / 2;
SetWindowPos(NULL, iXpos, iYpos, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOZORDER);
TCHAR lpPath[255] = { 0 };
wsprintf(lpPath, L"..\\CECD0.20");
char buffer[255] = { 0 };
HANDLE hFile = CreateFile(
lpPath, // 文件名
GENERIC_READ, // 读权限
0, // 不共享
NULL, // 安全属性
OPEN_EXISTING, // 打开已存在的文件
FILE_ATTRIBUTE_NORMAL, // 文件属性
NULL // 模板文件的句柄
);
if (hFile == INVALID_HANDLE_VALUE)
{
//MessageBox(L"Can't read CECD0.20");
//return 1;
}
else
{
// 确定文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
// 分配内存读取文件
DWORD dwRead = 0;
// 读取文件内容
if (ReadFile(hFile, buffer, dwFileSize, &dwRead, NULL))
{
buffer[dwFileSize] = '\0'; // 添加字符串终止符
}
// 关闭文件句柄
CloseHandle(hFile);
}
GetDlgItem(IDC_STATIC1)->SetWindowText(AsciiToUnicode(buffer));
GetDlgItem(IDC_EDIT1)->SetWindowText(
L"Developer\r\n"
L" 351 351Workshop@Bilibili\r\n"
L"Sponsor\r\n"
L" IBM IBM_Official@Bilibili\r\n"
L" Dr.Quest 蓬岸@知乎\r\n"
L"Image Providing\r\n"
L" Alexis lucss21a@Discord\r\n"
L" IBM IBM_Official@Bilibili\r\n"
L" Dr.Quest 蓬岸@知乎\r\n"
L"Artworks\r\n"
L" WinPad とある科学の手机副屏@Bilibili\r\n"
L"Guidance and Testing\r\n"
L" Inter -INTER_INIT-@Bilibili\r\n"
L" GoldApple 不务正业的金苹果@Bilibili\r\n"
L" Zesa Zesa_IO1i0lO@Bilibili\r\n"
L" DZY DZY20070614@Bilibili\r\n");
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

45
WNT/menu3.exe/menu3Dlg.h Normal file
View File

@ -0,0 +1,45 @@
// menu3Dlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
// Cmenu3Dlg 对话框
class Cmenu3Dlg : public CDialog
{
// 构造
public:
Cmenu3Dlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_MENU3_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedOk();
void MyExpandTree(HTREEITEM hTreeItem);
CTreeCtrl m_tree;
afx_msg void OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
CRect m_rectbtn1;
CRect m_rectbtn2;
CRect m_rectbtn3;
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};

BIN
WNT/menu3.exe/res/Thumbs.db Normal file

Binary file not shown.

BIN
WNT/menu3.exe/res/about.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
WNT/menu3.exe/res/flag.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
WNT/menu3.exe/res/hand.cur Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View File

Before

Width:  |  Height:  |  Size: 766 B

After

Width:  |  Height:  |  Size: 766 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,13 @@
//
// menu3.RC2 - Microsoft Visual C++ 不会直接编辑的资源
//
#ifdef APSTUDIO_INVOKED
#error 此文件不能由 Microsoft Visual C++ 编辑
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// 在此处添加手动编辑的资源...
/////////////////////////////////////////////////////////////////////////////

29
WNT/menu3.exe/resource.h Normal file
View File

@ -0,0 +1,29 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by menu3.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_MENU3_DIALOG 102
#define IDR_MAINFRAME 128
#define IDB_BITMAP1 129
#define IDB_BITMAP2 130
#define IDC_CURSOR1 131
#define IDC_TREE1 1000
#define IDC_EDIT1 1005
#define IDC_STATICBTN1 1009
#define IDC_STATICBTN2 1010
#define IDC_STATICBTN3 1011
#define IDC_STATIC1 1012
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 132
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1013
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

7
WNT/menu3.exe/stdafx.cpp Normal file
View File

@ -0,0 +1,7 @@
// stdafx.cpp : 只包括标准包含文件的源文件
// menu3.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息
#include "stdafx.h"

73
WNT/menu3.exe/stdafx.h Normal file
View File

@ -0,0 +1,73 @@
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER // 允许使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINNT // 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINDOWS // 允许使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 将它更改为适合 Windows Me 或更高版本的相应值。
#endif
#ifndef _WIN32_IE // 允许使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600 // 将此值更改为相应的值,以适用于 IE 的其他版本。值。
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

885
WNT/shellmgr.exe/main.cpp Normal file
View File

@ -0,0 +1,885 @@
#include <stdlib.h>
#include <stdio.h>
#include <afxwin.h>
#include <psapi.h>
#include <tlhelp32.h>
#include <conio.h>
#include <vector>
#include <iostream>
#include <io.h>
#include <string>
#pragma comment(lib, "psapi.lib")
using namespace std;
/*
Windows CE Shell Emulator(Simulator) Starter for Windows NT4.0 - Windows 11
Built on Visual Studio 2005
*/
BOOL LoadNTDriver(char* lpszDriverName, char* lpszDriverPath) {
char szDriverImagePath[256];
GetFullPathName(lpszDriverPath, 256, szDriverImagePath, NULL);
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr = NULL;
SC_HANDLE hServiceDDK = NULL;
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL) {
printf("OpenSCManager() Failed %d!\n", GetLastError());
return FALSE;
}
hServiceDDK = CreateService(hServiceMgr, lpszDriverName, lpszDriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szDriverImagePath, NULL, NULL, NULL, NULL, NULL);
if (hServiceDDK == NULL) {
DWORD dwRtn = GetLastError();
if (dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS) {
printf("CreateService() Failed %d!\n", dwRtn);
CloseServiceHandle(hServiceMgr);
return FALSE;
}
hServiceDDK = OpenService(hServiceMgr, lpszDriverName, SERVICE_ALL_ACCESS);
if (hServiceDDK == NULL) {
printf("OpenService() Failed %d!\n", GetLastError());
CloseServiceHandle(hServiceMgr);
return FALSE;
}
}
bRet = StartService(hServiceDDK, NULL, NULL);
if (!bRet) {
DWORD dwRtn = GetLastError();
if (dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING) {
printf("StartService() Failed %d!\n", dwRtn);
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return FALSE;
}
}
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return TRUE;
}
// 卸载驱动程序
BOOL UnloadNTDriver(char* szSvrName) {
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr = NULL;
SC_HANDLE hServiceDDK = NULL;
SERVICE_STATUS SvrSta;
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL) {
printf("OpenSCManager() Failed %d!\n", GetLastError());
return FALSE;
}
hServiceDDK = OpenService(hServiceMgr, szSvrName, SERVICE_ALL_ACCESS);
if (hServiceDDK == NULL) {
printf("OpenService() Failed %d!\n", GetLastError());
CloseServiceHandle(hServiceMgr);
return FALSE;
}
if (!ControlService(hServiceDDK, SERVICE_CONTROL_STOP, &SvrSta)) {
printf("ControlService() Failed %d!\n", GetLastError());
}
if (!DeleteService(hServiceDDK)) {
printf("DeleteService() Failed %d!\n", GetLastError());
}
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return TRUE;
}
BOOL KillNTDriver(char* szSvrName) {
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr = NULL;
SC_HANDLE hServiceDDK = NULL;
SERVICE_STATUS SvrSta;
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL) {
//printf("OpenSCManager() Failed %d!\n", GetLastError());
return FALSE;
}
hServiceDDK = OpenService(hServiceMgr, szSvrName, SERVICE_ALL_ACCESS);
if (hServiceDDK == NULL) {
//printf("OpenService() Failed %d!\n", GetLastError());
CloseServiceHandle(hServiceMgr);
return FALSE;
}
if (!ControlService(hServiceDDK, SERVICE_CONTROL_STOP, &SvrSta)) {
//printf("ControlService() Failed %d!\n", GetLastError());
}
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return TRUE;
}
bool DeleteDirectory(CString DirName)
{
CString PUBPATH;
PUBPATH = DirName;
CFileFind tempFind;
DirName += "\\*.*";
BOOL IsFinded = (BOOL)tempFind.FindFile(DirName);
while (IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if (!tempFind.IsDots())
{
CString strDirName;
strDirName += PUBPATH;
strDirName += "\\";
strDirName += tempFind.GetFileName();
if (tempFind.IsDirectory())
{
DeleteDirectory(strDirName);
}
else
{
SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
DeleteFile(strDirName);
}
}
}
tempFind.Close();
if (!RemoveDirectory(PUBPATH))
{
return false;
}
return true;
}
bool NormalDirectory(CString DirName)
{
CString PUBPATH;
PUBPATH = DirName;
CFileFind tempFind;
DirName += "\\*.*";
BOOL IsFinded = (BOOL)tempFind.FindFile(DirName);
//cout << IsFinded <<endl;
while (IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if (!tempFind.IsDots())
{
CString strDirName;
strDirName += PUBPATH;
strDirName += "\\";
strDirName += tempFind.GetFileName();
if (tempFind.IsDirectory())
{
NormalDirectory(strDirName);
}
else
{
SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
}
}
if (IsFinded == 0)
break;
}
tempFind.Close();
/*if (!NormalDirectory(PUBPATH))
{
return false;
}*/
return true;
}
/*BOOL CopyDir(const char* srcDir, const char* destDir) {
char cmd[255]={0};
sprintf_s(cmd,"xcopy %s %s /E /I >> nul",srcDir,destDir);
system(cmd);
return TRUE;
}*/
bool CopyDirectory(CString srcPath, CString tgrPath)
{
CString PUBPATH;//原始Dir
PUBPATH = srcPath;
srcPath += "\\*.*";
CFileFind tempFind;
BOOL IsFinded = (BOOL)tempFind.FindFile(srcPath);
//printf("Makeing Dir: %s\n", tgrPath);
CreateDirectory(tgrPath, NULL);
while (IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if (!tempFind.IsDots())
{
CString strSrcPath;
strSrcPath += PUBPATH;
strSrcPath += "\\";
strSrcPath += tempFind.GetFileName();
CString strTgrPath;
strTgrPath += tgrPath;
strTgrPath += "\\";
strTgrPath += tempFind.GetFileName();
if (tempFind.IsDirectory())
{
if (!CopyDirectory(strSrcPath, strTgrPath))
return 0;
}
else
{
//SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL);
//printf("%s %s\n", strSrcPath, strTgrPath);
CopyFile(strSrcPath, strTgrPath, FALSE);
SetFileAttributes(strTgrPath, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
}
}
if (IsFinded == 0)
break;
}
tempFind.Close();
return 1;
}
inline char* stristr(char *str1, char *str2)
{
char str1A[255] = { 0 };
char str2A[255] = { 0 };
for (int i = 0; i < strlen(str1); i++)
str1A[i] = tolower(str1[i]);
for (int i = 0; i < strlen(str2); i++)
str2A[i] = tolower(str2[i]);
return strstr(str1A, str2A);
}
int KillProcessByName(char *processName) {
DWORD dwProcessID[0x500] = { 0 }; //开始的预先分配较大的缓冲区用来存放进程ID
DWORD dwNeeded = 0;
BOOL bEnumRes = EnumProcesses(dwProcessID, sizeof(dwProcessID), &dwNeeded);
UINT uCount = dwNeeded / sizeof(DWORD);//获得枚举到进程的数量
for (UINT i = 0; i < uCount; i++)
{
//只对进程进程枚举所以申请QUERY权限具体还得根据应用申请权限
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID[i]);
if (NULL != hProcess)
{
CHAR szProcessName[255] = { 0 };
DWORD dwNameLen = 255;
//int bRet = GetProcessImageFileName(hProcess, szProcessName, dwNameLen);
int bRet = GetModuleFileNameEx(hProcess, NULL, szProcessName, dwNameLen);
if (bRet != 0)
{
if (stristr(szProcessName, processName) != 0)
{
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return true;
}
}
}
}
return false;
}
int findProcessByName(char *processName) {
int flag = 0;
DWORD dwProcessID[0x500] = { 0 }; //开始的预先分配较大的缓冲区用来存放进程ID
DWORD dwNeeded = 0;
BOOL bEnumRes = EnumProcesses(dwProcessID, sizeof(dwProcessID), &dwNeeded);
UINT uCount = dwNeeded / sizeof(DWORD);//获得枚举到进程的数量
for (UINT i = 0; i < uCount; i++)
{
//只对进程进程枚举所以申请QUERY权限具体还得根据应用申请权限
HANDLE hProcess = OpenProcess(/*PROCESS_QUERY_INFORMATION*/PROCESS_ALL_ACCESS, FALSE, dwProcessID[i]);
if (NULL != hProcess)
{
CHAR szProcessName[255] = { 0 };
DWORD dwNameLen = 255;
//int bRet = GetProcessImageFileName(hProcess, szProcessName, dwNameLen);
int bRet = GetModuleFileNameEx(hProcess, NULL, szProcessName, dwNameLen);
if (bRet != 0)
{
if (stristr(szProcessName, processName) != 0)
{
flag++;
}
//printf("ID:%4d\tprocessName(%s)\n", dwProcessID[i], szProcessName);
}
//printf("ID:%4d\tprocessName(%s)\n", dwProcessID[i], szProcessName);
}
}
return flag;
}
/*int delReg(char *path)
{
char fatKey[255] = { 0 };
char subKey2[255] = { 0 };
char subKey[255] = { 0 };
int j = 0;
for (int i = strlen(path) - 1; i >= 0; i--)
{
if (path[i] == '\\')
{
path[i] = '\0';
break;
}
else
{
subKey2[j] = path[i];
j++;
}
}
for (int i = 0; i < strlen(subKey2); i++)
{
j--;
subKey[i] = subKey2[j];
}
j = 0;
for (int i = 0; i < strlen(path); i++)
{
if (path[i] == '\\')
{
i++;
for (int k = i; k < strlen(path); k++)
{
fatKey[j] = path[k];
j++;
}
break;
}
}
printf("fat:%s sub:%s\n", fatKey, subKey);
HKEY hKey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, fatKey, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
{
return 0;
}
if (RegDeleteKey(hKey, subKey) != ERROR_SUCCESS)
{
return 0;
}
return 1;
}*/
DWORD WINAPI dispWind_cantStart(LPVOID lpParam)
{
MessageBox(NULL, "You can't start emulator due to:\r\n - You are running another Shell Emulator.\r\n - Your OS is not the required version for the emulator.", "CE-Collections", MB_OK | MB_ICONHAND);
return 0;
}
DWORD WINAPI dispWind_starting(LPVOID lpParam)
{
while (1)
{
MessageBox(NULL, "Please wait while emulator is starting.", "CE-Collections", MB_OK);
}
return 0;
}
DWORD WINAPI APC10_killApchook(LPVOID lpParam)
{
while (1)
{
Sleep(100);
if (KillNTDriver("apchook"))
{
//printf("Kill apchook SUCCESSFULY!\n");
}
}
return 0;
}
typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
//IsWow64Process is not available on all supported versions of Windows.
//Use GetModuleHandle to get a handle to the DLL that contains the function
//and GetProcAddress to get a pointer to the function if available.
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
{
return TRUE;
}
}
return bIsWow64;
}
void afterworks(char *outDir)
{
printf("\n");
Sleep(300);
if (!KillProcessByName("FILESYS.EXE"))
puts("Warning - Can't stop FILESYS.exe");
Sleep(100);
if (!KillProcessByName("DEVICE.EXE"))
puts("Warning - Can't stop DEVICE.exe");
Sleep(100);
if (!KillProcessByName("AADESK.EXE"))
puts("Warning - Can't stop AADESK.exe");
Sleep(100);
if (!DeleteDirectory(outDir))
puts("Warning - Can't delete CESHLTMP");
Sleep(100);
printf("All TEMP files removed.\n");
exit(0);
return;
}
int IsWindowsVistaOrGreater()
{
SYSTEM_INFO info; //用SYSTEM_INFO结构判断64位AMD处理器
GetSystemInfo(&info); //调用GetSystemInfo函数填充结构
OSVERSIONINFOEX os;
os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
if(GetVersionEx((OSVERSIONINFO *)&os))
{
if (os.dwMajorVersion >= 6)
return 1;
}
return 0;
}
int main(int argc, char **argv)
{
if (argc == 1)
{
puts("Windows CE Shell Emulator Starter for CE-Collections 2.02 - 351Workshop 2025");
puts("Usage: Shellmgr <Start type> <Path to EMUL> <shell32.exe name>");
puts(" <Start type>:");
puts(" 1: Standard 1.x series");
puts(" 2: Standard 2.x series");
puts(" 3: PocketPC 2000");
puts(" 4: Auto PC 1.0");
puts("Sample: Shellmgr 1 .\\10xSTD\\ SHELL32.exe");
puts(" Shellmgr 2 .\\200HPC\\ explorem.exe");
puts("Copyright 351Workshop 2025 - Last built: with CECv202B105");
return 1;
}
else if (argc != 4)
{
puts("Error - Wrong command");
return 1;
}
if (findProcessByName("Shellmgr.exe") > 1)
{
printf("Info - Can't start emulator due to another Emulator is running.Press Backspace to skip.\n");
HANDLE hDispWindCantStart = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
dispWind_cantStart, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
DWORD flag = 0;
while (1)
{
if (_kbhit() && _getche() == '\b')
break;
GetExitCodeThread(hDispWindCantStart, &flag);
if (flag != STILL_ACTIVE)
{
return 1;
}
Sleep(10);
}
TerminateThread(hDispWindCantStart, 0);
}
HANDLE hDispWindStarting = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
dispWind_starting, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
char srcDir[255] = { 0 };
char outDir[255] = { 0 };
char execName[255] = { 0 };
char execPath[255] = { 0 };
strcpy_s(srcDir, argv[2]);
strcpy_s(execName, argv[3]);
if (GetTempPath(255, outDir) == 0)
{
puts("Error - Can't get TEMP path");
return 1;
}
//sprintf_s(outDir, "%sCESHLTMP", outDir);
strcat_s(outDir, "CESHLTMP");
printf("====================Prep TEMP files=====================\n");
printf("srcDir......................:%s\n", srcDir);
printf("outDir......................:%s\n", outDir);
if (!DeleteDirectory(outDir))
puts("Warning - Can't delete CESHLTMP");
Sleep(50);
if (CopyDirectory(srcDir, outDir) == 0)
{
puts("ERROR - Can't copy files into CESHLTMP");
return 1;
}
int emulType = atoi(argv[1]);
if (emulType == 1)
{
char shellEnv[255] = { 0 };
sprintf_s(shellEnv, "PegEmulDir=%s", outDir);
sprintf_s(execPath, "%s\\Bin\\%s", outDir, execName);
printf("==============WCE1.0 Mode - Starting Emul===============\n");
printf("shellEnv....................:%s\n", shellEnv);
printf("outDir......................:%s\n", outDir);
printf("execName....................:%s\n", execName);
printf("execPath....................:%s\n", execPath);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(
NULL, // 不在此指定可执行文件的文件名
execPath, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认线程安全性
FALSE, // 指定当前进程内的句柄不可以被子进程继承
0, // 创建标志
shellEnv, // 使用本进程的环境变量
outDir, // 使用本进程的驱动器和目录
&si, // 指向 STARTUPINFO 结构的指针
&pi // 指向 PROCESS_INFORMATION 结构的指针
))
{
puts("ERROR - Can't start the emulator");
afterworks(outDir);
}
Sleep(1000);
TerminateThread(hDispWindStarting, 0);
WaitForSingleObject(pi.hProcess, INFINITE);
}
else if (emulType == 2)
{
char regPath[255] = { 0 };
char regKeyPath[255] = { 0 };
char regKeyPath64[255] = { 0 };
char regKeyPathE[255] = { 0 };
char regKeyPathE64[255] = { 0 };
char regCmd[255] = { 0 };
sprintf_s(execPath, "%s\\Windows\\%s", outDir, execName);
sprintf_s(regPath, "%s\\cei.reg\0", outDir);
sprintf_s(regCmd, "regedit.exe /s %s\\cei.reg", outDir);
GetPrivateProfileString("shellmgr", "regKeyPath", "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows CE Platform SDK\\Emulation\\CESHLTMP", regKeyPath, 255, regPath);
GetPrivateProfileString("shellmgr", "regKeyPath64", "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows CE Platform SDK\\Emulation\\CESHLTMP", regKeyPath64, 255, regPath);
sprintf_s(regKeyPathE, "%s\\Environment", regKeyPath);
sprintf_s(regKeyPathE64, "%s\\Environment", regKeyPath64);
string outDirReg;
outDirReg += "\"";
outDirReg += outDir;
for (int i = 0; i < outDirReg.size(); i++)
{
if (outDirReg[i] == '\\')
{
outDirReg.replace(i, 1, "\\\\");
i++;
}
}
outDirReg += "\"";
printf("==============WCE2.0 Mode - Starting Emul===============\n");
printf("regPath.....................:%s\n", regPath);
printf("outDir......................:%s\n", outDir);
printf("execName....................:%s\n", execName);
printf("execPath....................:%s\n", execPath);
printf("regKeyPath..................:%s\n", regKeyPath);
printf("regKeyPath64................:%s\n", regKeyPath64);
printf("regKeyPathE.................:%s\n", regKeyPathE);
printf("regKeyPathE64...............:%s\n", regKeyPathE64);
printf("regCmd......................:%s\n", regCmd);
printf("outDirReg...................:%s\n", outDirReg.c_str());
Sleep(50);
WritePrivateProfileString(regKeyPathE, "\"Root Directory\"", outDirReg.c_str(), regPath);
WritePrivateProfileString(regKeyPathE64, "\"Root Directory\"", outDirReg.c_str(), regPath);
system(regCmd);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(
NULL, // 不在此指定可执行文件的文件名
execPath, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认线程安全性
FALSE, // 指定当前进程内的句柄不可以被子进程继承
0, // 创建标志
NULL, // 使用本进程的环境变量
outDir, // 使用本进程的驱动器和目录
&si, // 指向 STARTUPINFO 结构的指针
&pi // 指向 PROCESS_INFORMATION 结构的指针
))
{
puts("ERROR - Can't start the emulator");
afterworks(outDir);
}
Sleep(1000);
TerminateThread(hDispWindStarting, 0);
WaitForSingleObject(pi.hProcess, INFINITE);
/*if (!delReg(regKeyPath))
puts("Warning - Can't remove EMULATION reg key.");
if(!delReg(regKeyPath64))
puts("Warning - Can't remove EMULATION64 reg key.");*/
}
else if (emulType == 3)
{
char regPath[255] = { 0 };
char regKeyPath[255] = { 0 };
char regKeyPath64[255] = { 0 };
char regKeyPathE[255] = { 0 };
char regKeyPathE64[255] = { 0 };
char regCmd[255] = { 0 };
char emulDir[255] = { 0 };
sprintf_s(execPath, "%s\\palm300\\Windows\\%s", outDir, execName);
sprintf_s(regPath, "%s\\cei.reg", outDir);
sprintf_s(regCmd, "%%SystemRoot%%\\regedit.exe /s %s\\cei.reg", outDir);
GetPrivateProfileString("shellmgr", "regKeyPath", NULL, regKeyPath, 255, regPath);
GetPrivateProfileString("shellmgr", "regKeyPath64", NULL, regKeyPath64, 255, regPath);
sprintf_s(regKeyPathE, "%s\\Environment", regKeyPath);
sprintf_s(regKeyPathE64, "%s\\Environment", regKeyPath64);
sprintf_s(emulDir, "%s\\palm300\\", outDir);
string outDirReg;
outDirReg += "\"";
outDirReg += outDir;
outDirReg += "\\palm300\\";
for (int i = 0; i < outDirReg.size(); i++)
{
if (outDirReg[i] == '\\')
{
outDirReg.replace(i, 1, "\\\\");
i++;
}
}
outDirReg += "\"";
if (IsWindowsVistaOrGreater())
{
TerminateThread(hDispWindStarting, 0);
printf("Info - Can't start emulator due to OS version too high.Press Backspace to skip.\n");
HANDLE hDispWindCantStart = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
dispWind_cantStart, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
DWORD flag = 0;
while (1)
{
if (_kbhit() && _getche() == '\b')
break;
GetExitCodeThread(hDispWindCantStart, &flag);
if (flag != STILL_ACTIVE)
{
afterworks(outDir);
}
Sleep(10);
}
TerminateThread(hDispWindCantStart, 0);
}
printf("==============Auto10 Mode - Starting Emul===============\n");
printf("regPath.....................:%s\n", regPath);
printf("outDir......................:%s\n", outDir);
printf("emulDir.....................:%s\n", emulDir);
printf("execName....................:%s\n", execName);
printf("execPath....................:%s\n", execPath);
printf("regKeyPath..................:%s\n", regKeyPath);
printf("regKeyPath64................:%s\n", regKeyPath64);
printf("regKeyPathE.................:%s\n", regKeyPathE);
printf("regKeyPathE64...............:%s\n", regKeyPathE64);
printf("regCmd......................:%s\n", regCmd);
printf("outDirReg...................:%s\n", outDirReg.c_str());
Sleep(50);
WritePrivateProfileString(regKeyPathE, "\"Root Directory\"", outDirReg.c_str(), regPath);
WritePrivateProfileString(regKeyPathE64, "\"Root Directory\"", outDirReg.c_str(), regPath);
system(regCmd);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(
NULL, // 不在此指定可执行文件的文件名
execPath, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认线程安全性
FALSE, // 指定当前进程内的句柄不可以被子进程继承
0, // 创建标志
NULL, // 使用本进程的环境变量
emulDir, // 使用本进程的驱动器和目录
&si, // 指向 STARTUPINFO 结构的指针
&pi // 指向 PROCESS_INFORMATION 结构的指针
))
{
puts("ERROR - Can't start the emulator");
afterworks(outDir);
}
Sleep(1000);
TerminateThread(hDispWindStarting, 0);
WaitForSingleObject(pi.hProcess, INFINITE);
/*if (!delReg(regKeyPath))
puts("Warning - Can't remove EMULATION reg key.");
if(!delReg(regKeyPath64))
puts("Warning - Can't remove EMULATION64 reg key.");*/
}
else if (emulType == 4)
{
char wcefsPath[255] = { 0 };
char regPath[255] = { 0 };
char regKeyPath[255] = { 0 };
char regKeyPathE[255] = { 0 };
char regCmd[255] = { 0 };
sprintf_s(execPath, "%s\\Bin\\%s", outDir, execName);
sprintf_s(regPath, "%s\\cei.reg", outDir);
sprintf_s(regCmd, "regedit.exe /s %s\\cei.reg", outDir);
GetPrivateProfileString("shellmgr", "regKeyPath", NULL, regKeyPath, 255, regPath);
sprintf_s(regKeyPathE, "%s\\Environment", regKeyPath);
sprintf_s(wcefsPath, "%s\\bin\\wcefs.sys", outDir);
string outDirReg;
outDirReg += "\"";
outDirReg += outDir;
for (int i = 0; i < outDirReg.size(); i++)
{
if (outDirReg[i] == '\\')
{
outDirReg.replace(i, 1, "\\\\");
i++;
}
}
outDirReg += "\"";
if (IsWow64())
{
TerminateThread(hDispWindStarting, 0);
printf("Info - Can't start emulator due to the OS isn't I386.Press Backspace to skip.\n");
HANDLE hDispWindCantStart = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
dispWind_cantStart, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
DWORD flag = 0;
while (1)
{
if (_kbhit() && _getche() == '\b')
break;
GetExitCodeThread(hDispWindCantStart, &flag);
if (flag != STILL_ACTIVE)
{
afterworks(outDir);
}
Sleep(10);
}
TerminateThread(hDispWindCantStart, 0);
}
printf("====================Auto PC 1.0 Mode====================\n");
printf("wcefsPath...................:%s\n", wcefsPath);
printf("regPath.....................:%s\n", regPath);
printf("outDir......................:%s\n", outDir);
printf("execName....................:%s\n", execName);
printf("execPath....................:%s\n", execPath);
printf("regKeyPath..................:%s\n", regKeyPath);
printf("regKeyPathE.................:%s\n", regKeyPathE);
printf("regCmd......................:%s\n", regCmd);
printf("outDirReg...................:%s\n", outDirReg.c_str());
Sleep(50);
WritePrivateProfileString(regKeyPathE, "\"Root Directory\"", outDirReg.c_str(), regPath);
system(regCmd);
HANDLE hKillApchook = NULL;
if (IsWindowsVistaOrGreater())
{
hKillApchook = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
APC10_killApchook, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
printf("Info - NT6.x,Started killing APCHOOK driver.\n");
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(
NULL, // 不在此指定可执行文件的文件名
execPath, // 命令行参数
NULL, // 默认进程安全性
NULL, // 默认线程安全性
FALSE, // 指定当前进程内的句柄不可以被子进程继承
0, // 创建标志
NULL, // 使用本进程的环境变量
outDir, // 使用本进程的驱动器和目录
&si, // 指向 STARTUPINFO 结构的指针
&pi // 指向 PROCESS_INFORMATION 结构的指针
))
{
puts("ERROR - Can't start the emulator");
afterworks(outDir);
}
Sleep(200);
if (!LoadNTDriver("wcefs", wcefsPath))
{
printf("ERROR - Can't load WCEFS driver.");
afterworks(outDir);
}
Sleep(1000);
TerminateThread(hDispWindStarting, 0);
WaitForSingleObject(pi.hProcess, INFINITE);
Sleep(100);
if (!UnloadNTDriver("wcefs"))
{
printf("ERROR - Can't unload WCEFS driver.");
afterworks(outDir);
}
if (IsWindowsVistaOrGreater())
TerminateThread(hKillApchook, 0);
}
afterworks(outDir);
return 0;
}

302
WNT/xdemgr.exe/main.cpp Normal file
View File

@ -0,0 +1,302 @@
#include <stdlib.h>
#include <stdio.h>
#include <afxwin.h>
#include <tlhelp32.h>
#include <conio.h>
#include <iostream>
using namespace std;
int fileCopy(char *in, char *out)
{
if (!CopyFile(in, out, FALSE))
return 0;
SetFileAttributes(out, FILE_ATTRIBUTE_NORMAL); //去掉文件属性
return 1;
}
typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
//IsWow64Process is not available on all supported versions of Windows.
//Use GetModuleHandle to get a handle to the DLL that contains the function
//and GetProcAddress to get a pointer to the function if available.
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
if (NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(), &bIsWow64))
{
return TRUE;
}
}
return bIsWow64;
}
BOOL LoadNTDriver(char* lpszDriverName, char* lpszDriverPath) {
char szDriverImagePath[256];
GetFullPathName(lpszDriverPath, 256, szDriverImagePath, NULL);
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr = NULL;
SC_HANDLE hServiceDDK = NULL;
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL) {
printf("OpenSCManager() Failed %d!\n", GetLastError());
return FALSE;
}
hServiceDDK = CreateService(hServiceMgr, lpszDriverName, lpszDriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szDriverImagePath, NULL, NULL, NULL, NULL, NULL);
if (hServiceDDK == NULL) {
DWORD dwRtn = GetLastError();
if (dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS) {
printf("CreateService() Failed %d!\n", dwRtn);
CloseServiceHandle(hServiceMgr);
return FALSE;
}
hServiceDDK = OpenService(hServiceMgr, lpszDriverName, SERVICE_ALL_ACCESS);
if (hServiceDDK == NULL) {
printf("OpenService() Failed %d!\n", GetLastError());
CloseServiceHandle(hServiceMgr);
return FALSE;
}
}
bRet = StartService(hServiceDDK, NULL, NULL);
if (!bRet) {
DWORD dwRtn = GetLastError();
if (dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING) {
printf("StartService() Failed %d!\n", dwRtn);
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return FALSE;
}
}
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return TRUE;
}
// 卸载驱动程序
BOOL UnloadNTDriver(char* szSvrName) {
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr = NULL;
SC_HANDLE hServiceDDK = NULL;
SERVICE_STATUS SvrSta;
hServiceMgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hServiceMgr == NULL) {
printf("OpenSCManager() Failed %d!\n", GetLastError());
return FALSE;
}
hServiceDDK = OpenService(hServiceMgr, szSvrName, SERVICE_ALL_ACCESS);
if (hServiceDDK == NULL) {
printf("OpenService() Failed %d!\n", GetLastError());
CloseServiceHandle(hServiceMgr);
return FALSE;
}
if (!ControlService(hServiceDDK, SERVICE_CONTROL_STOP, &SvrSta)) {
printf("ControlService() Failed %d!\n", GetLastError());
}
if (!DeleteService(hServiceDDK)) {
printf("DeleteService() Failed %d!\n", GetLastError());
}
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
return TRUE;
}
int IsWindows10OrGreater()
{
std::string vname;
typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*);
HINSTANCE hinst = LoadLibrary("ntdll.dll");
DWORD dwMajor, dwMinor, dwBuildNumber;
NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers");
proc(&dwMajor, &dwMinor, &dwBuildNumber);
if (dwMajor >= 10)
return 1;
return 0;
}
int findProcessByName(char *processName) {
// 创建进程快照
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe;
int flag = 0;
if (hSnapShot == INVALID_HANDLE_VALUE) {
return false;
}
pe.dwSize = sizeof(PROCESSENTRY32);
// 遍历进程列表
if (Process32First(hSnapShot, &pe)) {
do {
// 检查进程名称
if (_stricmp(pe.szExeFile, processName) == 0) {
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);
if (hProcess != NULL) {
flag++;
}
}
} while (Process32Next(hSnapShot, &pe));
}
CloseHandle(hSnapShot);
return flag;
}
DWORD WINAPI dispWind_cantStart(LPVOID lpParam)
{
MessageBox(NULL, "You can't start emulator due to:\r\n - You are running another XDE Emulator.\r\n - Your OS is not the required version for the emulator.", "CE-Collections", MB_OK | MB_ICONHAND);
return 0;
}
int main(int argc, char **argv)
{
if (argc == 1)
{
puts("XDE 1.x Emulator Starter for CE-Collections 2.02 - 351Workshop 2025");
puts("Usage: Xdemgr <Emulator version> <Path to NK.bin>");
puts(" <Emulator version>:");
puts(" 0: XDE 1.0");
puts(" 2: XDE \"1.2\"");
puts("Sample: Xdemgr 0 700WP.bin");
puts("Copyright 351Workshop 2025 - Last built: with CECv202B105");
return 1;
}
else if (argc != 3)
{
puts("Error - Wrong command");
return 1;
}
if ((IsWindows10OrGreater() == 1) || (findProcessByName("Xdemgr.exe") > 1))
{
printf("Info - Can't start emulator due to OS version too high OR you are starting more than one emulator at same time.Press Backspace to skip.\n");
HANDLE hDispWindCantStart = CreateThread(
NULL, // 默认安全属性
0, // 默认堆栈大小
dispWind_cantStart, // 线程函数
NULL, // 无参数传递
0, // 立即执行线程
NULL // 不接收线程ID
);
DWORD flag = 0;
while (1)
{
if (_kbhit() && _getche() == '\b')
break;
GetExitCodeThread(hDispWindCantStart, &flag);
if (flag != STILL_ACTIVE)
{
return 1;
}
}
}
int emulVer = atoi(argv[1]);
char imgPath[255] = { 0 };
char emulDir[255] = { 0 };
char emulDirBase[255] = { 0 };
char vmmPath[255] = { 0 };
char vmmOutPath[255] = { 0 };
char cfgPath[255] = { 0 };
char cfgOutPath[255] = { 0 };
char cfgName[255] = { 0 };
char xdePath[255] = { 0 };
char xdeCmd[255] = { 0 };
strcpy_s(imgPath, argv[2]);
GetPrivateProfileString("xdemgr", "emulDirBase", ".\\xde1", emulDirBase, 255, ".\\xdemgr.ini");
sprintf_s(emulDir, "%s%d\\", emulDirBase, emulVer);
GetPrivateProfileString("xdemgr", "cfgName", "config_board0.decfg", cfgName, 255, ".\\xdemgr.ini");
sprintf_s(cfgPath, "%s\\%s", emulDir, cfgName);
if (GetTempPath(255, cfgOutPath) == 0)
{
puts("Error - Can't get TEMP path");
return 1;
}
strcat_s(cfgOutPath, "\\config_board.decfg");
GetCurrentDirectory(255, xdePath);
sprintf_s(xdePath, "%s\\%s\\XDE_.exe", xdePath, emulDir);
if (GetTempPath(255, vmmOutPath) == 0)
{
puts("Error - Can't get TEMP path");
return 1;
}
strcat_s(vmmOutPath, "\\VMM.sys");//sprintf_s(vmmOutPath, "%s\\VMM.sys", vmmOutPath);
sprintf_s(xdeCmd, "/Vmid {5B40E2C9-24EA-447A-9B7D-9B9688325384} /language 1033 /decfg %s %s", cfgOutPath, imgPath);
if (IsWow64())
sprintf_s(vmmPath, "%s\\VMM64.sys", emulDir);
else
sprintf_s(vmmPath, "%s\\VMM.sys", emulDir);
printf("================Starting XDE Emulator===================\n");
printf("emulVer......................:%d\n", emulVer);
printf("imgPath......................:%s\n", imgPath);
printf("emulDir......................:%s\n", emulDir);
printf("emulDirBase..................:%s\n", emulDirBase);
printf("vmmPath......................:%s\n", vmmPath);
printf("vmmOutPath...................:%s\n", vmmOutPath);
printf("cfgName......................:%s\n", cfgName);
printf("cfgPath......................:%s\n", cfgPath);
printf("cfgOutPath...................:%s\n", cfgOutPath);
printf("xdePath......................:%s\n", xdePath);
printf("xdeCmd.......................:%s\n", xdeCmd);
if (!fileCopy(vmmPath, vmmOutPath))
{
puts("ERROR - Can't copy VMM.sys");
return 1;
}
if (!fileCopy(cfgPath, cfgOutPath))
{
puts("Waring - Can't copy %%CFG%%");
}
Sleep(100);
int isLoadedDriver = 1;
if (!LoadNTDriver("VMM", vmmOutPath))
{
puts("Warning - Can't load VMM driver");
isLoadedDriver = 0;
}
SHELLEXECUTEINFO ShExecInfo = { 0 };
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = xdePath;
ShExecInfo.lpParameters = xdeCmd;
ShExecInfo.lpDirectory = emulDir;
ShExecInfo.nShow = SW_SHOWNORMAL;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);
Sleep(100);
printf("\n");
if (isLoadedDriver == 1)
{
if (!UnloadNTDriver("VMM"))
{
puts("ERROR - Can't unload VMM driver");
return 1;
}
}
if (!DeleteFile(vmmOutPath))
printf("Warning - Can't delete VMM.sys\n");
if (!DeleteFile(cfgOutPath))
printf("Warning - Can't delete %%CFG%%\n");
printf("All TEMP removed\n");
return 0;
}

BIN
cetl.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

BIN
menudos.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

BIN
menudos2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
menudos3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
menuwnt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB