mirror of
https://github.com/WindowsNT351/CE-Collections.git
synced 2025-12-27 01:20:25 +08:00
202B105
This commit is contained in:
parent
5581c18bd8
commit
b90ea3d6f8
@ -5,7 +5,7 @@
|
|||||||
#include <tlhelp32.h>
|
#include <tlhelp32.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <VersionHelpers.h>
|
//#include <VersionHelpers.h>
|
||||||
//#pragma comment(lib, "psapi.lib")
|
//#pragma comment(lib, "psapi.lib")
|
||||||
using namespace std;
|
using namespace std;
|
||||||
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
|
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
|
||||||
@ -210,6 +210,36 @@ bool KillProcessByName(char *processName) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/*int delReg(char *path)
|
/*int delReg(char *path)
|
||||||
{
|
{
|
||||||
char fatKey[255] = { 0 };
|
char fatKey[255] = { 0 };
|
||||||
@ -263,7 +293,7 @@ bool KillProcessByName(char *processName) {
|
|||||||
|
|
||||||
DWORD WINAPI dispWind_cantStart(LPVOID lpParam)
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,6 +346,9 @@ void afterworks(char *outDir)
|
|||||||
if (!KillProcessByName("FILESYS.EXE"))
|
if (!KillProcessByName("FILESYS.EXE"))
|
||||||
puts("Warning - Can't stop FILESYS.exe");
|
puts("Warning - Can't stop FILESYS.exe");
|
||||||
Sleep(100);
|
Sleep(100);
|
||||||
|
if (!KillProcessByName("DEVICE.EXE"))
|
||||||
|
puts("Warning - Can't stop DEVICE.exe");
|
||||||
|
Sleep(100);
|
||||||
if (!DeleteDirectory(outDir))
|
if (!DeleteDirectory(outDir))
|
||||||
puts("Warning - Can't delete CESHLTMP");
|
puts("Warning - Can't delete CESHLTMP");
|
||||||
Sleep(100);
|
Sleep(100);
|
||||||
@ -324,19 +357,32 @@ void afterworks(char *outDir)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int IsWindowsVistaOrGreater()
|
||||||
|
{
|
||||||
|
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 >= 6)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
{
|
{
|
||||||
puts("Windows CE Shell Emulator Starter for CE-Collections 2.02 - 351Workshop 2025");
|
puts("Windows CE Shell Emulator Starter for CE-Collections 2.02 - 351Workshop 2025");
|
||||||
puts("Usage: Emustarter <Start type> <Path to EMUL> <shell32.exe name>");
|
puts("Usage: Shellmgr <Start type> <Path to EMUL> <shell32.exe name>");
|
||||||
puts(" <Start type>:");
|
puts(" <Start type>:");
|
||||||
puts(" 1: Standard 1.x series");
|
puts(" 1: Standard 1.x series");
|
||||||
puts(" 2: Standard 2.x series");
|
puts(" 2: Standard 2.x series");
|
||||||
puts(" 3: PocketPC 2000");
|
puts(" 3: PocketPC 2000");
|
||||||
puts(" 4: Auto PC 1.0");
|
puts(" 4: Auto PC 1.0");
|
||||||
puts("Sample: Emustarter 1 .\\10xHPC\\ SHELL32.exe");
|
puts("Sample: Shellmgr 1 .\\10xSTD\\ SHELL32.exe");
|
||||||
puts(" Emustarter 2 .\\200HPC\\ explorem.exe");
|
puts(" Shellmgr 2 .\\200HPC\\ explorem.exe");
|
||||||
puts("Copyright 351Workshop 2025 - Last built: with CECv202B105");
|
puts("Copyright 351Workshop 2025 - Last built: with CECv202B105");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -346,6 +392,31 @@ int main(int argc, char **argv)
|
|||||||
return 1;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TerminateThread(hDispWindCantStart, 0);
|
||||||
|
}
|
||||||
|
|
||||||
HANDLE hDispWindStarting = CreateThread(
|
HANDLE hDispWindStarting = CreateThread(
|
||||||
NULL, // 默认安全属性
|
NULL, // 默认安全属性
|
||||||
0, // 默认堆栈大小
|
0, // 默认堆栈大小
|
||||||
@ -367,7 +438,7 @@ int main(int argc, char **argv)
|
|||||||
puts("Error - Can't get TEMP path");
|
puts("Error - Can't get TEMP path");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
sprintf_s(outDir, "%s\\CESHLTMP\\", outDir);
|
sprintf_s(outDir, "%sCESHLTMP", outDir);
|
||||||
|
|
||||||
printf("====================Prep TEMP files=====================\n");
|
printf("====================Prep TEMP files=====================\n");
|
||||||
printf("srcDir......................:%s\n", srcDir);
|
printf("srcDir......................:%s\n", srcDir);
|
||||||
@ -527,6 +598,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (IsWindowsVistaOrGreater())
|
if (IsWindowsVistaOrGreater())
|
||||||
{
|
{
|
||||||
|
TerminateThread(hDispWindStarting, 0);
|
||||||
printf("Info - Can't start emulator due to OS version too high.Press Backspace to skip.\n");
|
printf("Info - Can't start emulator due to OS version too high.Press Backspace to skip.\n");
|
||||||
HANDLE hDispWindCantStart = CreateThread(
|
HANDLE hDispWindCantStart = CreateThread(
|
||||||
NULL, // 默认安全属性
|
NULL, // 默认安全属性
|
||||||
@ -626,6 +698,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (IsWow64())
|
if (IsWow64())
|
||||||
{
|
{
|
||||||
|
TerminateThread(hDispWindStarting, 0);
|
||||||
printf("Info - Can't start emulator due to the OS isn't I386.Press Backspace to skip.\n");
|
printf("Info - Can't start emulator due to the OS isn't I386.Press Backspace to skip.\n");
|
||||||
HANDLE hDispWindCantStart = CreateThread(
|
HANDLE hDispWindCantStart = CreateThread(
|
||||||
NULL, // 默认安全属性
|
NULL, // 默认安全属性
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user