Compare commits
64 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1166c60d51 | ||
|
|
fd0359a37c | ||
|
|
484fc1b738 | ||
|
|
2c7fb2ee94 | ||
|
|
62c66fec6c | ||
|
|
e9baf36447 | ||
|
|
70f2860221 | ||
|
|
7451b9cdb2 | ||
|
|
f6aa765b4d | ||
|
|
47aa52ee2a | ||
|
|
4c73dfbffc | ||
|
|
6393084f54 | ||
|
|
426d4b8e54 | ||
|
|
3c16010d41 | ||
|
|
b50be14f3b | ||
|
|
e7330cd0fe | ||
|
|
8f25400991 | ||
|
|
c8fc4b101c | ||
|
|
002e7b3c5b | ||
|
|
0fe5b9320f | ||
|
|
ee96f06234 | ||
|
|
b9be8f4746 | ||
|
|
afa21246ae | ||
|
|
c952d07516 | ||
|
|
0d833b1313 | ||
|
|
e646930fe4 | ||
|
|
b90ea3d6f8 | ||
|
|
5581c18bd8 | ||
|
|
54ffedacee | ||
|
|
5fe72cef2a | ||
|
|
7f435ff783 | ||
|
|
42c21b6a89 | ||
|
|
5f858be3cf | ||
|
|
3e46772429 | ||
|
|
259f2c563a | ||
|
|
045d733578 | ||
|
|
f44c8768a2 | ||
|
|
81f96c3ddf | ||
|
|
61ae773f22 | ||
|
|
290cb992e4 | ||
|
|
0baca08d13 | ||
|
|
c9817c23e5 | ||
|
|
661025fe1e | ||
|
|
7390ed79d7 | ||
|
|
11a9b235a5 | ||
|
|
78a2ebccf5 | ||
|
|
0258a742ae | ||
|
|
7dfea0158c | ||
|
|
0a6c025148 | ||
|
|
645dc67cac | ||
|
|
f485f1e31d | ||
|
|
00be57c2d3 | ||
|
|
3e3ff63cdc | ||
|
|
bda64c81a8 | ||
|
|
78af0daa47 | ||
|
|
711c11e0e2 | ||
|
|
e09fea8a0b | ||
|
|
66a6df7902 | ||
|
|
a0a71f9d81 | ||
|
|
628838bdf4 | ||
|
|
d0c435e777 | ||
|
|
ed3c72c32b | ||
|
|
7433f0f309 | ||
|
|
61ce5e589f |
@ -1,5 +1,5 @@
|
||||
/*CEVCHECK.EXE for CECollections P2.0 2.01*/
|
||||
/*Copyright 351Workshop 2022-2024*/
|
||||
/*CEVCHECK.EXE for CECollections 2.02*/
|
||||
/*Copyright 351Workshop 2022-2025*/
|
||||
/*Build on Tubro C++*/
|
||||
/*Run on x86 DOS*/
|
||||
|
||||
@ -11,17 +11,17 @@ int main(int argc, char **argv)
|
||||
{
|
||||
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("CEVER sample: 211STD\n\n");
|
||||
|
||||
printf("Return: VESASupport*10+MobileSupport\n\n");
|
||||
printf("Last build:ver.201B101 Copyright 351Workshop 2022-2024\n");
|
||||
printf("Return: NormolCPUSpt*100 + LegacyDisp*10 + InverDisp\n\n");
|
||||
printf("Last build:ver.202B102 Copyright 351Workshop 2022-2025\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(!(argv[1][0] >= '0' && argv[1][0] <= '9'))
|
||||
return 100;
|
||||
return 200;
|
||||
char CEID[10] = {0};
|
||||
strcpy(CEID, argv[1]);
|
||||
|
||||
@ -32,6 +32,7 @@ int main(int argc, char **argv)
|
||||
char CEEdion[10] = { 0 };
|
||||
strncpy(CEEdion, CEID + 3, 3);
|
||||
|
||||
int currentCPUSupport = 1;
|
||||
int currentVESASupport = 1;
|
||||
int currentHalfSupport = 0;
|
||||
|
||||
@ -41,10 +42,16 @@ int main(int argc, char **argv)
|
||||
else
|
||||
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))
|
||||
currentHalfSupport = 1;
|
||||
else
|
||||
currentHalfSupport = 0;
|
||||
|
||||
return currentVESASupport * 10 + currentHalfSupport;
|
||||
printf("%d",currentCPUSupport * 100 + currentVESASupport * 10 + currentHalfSupport);
|
||||
return currentCPUSupport * 100 + currentVESASupport * 10 + currentHalfSupport;
|
||||
}
|
||||
384
README.md
@ -1,74 +1,354 @@
|
||||
<div align="center">
|
||||
|
||||
<img alt="LOGO" src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/WNT/menu2.exe/res/about.bmp" /><br />
|
||||
# CE Collections -2.01-
|
||||
不止一个合集<br /><br />
|
||||
|
||||
English version: https://github.com/WindowsNT351/CE-Collections/blob/main/README_EN.md
|
||||
<img alt="LOGO" src="./WNT/menu3.exe/res/about.bmp" /><br />
|
||||
<h1>CE Collections -2.02-</h1>
|
||||
<p>不止一个合集</p>
|
||||
<p>
|
||||
English version: <a href="./README_EN.md">https://github.com/WindowsNT351/CE-Collections/blob/main/README_EN.md</a><br />
|
||||
</p>
|
||||
</div>
|
||||
|
||||
### ONEW CE Collections
|
||||
## ❓什么是CE Collections<br />
|
||||
CE Collections集合了几乎所有的CE(CE内核基础的官方版本,如Windows Mobile)镜像和模拟器,包括使用Loadcepc引导的x86Bin镜像、使用DeviceEmulator引导的ArmBin镜像和适用于Windows NT的Shell模拟器。<br />
|
||||
---
|
||||
|
||||
## 📥如何使用
|
||||
**本镜像不止能在虚拟机里启动使用CEPCx86镜像,还能在Windows中打开MENU2.EXE,使用其他形式镜像/模拟器,两个平台(直接引导和Windows启动)能启动的Windows CE版本不同!!!!!** <br /><br />
|
||||
将iso载入虚拟光驱或虚拟机里(推荐Windows XP SP3,因为Windows PPC 2000模拟器无法在NT6.x上运行)打开根目录下的WNT\MENU2.exe,选择想要开启的Windows CE版本,单击Run即可打开模拟器<br />
|
||||
在引导早期的CE时,菜单可能会询问是否使用高分辨率模式,这是因为现代虚拟机无法正常模拟当时的显卡,导致早期CE只能用低分辨率模式,如果想使用高分辨率模式,请使用PCEM或者86Box等可以模拟当时的硬件的模拟器,推荐使用PCEM中的S3 ViRGE<br />
|
||||
# ✏️ 什么是 CE Collections
|
||||
CE Collections 集合了几乎所有基于 CE 内核的官方Windows版本(例如 Windows CE Core,Windows Mobile,Windows Phone等)的镜像和模拟器。
|
||||
|
||||
## ❓QA:
|
||||
Q:从光盘引导后,选择Windows CE 2.x到Windows 3.x黑屏 A:分辨率可能选错了,在VMware等虚拟机中,需要使用低分辨率模式,另外,VMware新版本在模拟老系统时非常卡,也有可能导致黑屏。<br />
|
||||
Q:我已经使用了PCem,但是依旧用不了高分辨率 A:在PCem中,需要选择S3 ViRGE显卡搭配性能大于等于486/33的CPU才能使用高分辨率。<br />
|
||||
Q:PCem中,无法引导光盘 A:使用7Zip等压缩软件打开ISO文件,解压[boot]下的img文件,并从软盘引导。<br />
|
||||
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 />
|
||||
Q:Windows Mobile分辨率太抽象了 A:换另一个分辨率选项试试。<br />
|
||||
Q:Shell Emulator无法多个一起启动 A:不要多个Shell Emulator一起启动,若不小心一起启动,请注销或重启,并运行[CDROM]:\WNT\200HPC\ceu.reg。<br />
|
||||
Q:Windows PPC 2000没法在Windows Vista及以上系统工作 A:没办法,Windows API不兼容,所以最好的体验Shell Emulator的系统是Windows XP。<br />
|
||||
Q:为什么整体是英文的? A:英文的镜像比较全,好Build,所以选了英文版镜像,菜单啥的适配镜像就全是英文的了<br />
|
||||
Q:我的Windows CE/Mobile实体机不起动了,你能帮帮我吗 A:6<br />
|
||||
Q:你能把其他Windows集成进来吗? A:看看项目名啊啊啊啊啊<br />
|
||||
镜像包括:
|
||||
- 使用 Loadcepc 引导的 x86Bin 镜像
|
||||
- 使用 DeviceEmulator 引导的 ArmBin 镜像
|
||||
- 使用 XDE Emulator 引导的 ArmBin 镜像
|
||||
|
||||
模拟器包括:
|
||||
- 适用于 Windows 7-11 的 <a href="https://github.com/WindowsNT351/Whitebox">Whitebox</a> 模拟器
|
||||
- 适用于 Windows XP-11 的 Arm DeviceEmulator 模拟器
|
||||
- 适用于 Windows 7 - 8.1 的 XDE Emulator 模拟器
|
||||
- 适用于 Windows NT(4.0-11,部分版本不支持新的Windows版本) 的独立 Shell 模拟器
|
||||
|
||||
# 📥 如何使用
|
||||
## 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 Emulator(x64宿主系统上不能运行Auto PC 1.0)和ARM DeviceEmulator。
|
||||
- Windows 7 - 8.1 可用Shell Emulator(Pocket PC 2000和x64宿主系统上的Auto PC 1.0除外)ARM DeviceEmulator、XDE Emulator和Whitebox Emulator。
|
||||
- Windows 10 - 11 可用Shell Emulator(Pocket 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或Pentium(586)CPU。
|
||||
<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镜像和模拟器
|
||||
绿色:支持 黄色:有资源,可集成,但未集成 浅黄色:有资源,技术不可集成 红色:无资源<br />
|
||||
<img src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/cetl.png"/>
|
||||
# 🔨 本项目集成的 CE 镜像和模拟器
|
||||
|
||||
## ℹ关于
|
||||
本项目由ONEW成员共同开发<br /><br />
|
||||
| | | | CE-Collections Supporting | | |
|
||||
|---------------------------|---------|--------------|-----------------------------------|----------------------|----------------------|
|
||||
| | 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>
|
||||
<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>
|
||||
<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 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>
|
||||
<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>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
# ℹ 关于
|
||||
## 开发团队 / 贡献者
|
||||
<div class="center" >
|
||||
<table>
|
||||
<td>
|
||||
主开发者<br />
|
||||
- <a href="https://www.351workshop.top/">351 - 351Workshop@Bilibili</a><br />
|
||||
赞助<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 />
|
||||
</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 />
|
||||
ONEW Studio QQ交流群:**981893945** 欢迎来玩<br /><br />
|
||||
|
||||
本项目使用了以下项目的代码/资源:<br />
|
||||
CE:<br />
|
||||
大多数镜像为自己用Platform Builder编译的<br />
|
||||
少部分模拟器/镜像为示例镜像版本或是M$的SDK提取<br />
|
||||
x86CEPC Bootloader(LOADCEPC)/工具 为M$官方版6.0修改版<br />
|
||||
### Windows CE 2.x
|
||||
#### Windows CE 2.00
|
||||
Microsoft Windows CE Embedded Toolkit<br />
|
||||
[Microsoft Handheld PC 2.0 Platform SDK](https://archive.org/details/wincesdk)<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 />
|
||||
DOS-LOGO: http://retro.timb.us/Documents/Software/DOS-LOGO.html<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) 提取码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<br />
|
||||
[樱之谷-MC服务器](www.sakuravalley.xyz)<br />
|
||||
👆点击戳一下Axium. 钰<br />
|
||||
|
||||
<br /><br /><br /><br />
|
||||
Copyright 351Workshop 2022-2024
|
||||
Copyright 351Workshop 2022-2025
|
||||
|
||||
|
||||
|
||||
368
README_EN.md
@ -1,65 +1,333 @@
|
||||
<div align="center">
|
||||
|
||||
<img alt="LOGO" src="https://raw.githubusercontent.com/WindowsNT351/CE-Collections-2.0/main/WNT/menu2.exe/res/about.bmp" /><br />
|
||||
# CE Collections -2.01-
|
||||
More than one Collection<br />
|
||||
|
||||
<img alt="LOGO" src="./WNT/menu3.exe/res/about.bmp" /><br />
|
||||
<h1>CE Collections -2.02-</h1>
|
||||
<p>Not just a simple collection.</p>
|
||||
</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
|
||||
**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 />
|
||||
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 />
|
||||
# ✏️ What is CE Collections?
|
||||
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).
|
||||
|
||||
## ❓QA:
|
||||
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 />
|
||||
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 />
|
||||
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 />
|
||||
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 />
|
||||
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 />
|
||||
Q: Windows Mobile resolution is too abstract. A: Try changing to another resolution option<br />
|
||||
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 />
|
||||
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 />
|
||||
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 />
|
||||
The image includes:
|
||||
- x86Bin images booted via Loadcepc.
|
||||
- ArmBin images booted via DeviceEmulator.
|
||||
- ArmBin images booted via XDE Emulator.
|
||||
|
||||
The emulator includes:
|
||||
- <a href="https://github.com/WindowsNT351/Whitebox">Whitebox</a> Emulator compatible with Windows 7 - 11.
|
||||
- Arm DeviceEmulator Emulator compatible with Windows XP - 11.
|
||||
- XDE Emulator Emulator compatible with Windows 7 - 8.1.
|
||||
- Standalone Shell Emulator Emulator compatible with Windows NT(4.0 - 11, some of them don't support newer Windows).
|
||||
|
||||
# 📥 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.0:Replace 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 doesn’t 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
|
||||
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"/>
|
||||
# 🔨 CE Images and Emulators Integrated in this Project
|
||||
|
||||
## ℹAbout
|
||||
This project is developed by ONEW members:<br /><br />
|
||||
| | | | CE-Collections Supporting | | |
|
||||
|---------------------------|---------|--------------|-----------------------------------|----------------------|----------------------|
|
||||
| | 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>
|
||||
<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>
|
||||
<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 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>
|
||||
<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>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
# ℹ About
|
||||
## Develoment Team / Contributor
|
||||
<div class="center" >
|
||||
<table>
|
||||
<td>
|
||||
Developer<br />
|
||||
- <a href="https://www.351workshop.top/">351 - 351Workshop@Bilibili</a><br />
|
||||
Sponsor<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 />
|
||||
</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 />
|
||||
|
||||
This project utilized the code and resources of the following projects:<br />
|
||||
CE:<br />
|
||||
Most images are compiled by myself using Platform Builder.<br />
|
||||
A small number of emulators and images are sample image versions or official SDK extracts.<br />
|
||||
x86CEPC Bootloader(LOADCEPC)/utilities are moded from the code comes from official PB 6.0.<br />
|
||||
### Windows CE 2.x
|
||||
#### Windows CE 2.00
|
||||
Microsoft Windows CE Embedded Toolkit<br />
|
||||
[Microsoft Handheld PC 2.0 Platform SDK](https://archive.org/details/wincesdk)<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 />
|
||||
Copyright 351Workshop 2022-2024
|
||||
Copyright 351Workshop 2022-2025
|
||||
|
||||
|
||||
|
||||
BIN
TimeLine.xlsx
Normal file
21
WNT/hiderun.exe/main.cpp
Normal 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;
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
Build2553 - 5RC2
|
||||
@ -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
|
||||
}
|
||||
@ -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;
|
||||
};
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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\|
|
||||
@ -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
|
||||
}
|
||||
@ -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;
|
||||
};
|
||||
@ -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;
|
||||
}
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
@ -1,5 +0,0 @@
|
||||
[1]
|
||||
fat=0
|
||||
name="CE"
|
||||
cmd="DeviceEmulator.exe"
|
||||
para="..\ARMV4\WM65PPC.bin"
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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>
|
||||
@ -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;
|
||||
}
|
||||
@ -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);
|
||||
};
|
||||
@ -1,5 +0,0 @@
|
||||
// pch.cpp: 与预编译标头对应的源文件
|
||||
|
||||
#include "pch.h"
|
||||
|
||||
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
|
||||
@ -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
|
||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
@ -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
|
||||
@ -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
@ -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.h,menu3Dlg.cpp - 对话框
|
||||
这些文件包含 Cmenu3Dlg 类。该类定义应用程序主对话框的行为。该对话框的模板位于 menu3.rc 中,该文件可以在 Microsoft Visual C++ 中进行编辑。
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
其他功能:
|
||||
|
||||
ActiveX 控件
|
||||
应用程序包括对使用 ActiveX 控件的支持。
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
其他标准文件:
|
||||
|
||||
StdAfx.h,StdAfx.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
@ -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
@ -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
@ -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
78
WNT/menu3.exe/menu3.cpp
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
BIN
WNT/menu3.exe/res/about.bmp
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
WNT/menu3.exe/res/about_202B1.bmp
Normal file
|
After Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 2.3 MiB |
BIN
WNT/menu3.exe/res/flag.bmp
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
WNT/menu3.exe/res/hand.cur
Normal file
|
After Width: | Height: | Size: 326 B |
|
Before Width: | Height: | Size: 766 B After Width: | Height: | Size: 766 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
13
WNT/menu3.exe/res/menu3.rc2
Normal 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
@ -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
@ -0,0 +1,7 @@
|
||||
// stdafx.cpp : 只包括标准包含文件的源文件
|
||||
// menu3.pch 将作为预编译头
|
||||
// stdafx.obj 将包含预编译类型信息
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
||||
73
WNT/menu3.exe/stdafx.h
Normal 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
@ -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
@ -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
menudos.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
menudos2.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
menudos3.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
menuwnt.png
Normal file
|
After Width: | Height: | Size: 70 KiB |