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

📄 dlgoption.cpp

📁 WDM驱动开发的辅助工具 非常好用 欢迎大家下载
💻 CPP
字号:
#include <windows.h>
#include <TCHAR.H>
#include "resource.h"
#include "Define.h"
#include "Common.h"
#include "DlgOption.h"

extern SYSTEM g_Sys;

BOOL CALLBACK   DlgOption(HWND hDlg, UINT uMsg,WPARAM wParam, LPARAM)
{   static  DLGOPTION Dlg                  = {0};
            TCHAR     caBuffer[MAX_STRING] = {0};
            HWND      hCtrl                = NULL;
            INT       iID                  = 0;

    switch ( uMsg ){
        case WM_INITDIALOG: return InitDlgOption(hDlg, &Dlg);
        case WM_COMMAND:
            switch ( LOWORD(wParam) ){
                case IDOK:     return DlgOptionOnOk    (hDlg, &Dlg);
                case IDCANCEL: return DlgOptionOnCancel(hDlg, &Dlg);
                default: break;
            }
            break;
        case WM_CLOSE: return EndDialog(hDlg, wParam);
        default: break;
    }
    return FALSE;
}

BOOL    InitDlgOption(HWND hDlg, PDLGOPTION pDlg)
{
    pDlg->hDlg          = hDlg;
    pDlg->hEbDriverName = GetDlgItem(hDlg, IDEB_DRIVERNAME);
    pDlg->hEbDDKPath    = GetDlgItem(hDlg, IDEB_DDKPATH);
    pDlg->hEbSourcePath = GetDlgItem(hDlg, IDEB_SOURCEPATH);
    pDlg->hEbCopyToPath = GetDlgItem(hDlg, IDEB_COPYTOPATH);
    EbCtrl_LimitText(pDlg->hEbDriverName, _MAX_PATH);
    EbCtrl_LimitText(pDlg->hEbDDKPath   , _MAX_PATH);
    EbCtrl_LimitText(pDlg->hEbSourcePath, _MAX_PATH);
    EbCtrl_LimitText(pDlg->hEbCopyToPath, _MAX_PATH);
    SetWindowText(pDlg->hEbDriverName, g_Sys.Option.caDriverName);
    SetWindowText(pDlg->hEbDDKPath   , g_Sys.Option.caDDKPath);
    SetWindowText(pDlg->hEbSourcePath, g_Sys.Option.caSourcePath);
    SetWindowText(pDlg->hEbCopyToPath, g_Sys.Option.caCopyToPath);
    SetFocus(pDlg->hEbDriverName);
    return TRUE;
}

BOOL    DlgOptionOnOk(HWND hDlg, PDLGOPTION pDlg)
{   TCHAR caBuffer[MAX_STRING];
    HWND  hCtrl;
    INT   iID;

    GetWindowText(pDlg->hEbDriverName, pDlg->Option.caDriverName, _MAX_PATH+1);
    GetWindowText(pDlg->hEbDDKPath,    pDlg->Option.caDDKPath,    _MAX_PATH+1);
    GetWindowText(pDlg->hEbSourcePath, pDlg->Option.caSourcePath, _MAX_PATH+1);
    GetWindowText(pDlg->hEbCopyToPath, pDlg->Option.caCopyToPath, _MAX_PATH+1);
    LTrimStr(RTrimStr(pDlg->Option.caDriverName));
    LTrimStr(RTrimStr(pDlg->Option.caDDKPath));
    LTrimStr(RTrimStr(pDlg->Option.caSourcePath));
    LTrimStr(RTrimStr(pDlg->Option.caCopyToPath));
    if ( IsOptionError(caBuffer, &iID, &(pDlg->Option)) ){
        MessageBox(hDlg, caBuffer, _T("Option"), MB_ICONERROR);
        switch ( iID ){
            case  0: hCtrl = pDlg->hEbDriverName; break;
            case  1: hCtrl = pDlg->hEbDDKPath;    break;
            case  2: hCtrl = pDlg->hEbSourcePath; break;
            case  3: hCtrl = pDlg->hEbCopyToPath; break;
            default: hCtrl = pDlg->hEbDriverName; break;
        }
        SetFocus(hCtrl);
        EbCtrl_SetSel(hCtrl, 0, -1);
        return TRUE;
    }
    CopyMemory(&(g_Sys.Option), &(pDlg->Option), sizeof(OPTION));
    if ( !SaveOption(&(g_Sys.Option)) ){
        GetErrorMessage(caBuffer, MAX_STRING, GetLastError());
        FMessageBox(hDlg, MB_ICONERROR, _T("Option"),
            _T("保存 %s\\%s 文件失败:%s"),
            g_Sys.caPath, OPTION_FNAME, caBuffer);
        return TRUE;
    }
    PostMessage(hDlg, WM_CLOSE, 0, 0);
    return TRUE;
}

