wndmain.c

来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 1,763 行 · 第 1/4 页

C
1,763
字号
        }
    else
        {
        MsgInfo(hWnd, TEXT("One or more of volumes could not be dismounted."));
        }

}


// =========================================================================
void _wndMain_DismountSelected(HWND hWnd)
{
    UINT itemCount;
    UINT i;
    WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];
    BOOL allOK;
    HCURSOR csrHourglass;
    HCURSOR csrPrevious;

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_DismountSelected\n")));

    itemCount = ListView_GetItemCount(G_hWndListView);

    for (i = 0; i < itemCount; i++)
	    {
	    if (ListView_GetItemState(
                                  G_hWndListView, 
                                  i,
                                  LVIS_SELECTED
                                 ) == LVIS_SELECTED)
		    {
            ListView_GetItemText( 
                                 G_hWndListView,
                                 i,
                                 COL_IDX_MOUNTPOINT,
                                 mountpoint, 
                                 sizeof(mountpoint)
                                );

            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Dismount mountpoint: %ls\n"), mountpoint));

            csrHourglass = LoadCursor(NULL, IDC_WAIT);
            csrPrevious = SetCursor(csrHourglass);
            allOK = driver_Dismount(mountpoint, FALSE);
            wndMain_RefreshList(hWnd);
            SetCursor(csrPrevious);


            // Try normal (unforced) dismount...
            if (allOK)
                {
                MsgInfo(hWnd, TEXT("Volume dismounted."));
                }
            else
                {
                MsgInfo(hWnd, TEXT("Dismount failed."));
                }

		    }
        }

    SecZeroMemory(mountpoint, sizeof(mountpoint));

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_DismountSelected\n")));
}


// =========================================================================
void _wndMain_PropertiesSelected(HWND hWnd)
{
    UINT itemCount;
    UINT i;
    WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_PropertiesSelected\n")));

    itemCount = ListView_GetItemCount(G_hWndListView);

    for (i = 0; i < itemCount; i++)
	    {
	    if (ListView_GetItemState(
                                  G_hWndListView, 
                                  i,
                                  LVIS_SELECTED
                                 ) == LVIS_SELECTED)
		    {
            ListView_GetItemText( 
                                 G_hWndListView,
                                 i,
                                 COL_IDX_MOUNTPOINT,
                                 mountpoint, 
                                 sizeof(mountpoint)
                                );

            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Properties of mountpoint: %ls\n"), mountpoint));
            DisplayDlgProperties(hWnd, mountpoint);
		    }
        }

    SecZeroMemory(mountpoint, sizeof(mountpoint));

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_PropertiesSelected\n")));
}


// =========================================================================
void _wndMain_ExploreSelected()
{
    UINT itemCount;
    UINT i;
    WCHAR mountpoint[FREEOTFE_MAX_FILENAME_LENGTH];

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_wndMain_ExploreSelected\n")));

    itemCount = ListView_GetItemCount(G_hWndListView);

    for (i = 0; i < itemCount; i++)
	    {
	    if (ListView_GetItemState(
                                  G_hWndListView, 
                                  i,
                                  LVIS_SELECTED
                                 ) == LVIS_SELECTED)
		    {
            ListView_GetItemText( 
                                 G_hWndListView,
                                 i,
                                 COL_IDX_MOUNTPOINT,
                                 mountpoint, 
                                 sizeof(mountpoint)
                                );

            ExploreMountpoint(mountpoint);
		    }
        }

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("_wndMain_ExploreSelected\n")));
}


// =========================================================================
BOOL CALLBACK wndMain_HandleMsg_WM_NOTIFY(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
    BOOL retval = FALSE;
    int idCtrl;
    NMHDR* notifHdr;

    DEBUGOUTGUI(DEBUGLEV_VERBOSE_ENTER, (TEXT("wndMain_HandleMsg_WM_NOTIFY\n")));

    idCtrl = (int)wParam;
    notifHdr = (NMHDR*)lParam;

    switch (notifHdr->code)
        {
        case NM_DBLCLK:
            {
            switch(idCtrl)
                {
                case IDC_MAIN_LISTVIEW:
                    {
                    _wndMain_ExploreSelected();
                    retval = TRUE;
                    break;
                    }
                }
            break;
            }

        // List view item changed (e.g. selection changed)
        case LVN_ITEMCHANGED:
            {
            switch(idCtrl)
                {
                case IDC_MAIN_LISTVIEW:
                    {
                    EnableDisableControls();
                    retval = TRUE;
                    break;
                    }
                }
            break;
            }

        }


    DEBUGOUTGUI(DEBUGLEV_VERBOSE_EXIT, (TEXT("wndMain_HandleMsg_WM_NOTIFY\n")));
    return retval;
}


