1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Windows: when /silent specified in command line, avoid performing any WIN32 UI calls. This fixes issue of current application losing focus when VeraCrypt is run with /quit /silent (cf https://github.com/veracrypt/VeraCrypt/issues/274)

This commit is contained in:
Mounir IDRASSI
2018-03-13 18:33:28 +01:00
parent 6c69cbfd29
commit d20df7c990
2 changed files with 118 additions and 87 deletions

View File

@@ -1790,13 +1790,13 @@ static int g_waitCursorCounter = 0;
void
WaitCursor ()
{
static HCURSOR hcWait;
static HCURSOR hcWait = NULL;
if (hcWait == NULL)
hcWait = LoadCursor (NULL, IDC_WAIT);
if ((g_waitCursorCounter == 0) || (hCursor != hcWait))
{
SetCursor (hcWait);
if (!Silent) SetCursor (hcWait);
hCursor = hcWait;
}
g_waitCursorCounter++;
@@ -1805,14 +1805,14 @@ WaitCursor ()
void
NormalCursor ()
{
static HCURSOR hcArrow;
static HCURSOR hcArrow = NULL;
if (hcArrow == NULL)
hcArrow = LoadCursor (NULL, IDC_ARROW);
if (g_waitCursorCounter > 0)
g_waitCursorCounter--;
if (g_waitCursorCounter == 0)
{
SetCursor (hcArrow);
if (!Silent) SetCursor (hcArrow);
hCursor = NULL;
}
}
@@ -1820,12 +1820,12 @@ NormalCursor ()
void
ArrowWaitCursor ()
{
static HCURSOR hcArrowWait;
static HCURSOR hcArrowWait = NULL;
if (hcArrowWait == NULL)
hcArrowWait = LoadCursor (NULL, IDC_APPSTARTING);
if ((g_waitCursorCounter == 0) || (hCursor != hcArrowWait))
{
SetCursor (hcArrowWait);
if (!Silent) SetCursor (hcArrowWait);
hCursor = hcArrowWait;
}
g_waitCursorCounter++;
@@ -1833,7 +1833,7 @@ ArrowWaitCursor ()
void HandCursor ()
{
static HCURSOR hcHand;
static HCURSOR hcHand = NULL;
if (hcHand == NULL)
hcHand = LoadCursor (NULL, IDC_HAND);
SetCursor (hcHand);

View File

@@ -378,6 +378,10 @@ static void localcleanup (void)
}
void RefreshMainDlg (HWND hwndDlg)
{
if (Silent)
LoadDriveLetters (hwndDlg, NULL, 0);
else
{
int drive = (wchar_t) (HIWORD (GetSelectedLong (GetDlgItem (hwndDlg, IDC_DRIVELIST))));
@@ -385,6 +389,7 @@ void RefreshMainDlg (HWND hwndDlg)
LoadDriveLetters (hwndDlg, GetDlgItem (hwndDlg, IDC_DRIVELIST), drive);
EnableDisableButtons (hwndDlg);
}
}
void EndMainDlg (HWND hwndDlg)
{
@@ -427,6 +432,8 @@ static void InitMainDialog (HWND hwndDlg)
wchar_t *str;
int i;
if (!Silent)
{
/* Call the common dialog init code */
InitDialog (hwndDlg);
LocalizeDialog (hwndDlg, NULL);
@@ -484,6 +491,7 @@ static void InitMainDialog (HWND hwndDlg)
// Disable menu item for changing system header key derivation algorithm until it's implemented
EnableMenuItem (GetMenu (hwndDlg), IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO, MF_GRAYED);
}
try
{
@@ -497,6 +505,10 @@ static void InitMainDialog (HWND hwndDlg)
// initialize the list of devices available for mounting as early as possible
UpdateMountableHostDeviceList ();
if (Silent)
LoadDriveLetters (hwndDlg, NULL, 0);
else
{
// Resize the logo bitmap if the user has a non-default DPI
if (ScreenDPI != USER_DEFAULT_SCREEN_DPI
&& hbmLogoBitmapRescaled == NULL) // If not re-called (e.g. after language pack change)
@@ -523,6 +535,7 @@ static void InitMainDialog (HWND hwndDlg)
SendMessage (GetDlgItem (hwndDlg, IDC_NO_HISTORY), BM_SETCHECK, bHistory ? BST_UNCHECKED : BST_CHECKED, 0);
EnableDisableButtons (hwndDlg);
}
}
void EnableDisableButtons (HWND hwndDlg)
{
@@ -1564,7 +1577,7 @@ static void LaunchVolExpander (HWND hwndDlg)
void LoadDriveLetters (HWND hwndDlg, HWND hTree, int drive)
{
// Remember the top-most visible item
int lastTopMostVisibleItem = ListView_GetTopIndex (hTree);
int lastTopMostVisibleItem = (!Silent && hTree)? ListView_GetTopIndex (hTree) : 0;
wchar_t *szDriveLetters[]=
{L"A:", L"B:", L"C:", L"D:",
@@ -1618,6 +1631,9 @@ void LoadDriveLetters (HWND hwndDlg, HWND hTree, int drive)
if (dwUsedDrives == 0)
Warning ("DRIVELETTERS", hwndDlg);
if (Silent)
return;
if(drive == 0)
ListView_DeleteAllItems(hTree);
@@ -5182,7 +5198,7 @@ retry:
return FALSE;
}
if (interact)
if (interact && !Silent)
MessageBoxW (hwndDlg, GetString ("UNMOUNT_FAILED"), lpszTitle, MB_ICONERROR);
}
else
@@ -5485,6 +5501,9 @@ static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt)
param.bPasswordPrompt = bPasswordPrompt;
param.bRet = FALSE;
if (Silent)
mountAllDevicesThreadProc (&param, hwndDlg);
else
ShowWaitDialog (hwndDlg, FALSE, mountAllDevicesThreadProc, &param);
return param.bRet;
@@ -6612,6 +6631,9 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
ExtractCommandLine (hwndDlg, (wchar_t *) lParam);
if (Silent && !Quit)
Silent = FALSE;
try
{
BootEncObj->SetParentWindow (hwndDlg);
@@ -6824,10 +6846,10 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
if (bExplore)
OpenVolumeExplorerWindow (szDriveLetter[0] - L'A');
RefreshMainDlg(hwndDlg);
if(!Silent)
{
RefreshMainDlg(hwndDlg);
// Check for problematic file extensions (exe, dll, sys)
if (CheckFileExtension (szFileName))
Warning ("EXE_FILE_EXTENSION_MOUNT_WARNING", hwndDlg);
@@ -6917,6 +6939,15 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
TaskBarIconRemove (hwndDlg);
exit (exitCode);
}
else
{
if (Silent)
{
Silent = FALSE;
InitMainDialog (hwndDlg);
RefreshMainDlg(hwndDlg);
}
}
}
// No command line arguments or only /volume => bring active instance
@@ -9531,7 +9562,7 @@ static BOOL MountFavoriteVolumeBase (HWND hwnd, const FavoriteVolume &favorite,
else
mountOptions.ProtectedHidVolPkcs5Prf = CmdVolumePkcs5;
mountOptions.ProtectedHidVolPim = CmdVolumePim;
if (DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_MOUNT_OPTIONS), hwnd, (DLGPROC) MountOptionsDlgProc, (LPARAM) &mountOptions) == IDCANCEL)
if (Silent || (DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_MOUNT_OPTIONS), hwnd, (DLGPROC) MountOptionsDlgProc, (LPARAM) &mountOptions) == IDCANCEL))
{
status = FALSE;
goto skipMount;