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

📄 cabwoman.c

📁 一个关于windows内置cab文件的源码,能够将cab文件解压缩
💻 C
📖 第 1 页 / 共 4 页
字号:
    BYTE       abCaption1 [MAX_MESSAGE];
    BYTE       abCaption2 [MAX_MESSAGE];
    DWORD      dOffset;

    if ((wParam >> 16) == LBN_SELCHANGE)
        {
        SelectListBoxItem (hWnd,
                           IDL_CABINETS,
                           GetListBoxData (hWnd, IDL_FILES));

        if (GetListBoxText (hWnd,
                            IDL_CABINETS,
                            abCabinet,
                            MAX_PATH)
            &&
            GetListBoxText (hWnd,
                            IDL_FILES,
                            abEntry,
                            MAX_PATH)
            &&
            ((dOffset =
              GetListBoxData (hWnd, IDL_CABINETS)) != MAXDWORD)
            &&
            FindCabinetEntry (abCabinet, abEntry, dOffset, &ce))
            {
            DosDateTimeToFileTime (ce.date, ce.time, &ft);
            FileTimeToSystemTime (&ft, &st);

            printfDlgItem (hWnd,
                           IDT_SIZE,
                           "%lu",
                           ce.cbFile);

            printfDlgItem (hWnd,
                           IDT_DATE,
                           "%02lu-%02lu-%04lu",
                           st.wMonth,
                           st.wDay,
                           st.wYear);

            printfDlgItem (hWnd,
                           IDT_TIME,
                           "%02lu:%02lu:%02lu",
                           st.wHour,
                           st.wMinute,
                           st.wSecond);

            printfDlgItem (hWnd,
                           IDT_ATTRIBUTES,
                           "%c %c %c %c %c %c",
                           (ce.attribs & CAB_ATTRIB_ARCHIVE
                            ? 'a'
                            : '-'),
                           (ce.attribs & CAB_ATTRIB_DIRECTORY
                            ? 'd'
                            : '-'),
                           (ce.attribs & CAB_ATTRIB_VOLUME
                            ? 'v'
                            : '-'),
                           (ce.attribs & CAB_ATTRIB_SYSTEM
                            ? 's'
                            : '-'),
                           (ce.attribs & CAB_ATTRIB_HIDDEN
                            ? 'h'
                            : '-'),
                           (ce.attribs & CAB_ATTRIB_READONLY
                            ? 'r'
                            : '-'));
            }
        else
            {
            ClearDlgItem (hWnd, IDT_SIZE);
            ClearDlgItem (hWnd, IDT_DATE);
            ClearDlgItem (hWnd, IDT_TIME);
            ClearDlgItem (hWnd, IDT_ATTRIBUTES);
            }
        return (LRESULT) TRUE;
        }
    if ((wParam >> 16) == LBN_DBLCLK)
        {
        SelectListBoxItem (hWnd,
                           IDL_CABINETS,
                           GetListBoxData (hWnd, IDL_FILES));

        if (GetListBoxText (hWnd,
                            IDL_CABINETS,
                            abCabinet,
                            MAX_PATH)
            &&
            GetListBoxText (hWnd,
                            IDL_FILES,
                            abEntry,
                            MAX_PATH))
            {
            GetWindowText (hWnd, abCaption1, MAX_MESSAGE);

            wsprintf (abCaption2,
                      "%s  -  %s \"%s\"",
                      abCaption1,
                      abExtracting,
                      abEntry);

            SetWindowText (hWnd, abCaption2);

            ExtractFileFromCabinet (hWnd,
                                    abCabinet,
                                    abEntry,
                                    GetFileName (abIniFile),
                                    abSectionDefaults,
                                    abKeyDestination);

            SetWindowText (hWnd, abCaption1);
            }
        return (LRESULT) TRUE;
        }
    return (LRESULT) FALSE;
    }

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

