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

📄 dlgoptions.c

📁 文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-1, SHA-224, SHA-256,
💻 C
📖 第 1 页 / 共 2 页
字号:
// Description: 
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW:   http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//

#include "main.h"
#include "dlgOptions.h"
#include "FreeOTFEDebug.h"
#include "FreeOTFElib.h"
#include "FreeOTFEGUIlib.h"
#include "FreeOTFE4PDAlib.h"
#include "FreeOTFE4PDAGUIlib.h"
#include "DriverInterface.h"
#include "DriverInterfaceTwo.h"
#include "DriverInterfaceCommon.h"

#include "resource.h"

#include "SDUGeneral.h"

#include <stdio.h> // Required for _snwprintf_s 
#include <winuser.h>  // Required for IDOK, etc
#include <Commdlg.h>  // Required from OPENFILENAME
#include <aygshell.h>  // Required for SH... functions/definitions/etc
#pragma comment(lib, "aygshell") // Link in aygshell.lib

// File association "Open" command
#define  FILE_ASSOC_OPEN   TEXT("\"%s\" /mount /volume \"%%1\" /freeotfe")

// Local to this file...
HWND G_dlgOptions_MenuBar = NULL;
BOOL G_dlgOptions_FileExtnAssociated = FALSE;


// =========================================================================
// Forward declarations...
BOOL CALLBACK dlgOptions_Proc(
                           HWND hDlg, 
                           UINT message, 
                           WPARAM wParam, 
                           LPARAM lParam
                          );

BOOL _dlgOptions_CheckFileAssociationPresent();


// =========================================================================
void DisplayDlgOptions(HWND hWnd)
{
    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("_DisplaydlgOptions\n")));
    DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Displaying options dialog\n")));

    DialogBox(
              G_hInstance, 
              MAKEINTRESOURCE(IDD_OPTIONS), 
              hWnd, 
              (DLGPROC)dlgOptions_Proc
             );

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


// =========================================================================
void _dlgOptions_EnableDisableControls(HWND hDlg)
{
    BOOL specifyMntPnt;

    specifyMntPnt = (IsDlgButtonChecked(
                                        hDlg,
                                        IDC_RADIO_MNTPNT_DEFAULT
                                       ) == BST_CHECKED);
	SetControlEnabled(hDlg, IDC_STATIC_MOUNTPOINT, specifyMntPnt);
	SetControlEnabled(hDlg, IDC_EDIT_MOUNTPOINT, specifyMntPnt);
}


// =========================================================================
BOOL CALLBACK dlgOptions_HandleMsg_WM_INITDIALOG(HWND hDlg)
{
    SHINITDLGINFO shidi;

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

    shidi.dwMask = SHIDIM_FLAGS;
    shidi.dwFlags = (
                     SHIDIF_DONEBUTTON | 
                     SHIDIF_SIPDOWN | 
                     SHIDIF_SIZEDLGFULLSCREEN
                    );
    shidi.hDlg = hDlg;
    SHInitDialog(&shidi);

    G_dlgOptions_MenuBar = SetupMenu(hDlg, IDR_MENU_DONECANCEL);


    // Populate display...

    // Mountpoint radiobutton...
    if (G_Options->MntPntUseVolFilename == TRUE)
        {
        CheckDlgButton(
                       hDlg,    
                       IDC_RADIO_MNTPNT_VOL,
                       BST_CHECKED
                      );
        }
    else
        {
        CheckDlgButton(
                       hDlg, 
                       IDC_RADIO_MNTPNT_DEFAULT,
                       BST_CHECKED
                      );
        }
    SetDlgItemText(hDlg, IDC_EDIT_MOUNTPOINT, G_Options->MntPntDefault);

    SetDlgItemText(hDlg, IDC_EDIT_EXPLORER, G_Options->ExplorerExe);
    if (G_Options->ExploreOnMount == TRUE)
        {
        CheckDlgButton(
                       hDlg,    
                       IDC_CHECK_EXPLOREONMOUNT,
                       BST_CHECKED
                      );
        }

    if (G_Options->LargeIcons == TRUE)
        {
        CheckDlgButton(
                       hDlg,    
                       IDC_CHECK_LARGEICONS,
                       BST_CHECKED
                      );
        }    

    if (G_Options->SaveSettings == TRUE)
        {
        CheckDlgButton(
                       hDlg,    
                       IDC_CHECK_SAVESETTINGS,
                       BST_CHECKED
                      );
        }

    SetDlgItemText(hDlg, IDC_CHECK_ASSOCIATE, TEXT("Associate with \"."));
    AppendStaticText_Simple(hDlg, IDC_CHECK_ASSOCIATE, VOL_FILE_EXTN);
    AppendStaticText_Simple(hDlg, IDC_CHECK_ASSOCIATE, TEXT("\" files"));

    G_dlgOptions_FileExtnAssociated = _dlgOptions_CheckFileAssociationPresent();
    if (G_dlgOptions_FileExtnAssociated)
        {
        CheckDlgButton(
                       hDlg,    
                       IDC_CHECK_ASSOCIATE,
                       BST_CHECKED
                      );
        }

    _dlgOptions_EnableDisableControls(hDlg);

    SDUTextSetBold(hDlg, IDC_CHECK_SAVESETTINGS, TRUE);

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgOptions_HandleMsg_WM_INITDIALOG\n")));
    return TRUE;
}