// =========================================================================
LRESULT CALLBACK wndMain_HandleMsg_WM_COMMAND(
                             HWND hWnd,
                             UINT msg,
                             WPARAM wParam,
                             LPARAM lParam
                            )
{
    LRESULT retval = 0;

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("wndMain_HandleMsg_WM_COMMAND\n")));
    switch(LOWORD(wParam))
        {
#ifdef FREEOTFE_STATS
        case ID_STATS_REPORT:
            {
            WCHAR ourFilename[FREEOTFE_MAX_FILENAME_LENGTH];
            WCHAR* uncMachine;
            WCHAR* drive;
            WCHAR* path;
            WCHAR* filename;
            WCHAR* fileExtension;
            HCURSOR csrHourglass;
            HCURSOR csrPrevious;
            SHELLEXECUTEINFO seInfo;

            MsgInfo(hWnd, TEXT("About to generate stats report.\n\nPlease ensure PDA isn't running on battery power and tap \"OK\" to begin."));

            csrHourglass = LoadCursor(NULL, IDC_WAIT);
            csrPrevious = SetCursor(csrHourglass);

            // We dump our report into the "CWD"  (the directory in which this
            // executable is located
            GetModuleFileName(
                              NULL, 
                              ourFilename, 
                              (sizeof(ourFilename) / sizeof(ourFilename[0]))
                             ); 
            SDUParsePath(
                         ourFilename, 
                         &uncMachine, 
                         &drive, 
                         &path, 
                         &filename, 
                         &fileExtension
                        );
            wcsncpy(
                    filename, 
                    STATS_REPORT_FILE,
                    (
                     (sizeof(ourFilename) - (filename - path)) / 
                     sizeof(ourFilename[0])
                    )
                   );

            GenerateDriverStatsReport(ourFilename);

            SetCursor(csrPrevious);

            if (MessageBox(
                           hWnd,
                           TEXT("Stats report generated.\n\nDo you wish to view the report now?"),
                           TEXT("Information"),
                           (MB_ICONQUESTION | MB_YESNO)
                          ) == IDYES)
                {
                // Launch viewer with stats report

                // We use ShellExecuteEx, rather than by using the executable's
                // filename and CreateProcess(...)
                seInfo.cbSize = sizeof(seInfo);
                seInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
                seInfo.hwnd = NULL;
                seInfo.lpVerb = TEXT("open");
                seInfo.lpFile = ourFilename;
                seInfo.lpParameters = NULL;
                seInfo.lpDirectory = NULL;
                seInfo.nShow = SW_SHOWNORMAL;
                seInfo.hInstApp = G_hInstance;
                // Optional fields
                seInfo.lpIDList = 0;
                seInfo.lpClass = 0;
                seInfo.hkeyClass = NULL;
                seInfo.dwHotKey = 0;
                seInfo.hIcon = NULL;
                seInfo.hProcess = NULL;

                ShellExecuteEx(&seInfo);

                /*
                This will also do the same thing, but ties it to a specific
                executable:
                CreateProcess(
                              EXE_whatever_it_is,
                              ourFilename,

                              NULL,
                              NULL,
                              FALSE,
                              0,
                              NULL,
                              NULL,
                              NULL,
                              NULL
                             );
                */
                }

            break;
            }
#endif

#ifdef DEBUG
        case ID_TEST_TEST_XXX_1:
            {
            TestOne(hWnd);
            break;
            }

        case ID_TEST_TEST_XXX_2:
            {
            TestTwo(hWnd);
            break;
            }

        case ID_TEST_TEST_XXX_3:
            {
            TestThree(hWnd);
            break;
            }
#endif

        case ID_FILE_EXIT:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_EXIT\n")));
            PostMessage(hWnd, WM_CLOSE, 0, 0);
            break;
            }

        case ID_FILE_NEWVOL:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_NEWVOL\n")));
            MsgInfo(hWnd, TEXT("Please note: If you wish to create a new volume for use on both PDAs and PCs, please do so using the PC version of FreeOTFE.\n\nSee documentation for further explanation."));
            DisplayDlgNewVolWizard(hWnd);
            break;
            }

        case ID_FILE_MOUNT:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_MOUNT\n")));
            DisplayDlgMount(hWnd);
            wndMain_RefreshList(hWnd);
            break;
            }

        case ID_FILE_DISMOUNT:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_DISMOUNT\n")));
            _wndMain_DismountSelected(hWnd);
            break;
            }

        case ID_FILE_DISMOUNTALL:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_FILE_DISMOUNTALL\n")));
            _wndMain_DismountAll(hWnd);
            break;
            }

            
        case ID_VIEW_PROPERTIES:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_PROPERTIES\n")));
            _wndMain_PropertiesSelected(hWnd);
            break;
            }

        case ID_VIEW_OPTIONS:
            {
            BOOL prevLargeIcons;

            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_OPTIONS\n")));

            prevLargeIcons = G_Options->LargeIcons;

            DisplayDlgOptions(hWnd);

            // If the user changed the large/small icons option, setup
            // the list display again
            if (prevLargeIcons != G_Options->LargeIcons)
                {
                wndMain_SetupIconSize();
                wndMain_RefreshList(hWnd);
                }

            break;
            }

        case ID_VIEW_REFRESH:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_VIEW_REFRESH\n")));
            wndMain_RefreshList(hWnd);
            break;
            }

        case ID_TOOLS_CREATEKEYFILE:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CREATEKEYFILE\n")));
            DisplayDlgKeyfileWizard(hWnd);
            break;
            }

        case ID_TOOLS_CHANGEPASSWORD:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CHANGEDETAILS\n")));
            DisplayDlgChpassWizard(hWnd);
            break;
            }

        case ID_TOOLS_CDBBACKUP:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBBACKUP\n")));
            DisplayDlgBackup(hWnd);
            break;
            }

        case ID_TOOLS_CDBRESTORE:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBRESTORE\n")));
            DisplayDlgRestore(hWnd);
            break;
            }

        case ID_TOOLS_CDBDUMP:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_TOOLS_CDBDUMP\n")));
            DisplayDlgDumpCDBWizard(hWnd);
            break;
            }

        case ID_HELP_ABOUT:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_HELP_ABOUT\n")));
            DisplayDlgAbout(hWnd);
            break;
            }

        case ID_CONTEXTMENU_EXPLORE:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: ID_CONTEXTMENU_EXPLORE\n")));

⌨️ 快捷键说明

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