BOOL    DlgOptionOnCancel(HWND hDlg, PDLGOPTION pDlg)
{
    PostMessage(hDlg, WM_CLOSE, 0, 0);
    return TRUE;
}

BOOL    IsOptionError(LPTSTR lpMsg, PINT pID, POPTION pOption)
{   LPCTSTR lpItem[][2] = {{_T("Driver Name:")    , pOption->caDriverName},
                           {_T("DDK Path:")       , pOption->caDDKPath   },
                           {_T("SourceFile Path:"), pOption->caSourcePath},
                           {_T("CopyTo Path:")    , pOption->caCopyToPath},
                           {NULL, NULL}
                          };
    LPCTSTR lpErrChar  = NULL;
    INT     iID        = 0;
    
    for (iID = 0; NULL != lpItem[iID][0]; iID ++){
        if ( lstrlen(lpItem[iID][1]) == 0 ) goto Err_NULL;
    }
    lpErrChar = CheckFileName(lpItem[0][1]);
    if ( NULL != lpErrChar ){
        iID = 0;
        goto Err_Char;
    }
    lpErrChar = CheckPathName(lpItem[1][1]);
    if ( NULL != lpErrChar ){
        iID = 1;
        goto Err_Char;
    }
    lpErrChar = CheckPathName(lpItem[2][1]);
    if ( NULL != lpErrChar ){
        iID = 2;
        goto Err_Char;
    }
    lpErrChar = CheckPathName(lpItem[3][1]);
    if ( NULL != lpErrChar ){
        iID = 3;
        goto Err_Char;
    }
    if ( !DirectoryExist(lpItem[1][1]) ){
        iID = 1;
        goto Err_Exist;
    }
    if ( !DirectoryExist(lpItem[2][1]) ){
        iID = 2;
        goto Err_Exist;
    }
    if ( !DirectoryExist(lpItem[3][1]) ){
        iID = 3;
        goto Err_Exist;
    }
    return FALSE;
Err_NULL:
    if ( NULL != lpMsg ){
        wsprintf(lpMsg, _T("未指定 [%s] !"), lpItem[iID][0]);
    }
    goto Err;
Err_Char:
    if ( NULL != lpMsg ){
        wsprintf(lpMsg, _T("[%s] - \"%s\" 内含有非法字符:%c "),
            lpItem[iID][0], lpItem[iID][1], *lpErrChar);
    }
    goto Err;
Err_Exist:
    if ( NULL != lpMsg ){
        wsprintf(lpMsg, _T("指定的目录不存在:%s "), lpItem[iID][1]);
    }
    goto Err;
Err:
    if (NULL != pID) *pID = iID;
    return TRUE;
}

BOOL    LoadOption(POPTION pOption)
{   TCHAR  caFileName[_MAX_PATH];
    HANDLE hFile    = NULL;
    DWORD  dwReaded = 0L;
    DWORD  dwSize   = 0L;

    MakeFileName(caFileName, g_Sys.caPath, OPTION_FNAME, NULL);
    hFile = CreateFile(caFileName,
                GENERIC_READ,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                NULL,
                OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,
                NULL);
    if ( INVALID_HANDLE_VALUE == hFile ){
        return FALSE;
    }
    dwSize = sizeof(OPTION);
    if ( (!ReadFile(hFile, pOption, dwSize, &dwReaded, NULL)) ||
         (dwReaded != dwSize                                ) ){
        CloseHandle(hFile);
        return FALSE;
    }
    CloseHandle(hFile);
    return TRUE;
}

BOOL    SaveOption(POPTION pOption)
{   TCHAR  caFileName[_MAX_PATH] = {0};
    HANDLE  hFile                = NULL;
    DWORD  dwSize                = 0L;
    DWORD  dwWritten             = 0L;

    dwSize = sizeof(OPTION);
    MakeFileName(caFileName, g_Sys.caPath, OPTION_FNAME, NULL);
    hFile = CreateFile(caFileName, 
                GENERIC_WRITE,
                FILE_SHARE_READ | FILE_SHARE_WRITE,
                NULL,
                CREATE_ALWAYS,
                FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH,
                NULL);
    if ( INVALID_HANDLE_VALUE == hFile ){
        return FALSE;
    }
    if ( (!WriteFile(hFile, pOption, dwSize, &dwWritten, NULL)) ||
         (dwWritten != dwSize                                 ) ||
         (!FlushFileBuffers(hFile)                            ) ){
        CloseHandle(hFile);
        return FALSE;
    }
    CloseHandle(hFile);
    return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -