📄 cesetup.cpp
字号:
// <BOOK_ADDON CHapter 11.5.5> **********************************
#include <windows.h>
#include <tchar.h>
#include <ce_setup.h> // in the SDK dir
const TCHAR c_szFILE_APP[] = _T("PCDM.exe");
const TCHAR c_szWNDCLASS_APP[] = _T("PCDM");
BOOL WINAPI DllMain(HANDLE hMod, DWORD dwReason, LPVOID lpvReserved)
{
return TRUE;
}
// <BOOK_ADDON Chapter 11.5.6.2> **********************************
const WCHAR tstrROOT[] = L"\\*";
const DWORD dwATTRIB_CF = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_TEMPORARY;
typedef struct _STORAGE_IDENTIFICATION {
DWORD dwSize;
DWORD dwFlags;
DWORD dwManufactureIDOffset;
DWORD dwSerialNumOffset;
} STORAGE_IDENTIFICATION, *PSTORAGE_IDENTIFICATION;
// From DISKIO.H of the Windows CE 3.0 Platform Builder *************
#define FILE_DEVICE_DISK 0x00000007
#define IOCTL_DISK_BASE FILE_DEVICE_DISK
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
#define METHOD_BUFFERED 0
#define FILE_ANY_ACCESS 0
#define IOCTL_DISK_GET_STORAGEID \
CTL_CODE(IOCTL_DISK_BASE, 0x709, METHOD_BUFFERED, FILE_ANY_ACCESS)
// From DISKIO.H of the Windows CE 3.0 Platform Builder *************
codeINSTALL_INIT Install_Init(
HWND hwndParent,
BOOL fFirstCall, // is this the first time this function is being called?
BOOL fPreviouslyInstalled,
LPCTSTR pszInstallDir
)
{
HANDLE hFind = NULL;
BOOL fLoop = FALSE;
WCHAR szwFile[MAX_PATH];
PSTORAGE_IDENTIFICATION pStoreInfo;
HANDLE hVolume;
DWORD BytesRet;
codeINSTALL_INIT ret;
BYTE *SerialNo;
WIN32_FIND_DATA fd;
TCHAR tStr[200];
// search all top-level dirs
memset(&fd, 0,sizeof(fd));
hFind = FindFirstFile(tstrROOT, &fd);
if (INVALID_HANDLE_VALUE == hFind)
return codeINSTALL_INIT_CONTINUE; // Root is corrupt
szwFile[0] = 0;
do
{
// check the dir attributes
if (dwATTRIB_CF == (dwATTRIB_CF & fd.dwFileAttributes))
{
// we have found the first CF Card
lstrcpy(szwFile, fd.cFileName);
break;
}
fLoop = FindNextFile(hFind, &fd);
} while (fLoop);
FindClose(hFind);
// exit if we did not find a CF Card: No CF Install!
// to enforce a CF-CARD inside, return codeINSTALL_INIT_CANCEL
if (!szwFile[0]) return codeINSTALL_INIT_CONTINUE;
wsprintf(tStr,L"\\%s\\Vol:",szwFile);
ret=codeINSTALL_INIT_CONTINUE;
hVolume=CreateFile(tStr,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
if (hVolume)
{
pStoreInfo=(STORAGE_IDENTIFICATION *)GlobalAlloc(GMEM_ZEROINIT,3000);
if (DeviceIoControl(hVolume,IOCTL_DISK_GET_STORAGEID,
NULL,0,(LPVOID)pStoreInfo,3000,&BytesRet,NULL)!=FALSE)
{
SerialNo=(((BYTE *)pStoreInfo)+pStoreInfo->dwSerialNumOffset);
int i=0;
while (SerialNo[i]!=0 && i<(int)(BytesRet-pStoreInfo->dwSerialNumOffset) && i<200)
{
tStr[i]=(TCHAR)SerialNo[i];
i++;
}
tStr[i]=0;
wsprintf(szwFile,TEXT("Serial =<%s>"),tStr);
MessageBox(NULL,szwFile,TEXT("PCDM Install"),MB_OK);
if (!CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,tStr,-1,TEXT("<SERIAL HERE>"), -1)-2)
{
ret=codeINSTALL_INIT_CONTINUE;
}
else
{
MessageBox(NULL,TEXT("Sorry, but this Installation does not match your CF-Card. Installation will be canceled"),TEXT("PCDM Install"),MB_OK);
ret=codeINSTALL_INIT_CANCEL;
}
}
else
{
wsprintf(tStr,TEXT("Error %d"),GetLastError());
MessageBox(NULL,tStr,tStr,MB_OK);
}
GlobalFree(pStoreInfo);
CloseHandle(hVolume);
}
// To enforce a CF-CARD inside, return codeINSTALL_INIT_CANCEL
return ret;
}
// <BOOK_ADDON Chapter 11.5.6.2> **********************************
codeINSTALL_EXIT Install_Exit(
HWND hwndParent,
LPCTSTR pszInstallDir,
WORD cFailedDirs,
WORD cFailedFiles,
WORD cFailedRegKeys,
WORD cFailedRegVals,
WORD cFailedShortcuts
)
{
WORD cFailed = cFailedDirs + cFailedFiles;
TCHAR szFile[MAX_PATH];
SHELLEXECUTEINFO si;
if (!cFailed)
{
wsprintf(szFile, _T("%s\\%s"), pszInstallDir, c_szFILE_APP);
ZeroMemory(&si, sizeof(si));
si.cbSize = sizeof(si);
si.lpFile = szFile;
ShellExecuteEx(&si);
}
return codeINSTALL_EXIT_DONE;
}
codeUNINSTALL_INIT Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)
{
HWND hwnd = NULL;
USHORT ix;
// close app if it is running
hwnd = FindWindow(c_szWNDCLASS_APP, NULL);
if (hwnd)
{
SendMessage(hwnd, WM_CLOSE, 0, 0L);
// wait a bit for the app to close
for (ix = 0; ix < 10; ix++)
{
hwnd = FindWindow(c_szWNDCLASS_APP, NULL);
if (hwnd)
Sleep(1000); // wait one second
else
break;
}
}
if (hwnd)
return codeUNINSTALL_INIT_CANCEL;
else
return codeUNINSTALL_INIT_CONTINUE;
}
// </BOOK_ADDON CHapter 11.5.5> **********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -