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

📄 cabwoman.c

📁 一个关于windows内置cab文件的源码,能够将cab文件解压缩
💻 C
📖 第 1 页 / 共 4 页
字号:
    return dCount;
    }

// =================================================================
// ABOUT DIALOG
// =================================================================

LRESULT CALLBACK AboutDlgInitDialog (HWND   hWnd,
                                     UINT   uMsg,
                                     WPARAM wParam,
                                     LPARAM lParam)
    {
    CenterWindow (hWnd);
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK AboutDlgCtlColorEdit (HWND   hWnd,
                                       UINT   uMsg,
                                       WPARAM wParam,
                                       LPARAM lParam)
    {
    return (LRESULT) GetStockObject (LTGRAY_BRUSH);
    }

// -----------------------------------------------------------------

LRESULT CALLBACK AboutCmdEndDialog (HWND   hWnd,
                                    UINT   uMsg,
                                    WPARAM wParam,
                                    LPARAM lParam)
    {
    EndDialog (hWnd, (WORD) wParam);
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

DISPATCH AboutCmd [] = {IDOK,           AboutCmdEndDialog,
                        IDCANCEL,       AboutCmdEndDialog,
                        DEFAULT_RESULT, FALSE};

LRESULT CALLBACK AboutDlgCommand (HWND   hWnd,
                                  UINT   uMsg,
                                  WPARAM wParam,
                                  LPARAM lParam)
    {
    return Dispatcher (AboutCmd, (WORD) wParam,
                       hWnd, uMsg, wParam, lParam);
    }

// -----------------------------------------------------------------

DISPATCH AboutDlg [] = {WM_INITDIALOG,   AboutDlgInitDialog,
                        WM_CTLCOLOREDIT, AboutDlgCtlColorEdit,
                        WM_COMMAND,      AboutDlgCommand,
                        DEFAULT_RESULT,  FALSE};

LRESULT CALLBACK AboutDlgProc (HWND   hWnd,
                               UINT   uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
    return Dispatcher (AboutDlg, uMsg,
                       hWnd, uMsg, wParam, lParam);
    }

// =================================================================
// INFO DIALOG
// =================================================================

LRESULT CALLBACK InfoDlgInitDialog (HWND   hWnd,
                                    UINT   uMsg,
                                    WPARAM wParam,
                                    LPARAM lParam)
    {
    BYTE     abCabinet [MAX_PATH];
    HCABINET hc;

    CenterWindow (hWnd);

    if (GetListBoxText ((HWND) lParam,
                        IDL_CABINETS,
                        abCabinet,
                        MAX_PATH))
        {
        printfDlgItem (hWnd, IDT_THIS, "%s", abCabinet);

        if ((hc = OpenCabinet (abCabinet)) != NULL)
            {
            printfDlgItem (hWnd,
                           IDT_PREVIOUS,
                           "%s%s%s%s",
                           hc->pbPrevCab,
                           (hc->pbPrevDisk [0] ? "  [" : abNull),
                           hc->pbPrevDisk,
                           (hc->pbPrevDisk [0] ?   "]" : abNull));

            printfDlgItem (hWnd,
                           IDT_NEXT,
                           "%s%s%s%s",
                           hc->pbNextCab,
                           (hc->pbNextDisk [0] ? "  [" : abNull),
                           hc->pbNextDisk,
                           (hc->pbNextDisk [0] ?   "]" : abNull));

            printfDlgItem (hWnd,
                           IDT_RESERVED,
                           "%lu",
                           hc->dReserve);

            printfDlgItem (hWnd,
                           IDT_SET_ID,
                           "%lu",
                           hc->dSetId);

            printfDlgItem (hWnd,
                           IDT_CAB_NUMBER,
                           "%lu",
                           hc->dCabNumber);

            printfDlgItem (hWnd,
                           IDT_NFOLDERS,
                           "%lu",
                           hc->dFolders);

            printfDlgItem (hWnd,
                           IDT_NFILES,
                           "%lu",
                           hc->dFiles);

            printfDlgItem (hWnd,
                           IDT_EXTRA_DATA,
                           "0x%08X",
                           hc->dExtraData);

            printfDlgItem (hWnd,
                           IDT_CAB_LIST,
                           "0x%08X",
                           hc->dCabList);

            printfDlgItem (hWnd,
                           IDT_FOLDER_LIST,
                           "0x%08X",
                           hc->dFolderList);

            printfDlgItem (hWnd,
                           IDT_FILE_LIST,
                           "0x%08X",
                           hc->dFileList);

            printfDlgItem (hWnd,
                           IDT_FILE_DATA,
                           "0x%08X",
                           hc->dFileData);

            printfDlgItem (hWnd,
                           IDT_CAB_SIZE,
                           "0x%08X",
                           hc->dCabSize);

            CloseCabinet (hc);
            }
        }
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK InfoDlgCtlColorEdit (HWND   hWnd,
                                      UINT   uMsg,
                                      WPARAM wParam,
                                      LPARAM lParam)
    {
    return (LRESULT) GetStockObject (LTGRAY_BRUSH);
    }

// -----------------------------------------------------------------

LRESULT CALLBACK InfoCmdEndDialog (HWND   hWnd,
                                   UINT   uMsg,
                                   WPARAM wParam,
                                   LPARAM lParam)
    {
    EndDialog (hWnd, (WORD) wParam);
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

DISPATCH InfoCmd [] = {IDOK,           InfoCmdEndDialog,
                       IDCANCEL,       InfoCmdEndDialog,
                       DEFAULT_RESULT, FALSE};

LRESULT CALLBACK InfoDlgCommand (HWND   hWnd,
                                 UINT   uMsg,
                                 WPARAM wParam,
                                 LPARAM lParam)
    {
    return Dispatcher (InfoCmd, (WORD) wParam,
                       hWnd, uMsg, wParam, lParam);
    }

// -----------------------------------------------------------------

DISPATCH InfoDlg [] = {WM_INITDIALOG,   InfoDlgInitDialog,
                       WM_CTLCOLOREDIT, InfoDlgCtlColorEdit,
                       WM_COMMAND,      InfoDlgCommand,
                       DEFAULT_RESULT,  FALSE};

LRESULT CALLBACK InfoDlgProc (HWND   hWnd,
                              UINT   uMsg,
                              WPARAM wParam,
                              LPARAM lParam)
    {
    return Dispatcher (InfoDlg, uMsg,
                       hWnd, uMsg, wParam, lParam);
    }

// =================================================================
// MAIN DIALOG
// =================================================================

LRESULT CALLBACK MainDlgInitDialog (HWND   hWnd,
                                    UINT   uMsg,
                                    WPARAM wParam,
                                    LPARAM lParam)
    {
    fMainDlgInit = TRUE;
    CenterWindow (hWnd);
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainDlgPaint (HWND   hWnd,
                               UINT   uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
    LRESULT Result = DefWindowProc (hWnd, uMsg, wParam, lParam);

    if (fMainDlgInit)
        {
        fMainDlgInit = FALSE;
        UpdateWindow (hWnd);
        ListVolumes (hWnd, IDT_VOLUMES, IDL_VOLUMES);
        DoubleClickListBox (hWnd, IDL_VOLUMES);
        }
    return Result;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainDlgCtlColorEdit (HWND   hWnd,
                                      UINT   uMsg,
                                      WPARAM wParam,
                                      LPARAM lParam)
    {
    return (LRESULT) GetStockObject (LTGRAY_BRUSH);
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainDlgCtlColorListBox (HWND   hWnd,
                                         UINT   uMsg,
                                         WPARAM wParam,
                                         LPARAM lParam)
    {
    return (LRESULT) GetStockObject (WHITE_BRUSH);
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainDlgClose (HWND   hWnd,
                               UINT   uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
    HWND hButton = GetDlgItem (hWnd, IDB_EXIT);

    if (hButton != NULL)
        {
        PostMessage (hWnd,
                     WM_COMMAND,
                     (WPARAM) MAKELONG (IDB_EXIT, BN_CLICKED),
                     (LPARAM) hButton);
        }
    return (LRESULT) TRUE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainCmdVolumes (HWND   hWnd,
                                 UINT   uMsg,
                                 WPARAM wParam,
                                 LPARAM lParam)
    {
    DWORD dVolType;
    PBYTE pbVolType;
    BYTE  abVolume [] = "?:";

    if ((wParam >> 16) == LBN_SELCHANGE)
        {
        dVolType = GetListBoxData (hWnd, IDL_VOLUMES);
        switch (dVolType)
            {
            case DRIVE_REMOVABLE: pbVolType = "Removable"; break;
            case DRIVE_FIXED:     pbVolType = "Fixed";     break;
            case DRIVE_REMOTE:    pbVolType = "Remote";    break;
            case DRIVE_CDROM:     pbVolType = "CD-ROM";    break;
            case DRIVE_RAMDISK:   pbVolType = "RAM Disk";  break;
            default:              pbVolType = "Unknown";   break;
            }
        SetDlgItemText (hWnd, IDT_VOLTYPE, pbVolType);
        return (LRESULT) TRUE;
        }
    if ((wParam >> 16) == LBN_DBLCLK)
        {
        if (GetListBoxText (hWnd,
                            IDL_VOLUMES,
                            abVolume,
                            sizeof (abVolume)))
            {
            SetDefaultDirectory (abVolume);

            ListDirectories (hWnd,
                             IDT_DIRECTORIES,
                             IDL_DIRECTORIES);

            ListCabinets (hWnd,
                          IDT_CABINETS,
                          IDL_CABINETS);

            ListFiles (hWnd,
                       IDT_FILES,
                       IDL_FILES);
            }
        return (LRESULT) TRUE;
        }
    return (LRESULT) FALSE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainCmdDirectories (HWND   hWnd,
                                     UINT   uMsg,
                                     WPARAM wParam,
                                     LPARAM lParam)
    {
    BYTE abVolume [] = "?:";
    BYTE abDirectory [MAX_PATH];

    if ((wParam >> 16) == LBN_SELCHANGE)
        {
        return (LRESULT) TRUE;
        }
    if ((wParam >> 16) == LBN_DBLCLK)
        {
        if (GetListBoxText (hWnd,
                            IDL_VOLUMES,
                            abVolume,
                            sizeof (abVolume))
            &&
            GetListBoxText (hWnd,
                            IDL_DIRECTORIES,
                            abDirectory,
                            MAX_PATH))
            {
            SetDirectory (abVolume, abDirectory);

            ListDirectories (hWnd,
                             IDT_DIRECTORIES,
                             IDL_DIRECTORIES);

            ListCabinets (hWnd,
                          IDT_CABINETS,
                          IDL_CABINETS);

            ListFiles (hWnd,
                       IDT_FILES,
                       IDL_FILES);
            }
        return (LRESULT) TRUE;
        }
    return (LRESULT) FALSE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainCmdCabinets (HWND   hWnd,
                                  UINT   uMsg,
                                  WPARAM wParam,
                                  LPARAM lParam)
    {
    if ((wParam >> 16) == LBN_SELCHANGE)
        {
        return (LRESULT) TRUE;
        }
    if ((wParam >> 16) == LBN_DBLCLK)
        {
        DialogBoxParam (hInst,
                        INFO_DIALOG,
                        hWnd,
                        InfoDlgProc,
                        (LPARAM) hWnd);

        return (LRESULT) TRUE;
        }
    return (LRESULT) FALSE;
    }

// -----------------------------------------------------------------

LRESULT CALLBACK MainCmdFiles (HWND   hWnd,
                               UINT   uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
    CAB_ENTRY  ce;
    FILETIME   ft;
    SYSTEMTIME st;
    BYTE       abCabinet  [MAX_PATH];
    BYTE       abEntry    [MAX_PATH];

⌨️ 快捷键说明

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