⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cesetup.cpp

📁 《Windows CE 权威指南》(作者:(美)CHRIS MUENCH
💻 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 + -