LRESULT CALLBACK MainCmdExtract (HWND   hWnd,
                                 UINT   uMsg,
                                 WPARAM wParam,
                                 LPARAM lParam)
    {
    DoubleClickListBox (hWnd, IDL_FILES);
    return (LRESULT) TRUE;
    }

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

LRESULT CALLBACK MainCmdAbout (HWND   hWnd,
                               UINT   uMsg,
                               WPARAM wParam,
                               LPARAM lParam)
    {
    DialogBox (hInst, ABOUT_DIALOG, hWnd, AboutDlgProc);
    return (LRESULT) TRUE;
    }

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

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

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

LRESULT CALLBACK MainCmdOk (HWND   hWnd,
                            UINT   uMsg,
                            WPARAM wParam,
                            LPARAM lParam)
    {
    HWND  hFocus;
    DWORD i;
    int   aiDlgItem [] = {IDL_VOLUMES,
                          IDL_DIRECTORIES,
                          IDL_CABINETS,
                          IDL_FILES,
                          0};

    hFocus = GetFocus ();
    if (hFocus != NULL)
        {
        i = 0;
        while (aiDlgItem [i++])
            {
            if (hFocus == GetDlgItem (hWnd, aiDlgItem [i-1]))
                {
                DoubleClickListBox (hWnd, aiDlgItem [i-1]);
                break;
                }
            }
        }
    return (LRESULT) TRUE;
    }

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

LRESULT CALLBACK MainCmdCancel (HWND   hWnd,
                                UINT   uMsg,
                                WPARAM wParam,
                                LPARAM lParam)
    {
    PostMessage (hWnd,
                 WM_NEXTDLGCTL,
                 (WPARAM) TRUE,
                 (LPARAM) FALSE);

    return (LRESULT) TRUE;
    }

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

DISPATCH MainCmd [] = {IDL_VOLUMES,     MainCmdVolumes,
                       IDL_DIRECTORIES, MainCmdDirectories,
                       IDL_CABINETS,    MainCmdCabinets,
                       IDL_FILES,       MainCmdFiles,
                       IDB_EXTRACT,     MainCmdExtract,
                       IDB_ABOUT,       MainCmdAbout,
                       IDB_EXIT,        MainCmdExit,
                       IDOK,            MainCmdOk,
                       IDCANCEL,        MainCmdCancel,
                       DEFAULT_RESULT,  FALSE};

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

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

DISPATCH MainDlg [] = {WM_INITDIALOG,      MainDlgInitDialog,
                       WM_PAINT,           MainDlgPaint,
                       WM_CTLCOLOREDIT,    MainDlgCtlColorEdit,
                       WM_CTLCOLORLISTBOX, MainDlgCtlColorListBox,
                       WM_CLOSE,           MainDlgClose,
                       WM_COMMAND,         MainDlgCommand,
                       DEFAULT_RESULT,     FALSE};

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

// =================================================================
// MAIN WINDOW
// =================================================================

LRESULT CALLBACK MainWndInit (HWND   hWnd,
                              UINT   uMsg,
                              WPARAM wParam,
                              LPARAM lParam)
    {
    DialogBox (hInst, MAIN_DIALOG, hWnd, MainDlgProc);
    PostMessage (hWnd, WM_CLOSE, (WPARAM) NULL, (LPARAM) NULL);
    return (LRESULT) NULL;
    }

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

LRESULT CALLBACK MainWndQueryOpen (HWND   hWnd,
                                   UINT   uMsg,
                                   WPARAM wParam,
                                   LPARAM lParam)
    {
    DialogBox (hInst, ABOUT_DIALOG, hWnd, AboutDlgProc);
    return (LRESULT) FALSE;
    }

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

LRESULT CALLBACK MainWndDestroy (HWND   hWnd,
                                 UINT   uMsg,
                                 WPARAM wParam,
                                 LPARAM lParam)
    {
    WNDCLASS WndClass;

    GetClassInfo (hInst, abMainClass, &WndClass);
    if (WndClass.hbrBackground != NULL)
        {
        DeleteObject (WndClass.hbrBackground);
        }
    PostQuitMessage (0);
    return (LRESULT) NULL;
    }

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