// =========================================================================
BOOL CALLBACK dlgOptions_HandleMsg_WM_CLOSE(HWND hWnd)
{
    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgOptions_HandleMsg_WM_CLOSE\n")));
    if (G_dlgOptions_MenuBar != NULL)
        {
        DestroyWindow(G_dlgOptions_MenuBar);
        G_dlgOptions_MenuBar = NULL;
        }
    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgOptions_HandleMsg_WM_CLOSE\n")));
    return TRUE;
}


// =========================================================================
BOOL
dlgOptions_GetUserInput(HWND hDlg, OPTIONS* Opts)
{
	BOOL retval;
    WCHAR tmpStr[FREEOTFE_MAX_FILENAME_LENGTH];

    retval = TRUE;

    Opts->MntPntUseVolFilename = (IsDlgButtonChecked(
                                        hDlg,
                                        IDC_RADIO_MNTPNT_VOL
                                       ) == BST_CHECKED);

    SecZeroAndFreeWCHARMemory(Opts->MntPntDefault);
    GetDlgItemText( 
                   hDlg, 
                   IDC_EDIT_MOUNTPOINT,
                   tmpStr,
                   sizeof(tmpStr)
                 );
    // +1 to include terminating NULL
    Opts->MntPntDefault = calloc(
                                 (wcslen(tmpStr) + 1), 
                                 sizeof(*Opts->MntPntDefault)
                                );
    if (Opts->MntPntDefault == NULL)
        {
        DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to allocate memory for tmp opt string\n")));
        retval = FALSE;
        }
    else
        {
        wcscpy(Opts->MntPntDefault, tmpStr);
        }

    SecZeroAndFreeWCHARMemory(Opts->ExplorerExe);
    GetDlgItemText( 
                   hDlg, 
                   IDC_EDIT_EXPLORER,
                   tmpStr,
                   sizeof(tmpStr)
                 );
    // +1 to include terminating NULL
    Opts->ExplorerExe = calloc(
                               (wcslen(tmpStr) + 1),
                               sizeof(*Opts->ExplorerExe)
                              );
    if (Opts->ExplorerExe == NULL)
        {
        DEBUGOUTGUI(DEBUGLEV_ERROR, (TEXT("Unable to allocate memory for tmp opt string\n")));
        retval = FALSE;
        }
    else
        {
        wcscpy(Opts->ExplorerExe, tmpStr);
        }
    Opts->ExploreOnMount = (IsDlgButtonChecked(
                                        hDlg,
                                        IDC_CHECK_EXPLOREONMOUNT
                                       ) == BST_CHECKED);

    Opts->LargeIcons = (IsDlgButtonChecked(
                                        hDlg,
                                        IDC_CHECK_LARGEICONS
                                       ) == BST_CHECKED);

    Opts->SaveSettings = (IsDlgButtonChecked(
                                        hDlg,
                                        IDC_CHECK_SAVESETTINGS
                                       ) == BST_CHECKED);

    return retval;
}


// =========================================================================
BOOL
dlgOptions_ValidateUserInput(HWND hDlg, OPTIONS* Opts)

⌨️ 快捷键说明

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