DISPATCH MainWnd [] = {WMU_INIT,        MainWndInit,
                       WM_QUERYOPEN,    MainWndQueryOpen,
                       WM_DESTROY,      MainWndDestroy,
                       DEFAULT_HANDLER, DefWindowProc};

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

// =================================================================
// MAIN PROGRAM
// =================================================================

HWND WINAPI CreateMainWindow (HINSTANCE hInstance,
                              PWNDCLASS pWndClass)
    {
    HWND hWndMain;

    pWndClass->style         = CS_HREDRAW | CS_VREDRAW;
    pWndClass->lpfnWndProc   = MainWndProc;
    pWndClass->cbClsExtra    = 0;
    pWndClass->cbWndExtra    = 0;
    pWndClass->hInstance     = hInstance;
    pWndClass->hIcon         = LoadIcon (hInstance, abMainIcon);
    pWndClass->hCursor       = LoadCursor (NULL, IDC_ARROW);
    pWndClass->lpszMenuName  = NULL;
    pWndClass->lpszClassName = abMainClass;
    pWndClass->hbrBackground = CreateSolidBrush
                                   (GetSysColor (COLOR_WINDOW));

    hWndMain = (RegisterClass (pWndClass)
                ? CreateWindow (abMainClass,
                                abMainCaption,
                                WS_OVERLAPPEDWINDOW,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                CW_USEDEFAULT,
                                NULL,
                                NULL,
                                hInstance,
                                NULL)
                : NULL);

    return hWndMain;
    }

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

BOOL WINAPI Initialize (HINSTANCE hInstance,
                        int       iCmdShow,
                        PWNDCLASS pWndClass)
    {
    OSVERSIONINFO ovi;
    BOOL          fOK = FALSE;

    hInst = hInstance;

    ovi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
    if (GetVersionEx (&ovi) &&
        (ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
        (ovi.dwMajorVersion < 4))
        {
        if (LoadSystemDll (&hCtl3d32, "CTL3D32.dll",
                           3,
                           &Ctl3dRegister,     "Ctl3dRegister",
                           &Ctl3dAutoSubclass, "Ctl3dAutoSubclass",
                           &Ctl3dUnregister,   "Ctl3dUnregister"))
            {
            Ctl3dRegister     (hInstance);
            Ctl3dAutoSubclass (hInstance);
            }
        else
            {
            UnloadSystemDll (&hCtl3d32);
            }
        }
    if (GetModuleFileName (hInstance, abExeFile, MAX_PATH) &&
        GetFile (abExeFile, ".ini", abIniFile, MAX_PATH))
        {
        hWndMain = CreateMainWindow (hInstance, pWndClass);
        if (hWndMain != NULL)
            {
            ShowWindow   (hWndMain, iCmdShow);
            UpdateWindow (hWndMain);
            fOK = TRUE;
            }
        }
    return fOK;
    }

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

BOOL WINAPI CleanUp (HINSTANCE hInstance)
    {
    BOOL fOK = TRUE;

    if (hCtl3d32 != NULL)
        {
        Ctl3dUnregister (hInstance);
        UnloadSystemDll (&hCtl3d32);
        }
    return fOK;
    }

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

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    PSTR      psCmdLine,
                    int       iShowCmd)
    {
    WNDCLASS WndClass;
    MSG      Msg;

    Msg.wParam = 0;

    if ((Initialize (hInstance, SW_SHOWMINIMIZED, &WndClass)) &&
        (PostMessage (hWndMain,
                      WMU_INIT,
                      (WPARAM) GetEnvironmentStrings(),
                      (LPARAM) psCmdLine)))
        {
        while (GetMessage (&Msg, NULL, 0, 0))
            {
            TranslateMessage (&Msg);
            DispatchMessage (&Msg);
            }
        }
    CleanUp (hInstance);
    return Msg.wParam;
    }

// =================================================================
// END OF PROGRAM
// =================================================================

⌨️ 快捷键说明

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