Merge remote-tracking branch 'upstream/master'

This commit is contained in:
typpos 2021-02-02 11:15:14 +11:00
commit 039a083347
30 changed files with 9031 additions and 5829 deletions

View File

@ -7,35 +7,51 @@ This project adheres to [Semantic Versioning](http://semver.org/).
## [0.6.7 / 5.47.1] - 2021-02-01
### Added
- added UI Language auto detection
### Fixed
- fixed brave.exe is now properly recognized as chrome based not firefox based
- fixed issue introduced in 0.6.5 with recent edge builds
-- the 0.6.5 behavioure can be set ona per process basis using "RpcMgmtSetComTimeout=POPPeeper.exe,n"
- fixed grouping issues
- fixed main windows restore state from tray
## [0.6.5 / 5.47.0] - 2021-01-31 ## [0.6.5 / 5.47.0] - 2021-01-31
### Added ### Added
- added detection for waterfox.exe, Palemoon.exe, basilisk.exe and brave.exe firefox forks - added detection for Waterfox.exe, Palemoon.exe and Basilisk.exe Firefox forks as well as Brave.exe
- added bluetooth API support, IPC port can be opened with "OpenBluetooth=y" - added Bluetooth API support, IPC port can be opened with "OpenBluetooth=y"
-- this should resolve issues with many unity games hanging on startup for a long time -- this should resolve issues with many Unity games hanging on startup for a long time
- added enhanced RPC/IPC interface tracing - added enhanced RPC/IPC interface tracing
- when DefaultBox is not found by the SandMan UI, it will be recreated - when DefaultBox is not found by the SandMan UI, it will be recreated
- "Disable Forced Programs" time is now saved and reloaded - "Disable Forced Programs" time is now saved and reloaded
### Changed ### Changed
- reduced sandman cpu usage - reduced SandMan CPU usage
- sandboxie.ini and templates.ini can now be UTF8 encoded - Sandboxie.ini and Templates.ini can now be UTF8 encoded
-- this feature is experimental, files without a UTF-8 Signature should be recognized also -- this feature is experimental, files without a UTF-8 Signature should be recognized also
-- "ByteOrderMark=yes" is obsolete, sandboxie.ini is now always saved with a BOM/Signature -- "ByteOrderMark=yes" is obsolete, Sandboxie.ini is now always saved with a BOM/Signature
- legacy language files can now be UTF8 encoded - legacy language files can now be UTF8 encoded
- reworked file migration behaviour, removed hardcoded lists in favour of templates - reworked file migration behaviour, removed hardcoded lists in favour of templates
-- you can now use "CopyAlways=", "DontCopy=" and "CopyEmpty=" that support the same syntax as "OpenFilePath=" -- you can now use "CopyAlways=", "DontCopy=" and "CopyEmpty=" that support the same syntax as "OpenFilePath="
-- "CopyBlockDenyWrite=program.exe,y" makes a write open call to a file that won't be copied fail instead of turning it read only -- "CopyBlockDenyWrite=program.exe,y" makes a write open call to a file that won't be copied fail instead of turning it read-only
- removed hardcoded SkipHook list in favour of templates - removed hardcoded SkipHook list in favour of templates
### Fixed ### Fixed
- fixed old memory pool leak in the sbie driver - fixed old memory pool leak in the Sbie driver
- fixed issue with item selection in the access restrictions ui - fixed issue with item selection in the access restrictions UI
- fixed updater crash in sbiectrl.exe - fixed updater crash in Sbiectrl.exe
- fixed issues wih RPC calls introduced in sbie 5.33.1 - fixed issues with RPC calls introduced in Sbie 5.33.1
- fixed recently broken terminate all command - fixed recently broken 'terminate all' command
- fixed a couple minor UI issues with Sandman UI - fixed a couple minor UI issues with SandMan UI
- fixed IPC issue with windows 7 and 8 resulting in process termination - fixed IPC issue with Windows 7 and 8 resulting in process termination
- fixed "recover to" functionality - fixed "recover to" functionality
@ -45,7 +61,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Added ### Added
- added confirmation prompts to terminate all commands - added confirmation prompts to terminate all commands
- added window title to boxed process info - added window title to boxed process info
- added winspy based sandboxed window finder - added WinSpy based sandboxed window finder
- added option to view disabled boxes and double click on box to enable it - added option to view disabled boxes and double click on box to enable it
### Changed ### Changed
@ -56,9 +72,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Fixed ### Fixed
- fixed issues with window modality - fixed issues with window modality
- fixed issues when main window was set to be always on top - fixed issues when main window was set to be always on top
- fixed a driver issue with windows 10 insider build 21286 - fixed a driver issue with Windows 10 insider build 21286
- fixed issues with snapshot dialog - fixed issues with snapshot dialog
- fixed an issue when writing to a path that already exist in the snapshot but not outside - fixed an issue when writing to a path that already exists in the snapshot but not outside
@ -70,7 +86,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- added internet prompt to now also allow internet access permanently - added internet prompt to now also allow internet access permanently
- added browse button for box root folder in the SandMan UI - added browse button for box root folder in the SandMan UI
- added explorer info message - added explorer info message
- added option to keep the sandman UI always on top - added option to keep the SandMan UI always on top
- allow drag and drop file onto Sandman.exe to run it sandboxed - allow drag and drop file onto Sandman.exe to run it sandboxed
- added start SandMan UI when a sandboxed application starts - added start SandMan UI when a sandboxed application starts
- recovery window can now list all files - recovery window can now list all files

View File

@ -21,8 +21,8 @@
#ifndef _MY_VERSION_H #ifndef _MY_VERSION_H
#define _MY_VERSION_H #define _MY_VERSION_H
#define MY_VERSION_BINARY 5,47,0 #define MY_VERSION_BINARY 5,47,1
#define MY_VERSION_STRING "5.47.0" #define MY_VERSION_STRING "5.47.1"
#define MY_VERSION_COMPAT "5.46.0" // this refers to the driver ABI compatibility #define MY_VERSION_COMPAT "5.46.0" // this refers to the driver ABI compatibility
// These #defines are used by either Resource Compiler, or by NSIC installer // These #defines are used by either Resource Compiler, or by NSIC installer

View File

@ -209,18 +209,8 @@ _FX BOOLEAN Config_MatchImageGroup(
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
_FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value) _FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value, ULONG* pMode)
{ {
ULONG image_len = (wcslen(Dll_ImageName) + 1) * sizeof(WCHAR);
WCHAR* image_lwr = Dll_AllocTemp(image_len);
if (!image_lwr) {
SbieApi_Log(2305, NULL);
return NULL;
}
memcpy(image_lwr, Dll_ImageName, image_len);
_wcslwr(image_lwr);
//image_len = wcslen(image_lwr);
// //
// if the setting indicates an image name followed by a comma, // if the setting indicates an image name followed by a comma,
// then match the image name against the executing process. // then match the image name against the executing process.
@ -242,9 +232,11 @@ _FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value)
else else
inv = FALSE; inv = FALSE;
if (pMode) *pMode = inv ? 1 : 0; // 1 - match by negation, 0 - exact match
ULONG len = (ULONG)(tmp - value); ULONG len = (ULONG)(tmp - value);
if (len) { if (len) {
match = Config_MatchImage(value, len, image_lwr, 1); match = Config_MatchImage(value, len, Dll_ImageName, 1);
if (inv) if (inv)
match = !match; match = !match;
if (!match) if (!match)
@ -253,13 +245,32 @@ _FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value)
value = tmp ? tmp + 1 : NULL; value = tmp ? tmp + 1 : NULL;
} }
else {
Dll_Free(image_lwr); if (pMode) *pMode = 2; // 2 - global default
}
return value; return value;
} }
//---------------------------------------------------------------------------
// Config_GetSettingsForImageName_bool
//---------------------------------------------------------------------------
BOOLEAN Config_GetSettingsForImageName_bool(const WCHAR* setting, BOOLEAN defval)
{
WCHAR value[16];
Config_GetSettingsForImageName(setting, value, sizeof(value), NULL);
if (*value == L'y' || *value == L'Y')
return TRUE;
if (*value == L'n' || *value == L'N')
return FALSE;
return defval;
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Config_InitPatternList // Config_InitPatternList
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -280,7 +291,7 @@ _FX BOOLEAN Config_InitPatternList(const WCHAR* setting, LIST* list)
break; break;
++index; ++index;
WCHAR* value = Config_MatchImageAndGetValue(conf_buf); WCHAR* value = Config_MatchImageAndGetValue(conf_buf, NULL);
if (value) if (value)
{ {
pat = Pattern_Create(Dll_Pool, value, TRUE); pat = Pattern_Create(Dll_Pool, value, TRUE);
@ -302,7 +313,7 @@ _FX NTSTATUS Config_GetSettingsForImageName(
const WCHAR* setting, WCHAR* value, ULONG value_size, const WCHAR* deftext) const WCHAR* setting, WCHAR* value, ULONG value_size, const WCHAR* deftext)
{ {
WCHAR conf_buf[2048]; WCHAR conf_buf[2048];
WCHAR* found_value = NULL; ULONG found_mode = -1;
ULONG index = 0; ULONG index = 0;
while (1) { while (1) {
@ -313,19 +324,22 @@ _FX NTSTATUS Config_GetSettingsForImageName(
break; break;
++index; ++index;
WCHAR* value = Config_MatchImageAndGetValue(conf_buf); ULONG mode = -1;
if (!value) WCHAR* found_value = Config_MatchImageAndGetValue(conf_buf, &mode);
if (!found_value || mode > found_mode)
continue; continue;
if (found_value) { //if (found_value) {
SbieApi_Log(2302, L"%S - %S [%S]", setting, Dll_ImageName, Dll_BoxName); // SbieApi_Log(2302, L"%S - %S [%S]", setting, Dll_ImageName, Dll_BoxName);
break; // break;
} //}
found_value = value; wcscpy_s(value, value_size / sizeof(WCHAR), found_value);
found_mode = mode;
} }
if (found_value) wcscpy_s(value, value_size / sizeof(WCHAR), found_value); if (found_mode == -1) {
else if (deftext) wcscpy_s(value, value_size / sizeof(WCHAR), deftext); if (deftext) wcscpy_s(value, value_size / sizeof(WCHAR), deftext);
else value[0] = L'\0'; else value[0] = L'\0';
}
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View File

@ -741,13 +741,12 @@ BOOLEAN ComDlg32_Init(HMODULE);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
WCHAR* Config_MatchImageAndGetValue(WCHAR* value);
BOOLEAN Config_InitPatternList(const WCHAR* setting, LIST* list); BOOLEAN Config_InitPatternList(const WCHAR* setting, LIST* list);
NTSTATUS Config_GetSettingsForImageName( NTSTATUS Config_GetSettingsForImageName(
const WCHAR* setting, WCHAR* value, ULONG value_size, const WCHAR* deftext); const WCHAR* setting, WCHAR* value, ULONG value_size, const WCHAR* deftext);
BOOLEAN Config_GetSettingsForImageName_bool(const WCHAR* setting, BOOLEAN defval);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------

View File

@ -559,7 +559,7 @@ _FX void Dll_SelectImageType(void)
L"waterfox.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX, L"waterfox.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX,
L"palemoon.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX, L"palemoon.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX,
L"basilisk.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX, L"basilisk.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX,
L"brave.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX, L"seamonkey.exe", (WCHAR *)DLL_IMAGE_MOZILLA_FIREFOX,
L"wmplayer.exe", (WCHAR *)DLL_IMAGE_WINDOWS_MEDIA_PLAYER, L"wmplayer.exe", (WCHAR *)DLL_IMAGE_WINDOWS_MEDIA_PLAYER,
L"winamp.exe", (WCHAR *)DLL_IMAGE_NULLSOFT_WINAMP, L"winamp.exe", (WCHAR *)DLL_IMAGE_NULLSOFT_WINAMP,
@ -575,7 +575,9 @@ _FX void Dll_SelectImageType(void)
L"neon.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, L"neon.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME,
L"maxthon.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, L"maxthon.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME,
L"vivaldi.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, L"vivaldi.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME,
L"msedge.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, // modern edge is chromium based L"brave.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME,
L"browser.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, // Yandex Browser
L"msedge.exe", (WCHAR *)DLL_IMAGE_GOOGLE_CHROME, // Modern Edge is Chromium-based
L"GoogleUpdate.exe", (WCHAR *)DLL_IMAGE_GOOGLE_UPDATE, L"GoogleUpdate.exe", (WCHAR *)DLL_IMAGE_GOOGLE_UPDATE,
L"AcroRd32.exe", (WCHAR *)DLL_IMAGE_ACROBAT_READER, L"AcroRd32.exe", (WCHAR *)DLL_IMAGE_ACROBAT_READER,

View File

@ -72,10 +72,7 @@ _FX BOOLEAN File_InitFileMigration(void)
Config_InitPatternList(L"CopyAlways", &File_MigrationOptions[FILE_COPY_CONTENT]); Config_InitPatternList(L"CopyAlways", &File_MigrationOptions[FILE_COPY_CONTENT]);
Config_InitPatternList(L"DontCopy", &File_MigrationOptions[FILE_DONT_COPY]); Config_InitPatternList(L"DontCopy", &File_MigrationOptions[FILE_DONT_COPY]);
WCHAR conf[16]; File_MigrationDenyWrite = Config_GetSettingsForImageName_bool(L"CopyBlockDenyWrite", FALSE);
Config_GetSettingsForImageName(L"CopyBlockDenyWrite", conf, sizeof(conf), NULL);
if (*conf == L'y' || *conf == L'Y')
File_MigrationDenyWrite = TRUE;
File_InitCopyLimit(); File_InitCopyLimit();

View File

@ -188,11 +188,13 @@ _FX BOOLEAN RpcRt_Init(HMODULE module)
SBIEDLL_HOOK(RpcRt_, RpcBindingCreateW); SBIEDLL_HOOK(RpcRt_, RpcBindingCreateW);
__sys_RpcMgmtSetComTimeout = (P_RpcMgmtSetComTimeout)Ldr_GetProcAddrNew(DllName_rpcrt4, L"RpcMgmtSetComTimeout", "RpcMgmtSetComTimeout"); if(Config_GetSettingsForImageName_bool(L"RpcMgmtSetComTimeout", TRUE))
__sys_RpcMgmtSetComTimeout = (P_RpcMgmtSetComTimeout)Ldr_GetProcAddrNew(DllName_rpcrt4, L"RpcMgmtSetComTimeout", "RpcMgmtSetComTimeout");
} }
WCHAR wsTraceOptions[4]; WCHAR wsTraceOptions[4];
if (SbieApi_QueryConf(NULL, L"IpcTrace", 0, wsTraceOptions, sizeof(wsTraceOptions)) == STATUS_SUCCESS && wsTraceOptions[0] != L'\0') if ((Dll_OsBuild >= 8400) // win8 and above
&& SbieApi_QueryConf(NULL, L"IpcTrace", 0, wsTraceOptions, sizeof(wsTraceOptions)) == STATUS_SUCCESS && wsTraceOptions[0] != L'\0')
{ {
#ifdef _WIN64 #ifdef _WIN64
@ -461,7 +463,7 @@ _FX ULONG RpcRt_RpcBindingFromStringBindingW(
//OutputDebugString(msg); //OutputDebugString(msg);
SbieApi_MonitorPut2(MONITOR_IPC | MONITOR_TRACE, msg, FALSE); SbieApi_MonitorPut2(MONITOR_IPC | MONITOR_TRACE, msg, FALSE);
} }
//__sys_RpcMgmtSetComTimeout(*OutBinding, RPC_C_BINDING_TIMEOUT); // this breaks things if(__sys_RpcMgmtSetComTimeout) __sys_RpcMgmtSetComTimeout(*OutBinding, RPC_C_BINDING_TIMEOUT);
return status; return status;
} }
@ -525,7 +527,7 @@ _FX RPC_STATUS RpcRt_RpcBindingCreateW(
//OutputDebugString(msg); //OutputDebugString(msg);
SbieApi_MonitorPut2(MONITOR_IPC | MONITOR_TRACE, msg, FALSE); SbieApi_MonitorPut2(MONITOR_IPC | MONITOR_TRACE, msg, FALSE);
} }
//__sys_RpcMgmtSetComTimeout(*Binding, RPC_C_BINDING_TIMEOUT); // this breaks things if (__sys_RpcMgmtSetComTimeout) __sys_RpcMgmtSetComTimeout(*Binding, RPC_C_BINDING_TIMEOUT);
return status; return status;
} }

Binary file not shown.

View File

@ -2232,11 +2232,11 @@ I file e le cartelle di rete sono normalmente visibili alle applicazioni present
. .
3957;txt;01 3957;txt;01
Per impedire alle applicazioni presenti nell'area virtuale di accedere a file e cartelle di rete, è possibile attivare questa impostazione. I file e le cartelle di rete possono essere aperti singolarmente alle applicazioni dell'area virtuale, aggiungendoli sotto la sezione Accesso alle risorse -> Accesso ai file. Per impedire alle applicazioni presenti nell'area virtuale di accedere a file e cartelle di rete, è possibile attivare questa impostazione. I file e le cartelle di rete possono essere aperti per le applicazioni dell'area virtuale, aggiungendoli sotto Accesso alle risorse -> Accesso ai file.
. .
3958;txt;01 3958;txt;01
Blocca i file e le cartelle di rete, a meno che non vengano aperti singolarmente. Blocca i file e le cartelle di rete, a meno che non siano aperti individualmente.
. .
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------

View File

@ -70,6 +70,7 @@ CComboInputDialog::CComboInputDialog(QWidget *parent) :
{ {
setModal(true); setModal(true);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
d->combo->setFocus();
connect(d->buttonBox, SIGNAL(accepted()), SLOT(accept())); connect(d->buttonBox, SIGNAL(accepted()), SLOT(accept()));
connect(d->buttonBox, SIGNAL(rejected()), SLOT(reject())); connect(d->buttonBox, SIGNAL(rejected()), SLOT(reject()));
connect(d->buttonBox, SIGNAL(clicked(QAbstractButton*)), connect(d->buttonBox, SIGNAL(clicked(QAbstractButton*)),

View File

@ -29,7 +29,7 @@
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>SandboxiePlus Settings</string> <string>SandboxiePlus - Recovery</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>

View File

@ -85,6 +85,9 @@
<property name="text"> <property name="text">
<string>Use Dark Theme</string> <string>Use Dark Theme</string>
</property> </property>
<property name="tristate">
<bool>true</bool>
</property>
</widget> </widget>
</item> </item>
<item row="10" column="1"> <item row="10" column="1">

View File

@ -29,7 +29,7 @@
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>SandboxiePlus Settings</string> <string>SandboxiePlus - Snapshots</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>

View File

@ -91,7 +91,8 @@ QList<QVariant> CSbieModel::MakeBoxPath(const QVariant& Name, const QMap<QString
QString ParentID = FindParent(Name, Groups); QString ParentID = FindParent(Name, Groups);
QList<QVariant> Path; QList<QVariant> Path;
if (!ParentID.isEmpty() && ParentID != Name) if (!ParentID.isEmpty() && ParentID != Name
&& !Groups.value(CSbieModel__RemoveGroupMark(Name.toString())).contains(CSbieModel__RemoveGroupMark(ParentID)))
{ {
Path = MakeBoxPath(ParentID, Groups); Path = MakeBoxPath(ParentID, Groups);
Path.append(ParentID); Path.append(ParentID);

View File

@ -15,7 +15,6 @@
#include "Windows/RecoveryWindow.h" #include "Windows/RecoveryWindow.h"
#include <QtConcurrent> #include <QtConcurrent>
#include "../MiscHelpers/Common/SettingsWidgets.h" #include "../MiscHelpers/Common/SettingsWidgets.h"
#include "Windows/NewBoxWindow.h"
#include "Windows/OptionsWindow.h" #include "Windows/OptionsWindow.h"
#include <QProxyStyle> #include <QProxyStyle>
@ -99,8 +98,7 @@ CSandMan::CSandMan(QWidget *parent)
m_LanguageId = 1033; // lang en_us m_LanguageId = 1033; // lang en_us
LoadLanguage(); LoadLanguage();
if (theConf->GetBool("Options/DarkTheme", false)) SetUITheme();
SetDarkTheme(true);
m_bExit = false; m_bExit = false;
@ -1063,15 +1061,7 @@ void CSandMan::OnNotAuthorized(bool bLoginRequired, bool& bRetry)
void CSandMan::OnNewBox() void CSandMan::OnNewBox()
{ {
CNewBoxWindow NewBoxWindow(this); m_pBoxView->AddNewBox();
bool bAlwaysOnTop = theConf->GetBool("Options/AlwaysOnTop", false);
NewBoxWindow.setWindowFlag(Qt::WindowStaysOnTopHint, bAlwaysOnTop);
if (NewBoxWindow.exec() == 1)
{
theAPI->ReloadBoxes();
m_pBoxView->Refresh();
m_pBoxView->SelectBox(NewBoxWindow.m_Name);
}
} }
void CSandMan::OnEmptyAll() void CSandMan::OnEmptyAll()
@ -1319,7 +1309,7 @@ void CSandMan::OnSettings()
void CSandMan::UpdateSettings() void CSandMan::UpdateSettings()
{ {
SetDarkTheme(theConf->GetBool("Options/DarkTheme", false)); SetUITheme();
//m_pBoxView->UpdateRunMenu(); //m_pBoxView->UpdateRunMenu();
@ -1620,7 +1610,7 @@ void CSandMan::OnSysTray(QSystemTrayIcon::ActivationReason Reason)
NullifyTrigger = false; NullifyTrigger = false;
return; return;
} }
setWindowState(Qt::WindowActive); this->setWindowState((this->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
SetForegroundWindow(MainWndHandle); SetForegroundWindow(MainWndHandle);
} ); } );
} }
@ -1944,8 +1934,16 @@ void CSandMan::OnAbout()
QMessageBox::aboutQt(this); QMessageBox::aboutQt(this);
} }
void CSandMan::SetDarkTheme(bool bDark) void CSandMan::SetUITheme()
{ {
bool bDark;
int iDark = theConf->GetInt("Options/UseDarkTheme", 2);
if (iDark == 2) {
QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", QSettings::NativeFormat);
bDark = (settings.value("AppsUseLightTheme") == 0);
} else
bDark = (iDark == 1);
if (bDark) if (bDark)
{ {
QApplication::setStyle(QStyleFactory::create("Fusion")); QApplication::setStyle(QStyleFactory::create("Fusion"));
@ -1986,7 +1984,10 @@ void CSandMan::LoadLanguage()
m_Translation.clear(); m_Translation.clear();
m_LanguageId = 0; m_LanguageId = 0;
QString Lang = theConf->GetString("Options/Language"); QString Lang = theConf->GetString("Options/UiLanguage");
if(Lang.isEmpty())
Lang = QLocale::system().name();
if (!Lang.isEmpty()) if (!Lang.isEmpty())
{ {
m_LanguageId = LocaleNameToLCID(Lang.toStdWString().c_str(), 0); m_LanguageId = LocaleNameToLCID(Lang.toStdWString().c_str(), 0);

View File

@ -14,7 +14,7 @@
#define VERSION_MJR 0 #define VERSION_MJR 0
#define VERSION_MIN 6 #define VERSION_MIN 6
#define VERSION_REV 5 #define VERSION_REV 7
#define VERSION_UPD 0 #define VERSION_UPD 0
@ -235,7 +235,7 @@ private:
CProgressDialog* m_pProgressDialog; CProgressDialog* m_pProgressDialog;
CPopUpWindow* m_pPopUpWindow; CPopUpWindow* m_pPopUpWindow;
void SetDarkTheme(bool bDark); void SetUITheme();
QString m_DefaultStyle; QString m_DefaultStyle;
QPalette m_DefaultPalett; QPalette m_DefaultPalett;
@ -244,6 +244,7 @@ private:
QByteArray m_Translation; QByteArray m_Translation;
public: public:
quint32 m_LanguageId; quint32 m_LanguageId;
bool m_DarkTheme;
}; };
extern CSandMan* theGUI; extern CSandMan* theGUI;

View File

@ -39,6 +39,7 @@ win32:RC_FILE = SandMan.rc
TRANSLATIONS += sandman_de.ts \ TRANSLATIONS += sandman_de.ts \
sandman_pt.ts \ sandman_pt.ts \
sandman_ru.ts \ sandman_ru.ts \
sandman_pl.ts \
sandman_tr.ts \ sandman_tr.ts \
sandman_zh.ts \ sandman_zh.ts \
sandman_zh-TW.ts sandman_zh-TW.ts

View File

@ -259,6 +259,7 @@
<ItemGroup> <ItemGroup>
<None Include="Resources\finder.cur" /> <None Include="Resources\finder.cur" />
<None Include="sandman_de.ts" /> <None Include="sandman_de.ts" />
<None Include="sandman_pl.ts" />
<None Include="sandman_pt.ts" /> <None Include="sandman_pt.ts" />
<None Include="sandman_ru.ts" /> <None Include="sandman_ru.ts" />
<None Include="sandman_tr.ts" /> <None Include="sandman_tr.ts" />

View File

@ -222,6 +222,9 @@
<None Include="sandman_zh-TW.ts"> <None Include="sandman_zh-TW.ts">
<Filter>Translation Files</Filter> <Filter>Translation Files</Filter>
</None> </None>
<None Include="sandman_pl.ts">
<Filter>Translation Files</Filter>
</None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="SandMan.rc"> <ResourceCompile Include="SandMan.rc">

View File

@ -11,6 +11,7 @@
#include <QFileIconProvider> #include <QFileIconProvider>
#include "../../MiscHelpers/Common/CheckableMessageBox.h" #include "../../MiscHelpers/Common/CheckableMessageBox.h"
#include "../Windows/RecoveryWindow.h" #include "../Windows/RecoveryWindow.h"
#include "../Windows/NewBoxWindow.h"
#include "qt_windows.h" #include "qt_windows.h"
#include "qwindowdefs_win.h" #include "qwindowdefs_win.h"
@ -57,7 +58,7 @@ CSbieView::CSbieView(QWidget* parent) : CPanelView(parent)
connect(m_pSbieModel, SIGNAL(ToolTipCallback(const QVariant&, QString&)), this, SLOT(OnToolTipCallback(const QVariant&, QString&)), Qt::DirectConnection); connect(m_pSbieModel, SIGNAL(ToolTipCallback(const QVariant&, QString&)), this, SLOT(OnToolTipCallback(const QVariant&, QString&)), Qt::DirectConnection);
m_pNewBox = m_pMenu->addAction(CSandMan::GetIcon("NewBox"), tr("Create New Box"), theGUI, SLOT(OnNewBox())); m_pNewBox = m_pMenu->addAction(CSandMan::GetIcon("NewBox"), tr("Create New Box"), this, SLOT(OnGroupAction()));
m_pAddGroupe = m_pMenu->addAction(CSandMan::GetIcon("Group"), tr("Add Group"), this, SLOT(OnGroupAction())); m_pAddGroupe = m_pMenu->addAction(CSandMan::GetIcon("Group"), tr("Add Group"), this, SLOT(OnGroupAction()));
m_pDelGroupe = m_pMenu->addAction(CSandMan::GetIcon("Remove"), tr("Remove Group"), this, SLOT(OnGroupAction())); m_pDelGroupe = m_pMenu->addAction(CSandMan::GetIcon("Remove"), tr("Remove Group"), this, SLOT(OnGroupAction()));
m_iMenuTop = m_pMenu->actions().count(); m_iMenuTop = m_pMenu->actions().count();
@ -380,7 +381,22 @@ void CSbieView::OnGroupAction()
{ {
QAction* Action = qobject_cast<QAction*>(sender()); QAction* Action = qobject_cast<QAction*>(sender());
if (Action == m_pAddGroupe) if (Action == m_pNewBox)
{
QString Name = AddNewBox();
if (Name.isEmpty())
return;
QModelIndex ModelIndex = m_pSortProxy->mapToSource(m_pSbieTree->currentIndex());
QString Parent;
if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eGroup)
Parent = m_pSbieModel->GetID(ModelIndex).toString();
m_Groups[Parent].append(Name);
m_pSbieModel->Clear(); //todo improve that
}
else if (Action == m_pAddGroupe)
{ {
QString Name = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a new group name"), QLineEdit::Normal); QString Name = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a new group name"), QLineEdit::Normal);
if (Name.isEmpty() || m_Groups.contains(Name)) if (Name.isEmpty() || m_Groups.contains(Name))
@ -433,9 +449,15 @@ void CSbieView::OnGroupAction()
Name = m_pSbieModel->GetID(ModelIndex).toString(); Name = m_pSbieModel->GetID(ModelIndex).toString();
else if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eBox) else if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eBox)
Name = m_pSbieModel->GetSandBox(ModelIndex)->GetName(); Name = m_pSbieModel->GetSandBox(ModelIndex)->GetName();
if (Name.isEmpty() || Name == Group)
if (Name.isEmpty())
continue; continue;
if (Name == Group || m_Groups.value(Name).contains(Group)) {
QMessageBox("Sandboxie-Plus", tr("A group can not be its own parent."), QMessageBox::Critical, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton, this).exec();
continue;
}
// remove from old // remove from old
for (auto I = m_Groups.begin(); I != m_Groups.end(); ++I) for (auto I = m_Groups.begin(); I != m_Groups.end(); ++I)
I.value().removeAll(Name); I.value().removeAll(Name);
@ -452,6 +474,21 @@ void CSbieView::OnGroupAction()
UpdateGroupMenu(); UpdateGroupMenu();
} }
QString CSbieView::AddNewBox()
{
CNewBoxWindow NewBoxWindow(this);
bool bAlwaysOnTop = theConf->GetBool("Options/AlwaysOnTop", false);
NewBoxWindow.setWindowFlag(Qt::WindowStaysOnTopHint, bAlwaysOnTop);
if (NewBoxWindow.exec() == 1)
{
theAPI->ReloadBoxes();
Refresh();
SelectBox(NewBoxWindow.m_Name);
return NewBoxWindow.m_Name;
}
return QString();
}
void CSbieView::OnSandBoxAction() void CSbieView::OnSandBoxAction()
{ {
QList<SB_STATUS> Results; QList<SB_STATUS> Results;

View File

@ -17,6 +17,7 @@ public:
//virtual void UpdateRunMenu(); //virtual void UpdateRunMenu();
virtual QString AddNewBox();
virtual void SelectBox(const QString& Name); virtual void SelectBox(const QString& Name);
signals: signals:

View File

@ -16,7 +16,7 @@ public:
QSize s = QProxyStyle::sizeFromContents(type, option, size, widget); QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
if (type == QStyle::CT_TabBarTab) { if (type == QStyle::CT_TabBarTab) {
s.transpose(); s.transpose();
if(theConf->GetBool("Options/DarkTheme", false)) if(theGUI->m_DarkTheme)
s.setHeight(s.height() * 13 / 10); s.setHeight(s.height() * 13 / 10);
else else
s.setHeight(s.height() * 15 / 10); s.setHeight(s.height() * 15 / 10);
@ -368,11 +368,19 @@ void COptionsWindow::closeEvent(QCloseEvent *e)
bool COptionsWindow::eventFilter(QObject *source, QEvent *event) bool COptionsWindow::eventFilter(QObject *source, QEvent *event)
{ {
if (event->type() == QEvent::KeyPress && ((QKeyEvent*)event)->key() == Qt::Key_Escape && ((QKeyEvent*)event)->modifiers() == Qt::NoModifier) if (event->type() == QEvent::KeyPress && ((QKeyEvent*)event)->key() == Qt::Key_Escape
&& ((QKeyEvent*)event)->modifiers() == Qt::NoModifier)
{ {
CloseAccessEdit(false); CloseAccessEdit(false);
return true; // cancel event return true; // cancel event
} }
if (event->type() == QEvent::KeyPress && (((QKeyEvent*)event)->key() == Qt::Key_Enter || ((QKeyEvent*)event)->key() == Qt::Key_Return)
&& ((QKeyEvent*)event)->modifiers() == Qt::NoModifier)
{
CloseAccessEdit(true);
return true; // cancel event
}
if (source == ui.treeAccess->viewport() && event->type() == QEvent::MouseButtonPress) if (source == ui.treeAccess->viewport() && event->type() == QEvent::MouseButtonPress)
{ {
@ -996,9 +1004,10 @@ QString COptionsWindow::SelectProgram(bool bOrGroup)
if (!progDialog.exec()) if (!progDialog.exec())
return QString(); return QString();
QString Program = progDialog.value(); // Note: pressing enter adds the value to the combo list !
QString Program = progDialog.value();
int Index = progDialog.findValue(Program); int Index = progDialog.findValue(Program);
if (Index != -1) if (Index != -1 && progDialog.data().isValid())
Program = progDialog.data().toString(); Program = progDialog.data().toString();
return Program; return Program;

View File

@ -7,6 +7,26 @@
#include "../QSbieAPI/SbieUtils.h" #include "../QSbieAPI/SbieUtils.h"
int CSettingsWindow__Chk2Int(Qt::CheckState state)
{
switch (state) {
case Qt::Unchecked: return 0;
case Qt::Checked: return 1;
default:
case Qt::PartiallyChecked: return 2;
}
}
Qt::CheckState CSettingsWindow__Int2Chk(int state)
{
switch (state) {
case 0: return Qt::Unchecked;
case 1: return Qt::Checked;
default:
case 2: return Qt::PartiallyChecked;
}
}
CSettingsWindow::CSettingsWindow(QWidget *parent) CSettingsWindow::CSettingsWindow(QWidget *parent)
: QDialog(parent) : QDialog(parent)
{ {
@ -27,7 +47,8 @@ CSettingsWindow::CSettingsWindow(QWidget *parent)
ui.tabs->setCurrentIndex(0); ui.tabs->setCurrentIndex(0);
ui.uiLang->addItem("International English", ""); ui.uiLang->addItem(tr("Auto Detection"), "");
ui.uiLang->addItem("International English", "en");
QDir langDir(QApplication::applicationDirPath() + "/translations/"); QDir langDir(QApplication::applicationDirPath() + "/translations/");
foreach(const QString& langFile, langDir.entryList(QStringList("sandman_*.qm"), QDir::Files)) foreach(const QString& langFile, langDir.entryList(QStringList("sandman_*.qm"), QDir::Files))
{ {
@ -36,29 +57,20 @@ CSettingsWindow::CSettingsWindow(QWidget *parent)
QString Lang = Locale.nativeLanguageName(); QString Lang = Locale.nativeLanguageName();
ui.uiLang->addItem(Lang, Code); ui.uiLang->addItem(Lang, Code);
} }
ui.uiLang->setCurrentIndex(ui.uiLang->findData(theConf->GetString("Options/Language"))); ui.uiLang->setCurrentIndex(ui.uiLang->findData(theConf->GetString("Options/UiLanguage")));
ui.chkAutoStart->setChecked(IsAutorunEnabled()); ui.chkAutoStart->setChecked(IsAutorunEnabled());
ui.chkSvcStart->setChecked(theAPI->GetUserSettings()->GetBool("SbieCtrl_EnableAutoStart", true)); ui.chkSvcStart->setChecked(theAPI->GetUserSettings()->GetBool("SbieCtrl_EnableAutoStart", true));
switch (theConf->GetInt("Options/CheckForUpdates", 2)) { ui.chkAutoUpdate->setCheckState(CSettingsWindow__Int2Chk(theConf->GetInt("Options/CheckForUpdates", 2)));
case 0: ui.chkAutoUpdate->setCheckState(Qt::Unchecked); break;
case 1: ui.chkAutoUpdate->setCheckState(Qt::Checked); break;
case 2: ui.chkAutoUpdate->setCheckState(Qt::PartiallyChecked); break;
}
ui.chkShellMenu->setCheckState((Qt::CheckState)CSbieUtils::IsContextMenu()); ui.chkShellMenu->setCheckState((Qt::CheckState)CSbieUtils::IsContextMenu());
ui.chkDarkTheme->setChecked(theConf->GetBool("Options/DarkTheme", false)); ui.chkDarkTheme->setCheckState(CSettingsWindow__Int2Chk(theConf->GetInt("Options/UseDarkTheme", 2)));
ui.chkNotifications->setChecked(theConf->GetBool("Options/ShowNotifications", true)); ui.chkNotifications->setChecked(theConf->GetBool("Options/ShowNotifications", true));
switch (theConf->GetInt("Options/OpenUrlsSandboxed", 2)) { ui.chkSandboxUrls->setCheckState(CSettingsWindow__Int2Chk(theConf->GetInt("Options/OpenUrlsSandboxed", 2)));
case 0: ui.chkSandboxUrls->setCheckState(Qt::Unchecked); break;
case 1: ui.chkSandboxUrls->setCheckState(Qt::Checked); break;
case 2: ui.chkSandboxUrls->setCheckState(Qt::PartiallyChecked); break;
}
ui.chkShowRecovery->setChecked(theConf->GetBool("Options/ShowRecovery", false)); ui.chkShowRecovery->setChecked(theConf->GetBool("Options/ShowRecovery", false));
@ -177,18 +189,14 @@ void CSettingsWindow::closeEvent(QCloseEvent *e)
void CSettingsWindow::apply() void CSettingsWindow::apply()
{ {
theConf->SetValue("Options/Language", ui.uiLang->currentData()); theConf->SetValue("Options/UiLanguage", ui.uiLang->currentData());
theConf->SetValue("Options/DarkTheme", ui.chkDarkTheme->isChecked()); theConf->SetValue("Options/UseDarkTheme", CSettingsWindow__Chk2Int(ui.chkDarkTheme->checkState()));
AutorunEnable(ui.chkAutoStart->isChecked()); AutorunEnable(ui.chkAutoStart->isChecked());
theAPI->GetUserSettings()->SetBool("SbieCtrl_EnableAutoStart", ui.chkSvcStart->isChecked()); theAPI->GetUserSettings()->SetBool("SbieCtrl_EnableAutoStart", ui.chkSvcStart->isChecked());
switch (ui.chkAutoUpdate->checkState()) { theConf->SetValue("Options/CheckForUpdates", CSettingsWindow__Chk2Int(ui.chkAutoUpdate->checkState()));
case Qt::Unchecked: theConf->SetValue("Options/CheckForUpdates", 0); break;
case Qt::PartiallyChecked: theConf->SetValue("Options/CheckForUpdates", 2); break;
case Qt::Checked: theConf->SetValue("Options/CheckForUpdates", 1); break;
}
if (ui.chkShellMenu->checkState() != CSbieUtils::IsContextMenu()) if (ui.chkShellMenu->checkState() != CSbieUtils::IsContextMenu())
{ {
@ -200,11 +208,7 @@ void CSettingsWindow::apply()
theConf->SetValue("Options/ShowNotifications", ui.chkNotifications->isChecked()); theConf->SetValue("Options/ShowNotifications", ui.chkNotifications->isChecked());
switch (ui.chkSandboxUrls->checkState()) { theConf->SetValue("Options/OpenUrlsSandboxed", CSettingsWindow__Chk2Int(ui.chkSandboxUrls->checkState()));
case Qt::Unchecked: theConf->SetValue("Options/OpenUrlsSandboxed", 0); break;
case Qt::PartiallyChecked: theConf->SetValue("Options/OpenUrlsSandboxed", 2); break;
case Qt::Checked: theConf->SetValue("Options/OpenUrlsSandboxed", 1); break;
}
theConf->SetValue("Options/ShowRecovery", ui.chkShowRecovery->isChecked()); theConf->SetValue("Options/ShowRecovery", ui.chkShowRecovery->isChecked());

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1430,6 +1430,10 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<source>This Sandbox is empty.</source> <source>This Sandbox is empty.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSettingsWindow</name> <name>CSettingsWindow</name>
@ -1477,6 +1481,10 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<source>Passwords did not match, please retry.</source> <source>Passwords did not match, please retry.</source>
<translation>Пароли не совпадают, повторите попытку.</translation> <translation>Пароли не совпадают, повторите попытку.</translation>
</message> </message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSnapshotsWindow</name> <name>CSnapshotsWindow</name>
@ -2125,7 +2133,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>Настройки SandboxiePlus</translation> <translation type="vanished">Настройки SandboxiePlus</translation>
</message> </message>
<message> <message>
<source>Add Folder</source> <source>Add Folder</source>
@ -2155,6 +2163,10 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
<source>TextLabel</source> <source>TextLabel</source>
<translation>Текстовая метка</translation> <translation>Текстовая метка</translation>
</message> </message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
@ -2347,7 +2359,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>Настройки SandboxiePlus</translation> <translation type="vanished">Настройки SandboxiePlus</translation>
</message> </message>
<message> <message>
<source>Description:</source> <source>Description:</source>
@ -2369,5 +2381,9 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
<source>Snapshot Actions</source> <source>Snapshot Actions</source>
<translation>Действия со снимками</translation> <translation>Действия со снимками</translation>
</message> </message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View File

@ -1446,6 +1446,10 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<source>This sandbox is disabled, do you want to enable it?</source> <source>This sandbox is disabled, do you want to enable it?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSettingsWindow</name> <name>CSettingsWindow</name>
@ -1493,6 +1497,10 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<source>Passwords did not match, please retry.</source> <source>Passwords did not match, please retry.</source>
<translation>Parolalar eşleşmedi, lütfen tekrar deneyin.</translation> <translation>Parolalar eşleşmedi, lütfen tekrar deneyin.</translation>
</message> </message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSnapshotsWindow</name> <name>CSnapshotsWindow</name>
@ -2145,7 +2153,7 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>SandboxiePlus Ayarları</translation> <translation type="vanished">SandboxiePlus Ayarları</translation>
</message> </message>
<message> <message>
<source>Add Folder</source> <source>Add Folder</source>
@ -2175,6 +2183,10 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
<source>TextLabel</source> <source>TextLabel</source>
<translation>Metin Etiketi</translation> <translation>Metin Etiketi</translation>
</message> </message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
@ -2367,7 +2379,7 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>SandboxiePlus Ayarları</translation> <translation type="vanished">SandboxiePlus Ayarları</translation>
</message> </message>
<message> <message>
<source>Description:</source> <source>Description:</source>
@ -2389,5 +2401,9 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
<source>Snapshot Actions</source> <source>Snapshot Actions</source>
<translation>Anlık Görüntü Eylemleri</translation> <translation>Anlık Görüntü Eylemleri</translation>
</message> </message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View File

@ -31,7 +31,7 @@
<name>CNewBoxWindow</name> <name>CNewBoxWindow</name>
<message> <message>
<source>New Box</source> <source>New Box</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Hardened</source> <source>Hardened</source>
@ -43,11 +43,11 @@
</message> </message>
<message> <message>
<source>Legacy (old sbie behaviour)</source> <source>Legacy (old sbie behaviour)</source>
<translation type="vanished"> ()</translation> <translation type="vanished"> ( Sbie )</translation>
</message> </message>
<message> <message>
<source>Sandboxie-Plus - Create New Box</source> <source>Sandboxie-Plus - Create New Box</source>
<translation>Sandboxie-Plus - </translation> <translation>Sandboxie-Plus - </translation>
</message> </message>
<message> <message>
<source>Legacy Sandboxie Behaviour</source> <source>Legacy Sandboxie Behaviour</source>
@ -94,7 +94,7 @@
</message> </message>
<message> <message>
<source>Display box name in title</source> <source>Display box name in title</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Folder</source> <source>Folder</source>
@ -122,7 +122,7 @@
</message> </message>
<message> <message>
<source>COM objects must be specified by their GUID, like: {00000000-0000-0000-0000-000000000000}</source> <source>COM objects must be specified by their GUID, like: {00000000-0000-0000-0000-000000000000}</source>
<translation>COM GUID : {00000000-0000-0000-0000-000000000000}</translation> <translation>COM GUID : {00000000-0000-0000-0000-000000000000}</translation>
</message> </message>
<message> <message>
<source>%1 (%2)</source> <source>%1 (%2)</source>
@ -198,7 +198,7 @@
</message> </message>
<message> <message>
<source>RT interfaces must be specified by their name.</source> <source>RT interfaces must be specified by their name.</source>
<translation>RT </translation> <translation>RT </translation>
</message> </message>
<message> <message>
<source>Browse for Program</source> <source>Browse for Program</source>
@ -206,7 +206,7 @@
</message> </message>
<message> <message>
<source>Please enter a program path</source> <source>Please enter a program path</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Please enter a service identifier</source> <source>Please enter a service identifier</source>
@ -226,7 +226,7 @@
</message> </message>
<message> <message>
<source>This sandbox has been deleted hence configuration can not be saved.</source> <source>This sandbox has been deleted hence configuration can not be saved.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Some changes haven&apos;t been saved yet, do you really want to close this options window?</source> <source>Some changes haven&apos;t been saved yet, do you really want to close this options window?</source>
@ -238,43 +238,43 @@
</message> </message>
<message> <message>
<source>Direct</source> <source>Direct</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Direct All</source> <source>Direct All</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Closed</source> <source>Closed</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Closed RT</source> <source>Closed RT</source>
<translation type="unfinished"></translation> <translation> RT</translation>
</message> </message>
<message> <message>
<source>Read Only</source> <source>Read Only</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Hidden</source> <source>Hidden</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Unknown</source> <source>Unknown</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>File/Folder</source> <source>File/Folder</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Registry</source> <source>Registry</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
<message> <message>
<source>IPC Path</source> <source>IPC Path</source>
<translation type="unfinished"></translation> <translation>IPC </translation>
</message> </message>
<message> <message>
<source>Wnd Class</source> <source>Wnd Class</source>
@ -282,7 +282,7 @@
</message> </message>
<message> <message>
<source>COM Object</source> <source>COM Object</source>
<translation type="unfinished"></translation> <translation>COM </translation>
</message> </message>
</context> </context>
<context> <context>
@ -358,7 +358,7 @@
<name>CPopUpRecovery</name> <name>CPopUpRecovery</name>
<message> <message>
<source>Recover to:</source> <source>Recover to:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Browse</source> <source>Browse</source>
@ -386,7 +386,7 @@
</message> </message>
<message> <message>
<source>Open file recovery for this box</source> <source>Open file recovery for this box</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Dismiss</source> <source>Dismiss</source>
@ -398,11 +398,11 @@
</message> </message>
<message> <message>
<source>Dismiss all from this box</source> <source>Dismiss all from this box</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Disable quick recovery until the box restarts</source> <source>Disable quick recovery until the box restarts</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Select Directory</source> <source>Select Directory</source>
@ -429,12 +429,12 @@
</message> </message>
<message> <message>
<source>Do you want to allow the print spooler to write outside the sandbox for %1 (%2)?</source> <source>Do you want to allow the print spooler to write outside the sandbox for %1 (%2)?</source>
<translation> %1 (%2) </translation> <translation> %1 (%2) </translation>
</message> </message>
<message> <message>
<source>Do you want to allow %4 (%5) to copy a %1 large file into sandbox: %2? <source>Do you want to allow %4 (%5) to copy a %1 large file into sandbox: %2?
File name: %3</source> File name: %3</source>
<translation type="vanished"> %4 (%5) %1 : %2 <translation type="vanished"> %4 (%5) %1 : %2
: %3</translation> : %3</translation>
</message> </message>
<message> <message>
@ -452,7 +452,7 @@ The file was written by: %3</source>
<message> <message>
<source>Migrating a large file %1 into the sandbox %2, %3 left. <source>Migrating a large file %1 into the sandbox %2, %3 left.
Full path: %4</source> Full path: %4</source>
<translation type="vanished"> %1 %2%3 <translation type="vanished"> %1 %2%3
: %4</translation> : %4</translation>
</message> </message>
<message> <message>
@ -504,7 +504,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>There are %1 files and %2 folders in the sandbox, occupying %3 bytes of disk space.</source> <source>There are %1 files and %2 folders in the sandbox, occupying %3 bytes of disk space.</source>
<translation> %1 %2 %3 </translation> <translation> %1 %2 %3 </translation>
</message> </message>
</context> </context>
<context> <context>
@ -581,7 +581,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>&lt;p&gt;New Sandboxie-Plus has been downloaded to the following location:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;%2&quot;&gt;%1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Do you want to begin the installation? If any programs are running sandboxed, they will be terminated.&lt;/p&gt;</source> <source>&lt;p&gt;New Sandboxie-Plus has been downloaded to the following location:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;%2&quot;&gt;%1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Do you want to begin the installation? If any programs are running sandboxed, they will be terminated.&lt;/p&gt;</source>
<translation>&lt;p&gt; Sandboxie-Plus :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;%2&quot;&gt;%1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</translation> <translation>&lt;p&gt; Sandboxie-Plus :&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;%2&quot;&gt;%1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</translation>
</message> </message>
<message> <message>
<source>Sandboxie-Plus was started in portable mode and it needs to create necessary services. This will prompt for administrative privileges.</source> <source>Sandboxie-Plus was started in portable mode and it needs to create necessary services. This will prompt for administrative privileges.</source>
@ -605,7 +605,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Error deleting sandbox folder: %1</source> <source>Error deleting sandbox folder: %1</source>
<translation>: %1</translation> <translation>: %1</translation>
</message> </message>
<message> <message>
<source>About Sandboxie-Plus</source> <source>About Sandboxie-Plus</source>
@ -641,7 +641,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Failed to copy configuration from sandbox %1: %2</source> <source>Failed to copy configuration from sandbox %1: %2</source>
<translation> %1: %2 </translation> <translation> %1: %2 </translation>
</message> </message>
<message> <message>
<source>Do you want to check if there is a new version of Sandboxie-Plus?</source> <source>Do you want to check if there is a new version of Sandboxie-Plus?</source>
@ -729,7 +729,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>The sandbox name can not be longer than 32 characters.</source> <source>The sandbox name can not be longer than 32 characters.</source>
<translation>32</translation> <translation>32</translation>
</message> </message>
<message> <message>
<source>Stop Driver</source> <source>Stop Driver</source>
@ -811,7 +811,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Do you want to open %1 in a sandboxed (yes) or unsandboxed (no) Web browser?</source> <source>Do you want to open %1 in a sandboxed (yes) or unsandboxed (no) Web browser?</source>
<translation> () () %1 </translation> <translation> () () %1 </translation>
</message> </message>
<message> <message>
<source>Reset all hidden messages</source> <source>Reset all hidden messages</source>
@ -819,15 +819,15 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>A sandbox must be emptied before it can be deleted.</source> <source>A sandbox must be emptied before it can be deleted.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>The sandbox name can contain only letters, digits and underscores which are displayed as spaces.</source> <source>The sandbox name can contain only letters, digits and underscores which are displayed as spaces.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>A sandbox must be emptied before it can be renamed.</source> <source>A sandbox must be emptied before it can be renamed.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>API Call Logging</source> <source>API Call Logging</source>
@ -851,7 +851,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>The sandbox name can not be a device name.</source> <source>The sandbox name can not be a device name.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Operation failed for %1 item(s).</source> <source>Operation failed for %1 item(s).</source>
@ -867,7 +867,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>&amp;Sandbox</source> <source>&amp;Sandbox</source>
<translation>&amp;</translation> <translation>&amp;</translation>
</message> </message>
<message> <message>
<source>&lt;h3&gt;About Sandboxie-Plus&lt;/h3&gt;&lt;p&gt;Version %1&lt;/p&gt;&lt;p&gt;Copyright (c) 2020-2021 by DavidXanatos&lt;/p&gt;</source> <source>&lt;h3&gt;About Sandboxie-Plus&lt;/h3&gt;&lt;p&gt;Version %1&lt;/p&gt;&lt;p&gt;Copyright (c) 2020-2021 by DavidXanatos&lt;/p&gt;</source>
@ -915,7 +915,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Delete protection is enabled for the sandbox</source> <source>Delete protection is enabled for the sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>&amp;Advanced</source> <source>&amp;Advanced</source>
@ -943,7 +943,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Create New Box</source> <source>Create New Box</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Failed to copy RegHive</source> <source>Failed to copy RegHive</source>
@ -959,7 +959,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Failed to delete sandbox %1: %2</source> <source>Failed to delete sandbox %1: %2</source>
<translation> %1: %2 </translation> <translation> %1: %2 </translation>
</message> </message>
<message> <message>
<source>&lt;p&gt;Do you want to go to the &lt;a href=&quot;%1&quot;&gt;download page&lt;/a&gt;?&lt;/p&gt;</source> <source>&lt;p&gt;Do you want to go to the &lt;a href=&quot;%1&quot;&gt;download page&lt;/a&gt;?&lt;/p&gt;</source>
@ -1007,7 +1007,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>This Snapshot operation can not be performed while processes are still running in the box.</source> <source>This Snapshot operation can not be performed while processes are still running in the box.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>server not reachable</source> <source>server not reachable</source>
@ -1027,7 +1027,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>No sandboxes found; creating: %1</source> <source>No sandboxes found; creating: %1</source>
<translation type="vanished">: %1</translation> <translation type="vanished">: %1</translation>
</message> </message>
<message> <message>
<source>Cleanup Resource Log</source> <source>Cleanup Resource Log</source>
@ -1047,7 +1047,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>A sandbox of the name %1 already exists</source> <source>A sandbox of the name %1 already exists</source>
<translation> %1 </translation> <translation> %1 </translation>
</message> </message>
<message> <message>
<source>Failed to set configuration setting %1 in section %2: %3</source> <source>Failed to set configuration setting %1 in section %2: %3</source>
@ -1075,7 +1075,7 @@ Full path: %4</source>
</message> </message>
<message> <message>
<source>Sandboxie-Plus was started in portable mode, do you want to put the SandBox folder into its parent directory?</source> <source>Sandboxie-Plus was started in portable mode, do you want to put the SandBox folder into its parent directory?</source>
<translation>Sandboxie-Plus 便</translation> <translation>Sandboxie-Plus 便</translation>
</message> </message>
<message> <message>
<source>The file %1 already exists, do you want to overwrite it?</source> <source>The file %1 already exists, do you want to overwrite it?</source>
@ -1088,8 +1088,8 @@ Full path: %4</source>
<message> <message>
<source>To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sandboxes. <source>To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sandboxes.
Please download the latest release and set it up with the Sandboxie.ini as instructed in the README.md of the project.</source> Please download the latest release and set it up with the Sandboxie.ini as instructed in the README.md of the project.</source>
<translation>使API記錄日誌首先必須從 https://github.com/sandboxie-plus/LogApiDll 下載 LogApiDll使用沙盒建立 <translation>使 API https://github.com/sandboxie-plus/LogApiDll 下載 LogApiDll為一個或更多沙盤設定
使 sandboxie.ini README.md </translation> 使 sandboxie.ini README.md </translation>
</message> </message>
<message> <message>
<source>No new updates found, your Sandboxie-Plus is up-to-date.</source> <source>No new updates found, your Sandboxie-Plus is up-to-date.</source>
@ -1105,11 +1105,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Sellect box:</source> <source>Sellect box:</source>
<translation type="vanished">:</translation> <translation type="vanished">:</translation>
</message> </message>
<message> <message>
<source>Some compatybility templates (%1) are missing, probably deleted, do you want to remove them from all boxes?</source> <source>Some compatybility templates (%1) are missing, probably deleted, do you want to remove them from all boxes?</source>
<translation type="vanished"> (%1) </translation> <translation type="vanished"> (%1) </translation>
</message> </message>
<message> <message>
<source>Cleaned up removed templates...</source> <source>Cleaned up removed templates...</source>
@ -1117,11 +1117,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Can not create snapshot of an empty sandbox</source> <source>Can not create snapshot of an empty sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>A sandbox with that name already exists</source> <source>A sandbox with that name already exists</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Reset Columns</source> <source>Reset Columns</source>
@ -1133,19 +1133,19 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Show Hidden Boxes</source> <source>Show Hidden Boxes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Select box:</source> <source>Select box:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Some compatibility templates (%1) are missing, probably deleted, do you want to remove them from all boxes?</source> <source>Some compatibility templates (%1) are missing, probably deleted, do you want to remove them from all boxes?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Do you want to terminate all processes in all sandboxes?</source> <source>Do you want to terminate all processes in all sandboxes?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Terminate all without asking</source> <source>Terminate all without asking</source>
@ -1153,15 +1153,15 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>The selected window is running as part of program %1 in sandbox %2</source> <source>The selected window is running as part of program %1 in sandbox %2</source>
<translation> %2 %1 </translation> <translation> %2 %1 </translation>
</message> </message>
<message> <message>
<source>The selected window is not running as part of any sandboxed program.</source> <source>The selected window is not running as part of any sandboxed program.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Drag the Finder Tool over a window to select it, then release the mouse to check if the window is sandboxed.</source> <source>Drag the Finder Tool over a window to select it, then release the mouse to check if the window is sandboxed.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Sandboxie-Plus - Window Finder</source> <source>Sandboxie-Plus - Window Finder</source>
@ -1188,7 +1188,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Box Groupe</source> <source>Box Groupe</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Status</source> <source>Status</source>
@ -1230,7 +1230,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Create Shortcut to sandbox %1</source> <source>Create Shortcut to sandbox %1</source>
<translation> %1 </translation> <translation> %1 </translation>
</message> </message>
<message> <message>
<source>Options: <source>Options:
@ -1252,11 +1252,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Sandbox Options</source> <source>Sandbox Options</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Sandbox Presets</source> <source>Sandbox Presets</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Do you want to %1 the selected process(es)</source> <source>Do you want to %1 the selected process(es)</source>
@ -1268,11 +1268,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Remove Sandbox</source> <source>Remove Sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Rename Sandbox</source> <source>Rename Sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Run from Start Menu</source> <source>Run from Start Menu</source>
@ -1296,7 +1296,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Please enter a new name for the Sandbox.</source> <source>Please enter a new name for the Sandbox.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Group</source> <source>Add Group</source>
@ -1312,7 +1312,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Do you really want to remove the selected sandbox(es)?</source> <source>Do you really want to remove the selected sandbox(es)?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Run Program</source> <source>Run Program</source>
@ -1362,7 +1362,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Force into this sandbox</source> <source>Force into this sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Allow Network Shares</source> <source>Allow Network Shares</source>
@ -1390,7 +1390,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Create New Box</source> <source>Create New Box</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Pin to Run Menu</source> <source>Pin to Run Menu</source>
@ -1402,7 +1402,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>This box does not have Internet restrictions in place, do you want to enable them?</source> <source>This box does not have Internet restrictions in place, do you want to enable them?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Explore Content</source> <source>Explore Content</source>
@ -1418,28 +1418,32 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>This Sandbox is already empty.</source> <source>This Sandbox is already empty.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Do you want to delete the content of the selected sandbox?</source> <source>Do you want to delete the content of the selected sandbox?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Do you really want to delete the content of multiple sandboxes?</source> <source>Do you really want to delete the content of multiple sandboxes?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Do you want to terminate all processes in the selected sandbox(es)?</source> <source>Do you want to terminate all processes in the selected sandbox(es)?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>This sandbox is disabled, do you want to enable it?</source> <source>This sandbox is disabled, do you want to enable it?</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>This Sandbox is empty.</source> <source>This Sandbox is empty.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSettingsWindow</name> <name>CSettingsWindow</name>
@ -1487,6 +1491,10 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<source>Passwords did not match, please retry.</source> <source>Passwords did not match, please retry.</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>CSnapshotsWindow</name> <name>CSnapshotsWindow</name>
@ -1519,11 +1527,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
<name>NewBoxWindow</name> <name>NewBoxWindow</name>
<message> <message>
<source>Copy options from an existing box:</source> <source>Copy options from an existing box:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Initial sandbox configuration:</source> <source>Initial sandbox configuration:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Select restriction/isolation template:</source> <source>Select restriction/isolation template:</source>
@ -1531,15 +1539,15 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>SandboxiePlus new box</source> <source>SandboxiePlus new box</source>
<translation>SandboxiePlus </translation> <translation>SandboxiePlus </translation>
</message> </message>
<message> <message>
<source>Enter a name for the new box:</source> <source>Enter a name for the new box:</source>
<translation type="vanished">:</translation> <translation type="vanished">:</translation>
</message> </message>
<message> <message>
<source>Sandbox Name:</source> <source>Sandbox Name:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1562,7 +1570,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Allow only selected programs to start in this sandbox. *</source> <source>Allow only selected programs to start in this sandbox. *</source>
<translation> *</translation> <translation> *</translation>
</message> </message>
<message> <message>
<source>Force Folder</source> <source>Force Folder</source>
@ -1574,7 +1582,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Sandbox Indicator in title:</source> <source>Sandbox Indicator in title:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Debug</source> <source>Debug</source>
@ -1586,7 +1594,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>&lt;- for this one the above does not apply</source> <source>&lt;- for this one the above does not apply</source>
<translation>&lt;- </translation> <translation>&lt;- </translation>
</message> </message>
<message> <message>
<source>Block network files and folders, unless specifically opened.</source> <source>Block network files and folders, unless specifically opened.</source>
@ -1598,7 +1606,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message> </message>
<message> <message>
<source>Don&apos;t alter window class names created by sandboxed programs</source> <source>Don&apos;t alter window class names created by sandboxed programs</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Prevent change to network and firewall parameters</source> <source>Prevent change to network and firewall parameters</source>
@ -1614,13 +1622,13 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
Note that all Close...=!&lt;program&gt;,... exclusions have the same limitations. Note that all Close...=!&lt;program&gt;,... exclusions have the same limitations.
For files access you can use &apos;Direct All&apos; instead to make it apply to all programs.</source> For files access you can use &apos;Direct All&apos; instead to make it apply to all programs.</source>
<translation> <translation>
&apos;&apos; &apos;&apos;
...=!&lt;&gt;,... ...=!&lt;&gt;,...
使 &apos;&apos; 使</translation> 使 &apos;&apos; 使</translation>
</message> </message>
<message> <message>
<source>Log Debug Output to the Trace Log</source> <source>Log Debug Output to the Trace Log</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Forced Programs</source> <source>Forced Programs</source>
@ -1660,7 +1668,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Allow all programs to start in this sandbox.</source> <source>Allow all programs to start in this sandbox.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Enable Immediate Recovery prompt to be able to recover files as soon as thay are created.</source> <source>Enable Immediate Recovery prompt to be able to recover files as soon as thay are created.</source>
@ -1696,7 +1704,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Protect the sandbox integrity itself</source> <source>Protect the sandbox integrity itself</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Folder</source> <source>Add Folder</source>
@ -1728,7 +1736,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Issue message 1307 when a program is denied internet access</source> <source>Issue message 1307 when a program is denied internet access</source>
<translation>1307</translation> <translation> 1307 </translation>
</message> </message>
<message> <message>
<source>Compatibility</source> <source>Compatibility</source>
@ -1740,15 +1748,15 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Note: Programs installed to this sandbox won&apos;t be able to access the internet at all.</source> <source>Note: Programs installed to this sandbox won&apos;t be able to access the internet at all.</source>
<translation>注意: 安裝在此沙裡的程式將完全無法訪問網路</translation> <translation>注意: 安裝在此沙裡的程式將完全無法訪問網路</translation>
</message> </message>
<message> <message>
<source>Box Options</source> <source>Box Options</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Don&apos;t allow sandboxed processes to see processes running in other boxes</source> <source>Don&apos;t allow sandboxed processes to see processes running in other boxes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Group</source> <source>Add Group</source>
@ -1756,11 +1764,11 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Sandboxed window border:</source> <source>Sandboxed window border:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message> <message>
<source>Prevent selected programs from starting in this sandbox.</source> <source>Prevent selected programs from starting in this sandbox.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Miscellaneous</source> <source>Miscellaneous</source>
@ -1768,7 +1776,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Issue message 2102 when a file is too large</source> <source>Issue message 2102 when a file is too large</source>
<translation> 2102</translation> <translation> 2102 </translation>
</message> </message>
<message> <message>
<source>File Recovery</source> <source>File Recovery</source>
@ -1776,7 +1784,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Box Delete options</source> <source>Box Delete options</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Pipe Trace</source> <source>Pipe Trace</source>
@ -1812,7 +1820,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Protect the system from sandboxed processes</source> <source>Protect the system from sandboxed processes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Leader Program</source> <source>Add Leader Program</source>
@ -1836,7 +1844,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Sandbox protection</source> <source>Sandbox protection</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>You can group programs together and give them a group name. Program groups can be used with some of the settings instead of program names.</source> <source>You can group programs together and give them a group name. Program groups can be used with some of the settings instead of program names.</source>
@ -1844,7 +1852,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes</source> <source>Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>COM Class Trace</source> <source>COM Class Trace</source>
@ -1860,11 +1868,11 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>When the Quick Recovery function is invoked, the following folders will be checked for sandboxed content. </source> <source>When the Quick Recovery function is invoked, the following folders will be checked for sandboxed content. </source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>px Width</source> <source>px Width</source>
<translation>px </translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add User</source> <source>Add User</source>
@ -1872,7 +1880,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Programs entered here, or programs started from entered locations, will be put in this sandbox automatically, unless thay are explicitly started in another sandbox.</source> <source>Programs entered here, or programs started from entered locations, will be put in this sandbox automatically, unless thay are explicitly started in another sandbox.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Force Program</source> <source>Force Program</source>
@ -1880,7 +1888,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>WARNING, these options can disable core security guarantees and break sandbox security!!!</source> <source>WARNING, these options can disable core security guarantees and break sandbox security!!!</source>
<translation>使!!!</translation> <translation>使!!!</translation>
</message> </message>
<message> <message>
<source>Edit ini</source> <source>Edit ini</source>
@ -1912,7 +1920,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Add sandboxed processes to job objects (recommended)</source> <source>Add sandboxed processes to job objects (recommended)</source>
<translation>()</translation> <translation>()</translation>
</message> </message>
<message> <message>
<source>Remove Program</source> <source>Remove Program</source>
@ -1944,23 +1952,23 @@ If leader processes are defined, all others are treated as lingering processes.<
</message> </message>
<message> <message>
<source>Protect this sandbox from deletion or emptying</source> <source>Protect this sandbox from deletion or emptying</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add user accounts and user groups to the list below to limit use of the sandbox to only those accounts. If the list is empty, the sandbox can be used by all user accounts. <source>Add user accounts and user groups to the list below to limit use of the sandbox to only those accounts. If the list is empty, the sandbox can be used by all user accounts.
Note: Forced Programs and Force Folders settings for a sandbox do not apply to user accounts which cannot use the sandbox.</source> Note: Forced Programs and Force Folders settings for a sandbox do not apply to user accounts which cannot use the sandbox.</source>
<translation>使使使使 <translation>使使使使
注意: 盒的強制執行程式和強制執行資料夾設定不接受不能執行沙盒的賬戶</translation> 注意: 盤的強制執行程式和強制執行資料夾設定不接受不能執行沙盤的賬戶</translation>
</message> </message>
<message> <message>
<source>* Note: Programs installed to this sandbox won&apos;t be able to start at all.</source> <source>* Note: Programs installed to this sandbox won&apos;t be able to start at all.</source>
<translation>* 注意: 安裝在此沙盒裡的程式將完全無法啟動</translation> <translation>* 注意: 安裝至此沙盤裡的程式將完全無法啟動</translation>
</message> </message>
<message> <message>
<source>This list contains a large amount of sandbox compatibility enhancing templates</source> <source>This list contains a large amount of sandbox compatibility enhancing templates</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add Lingering Program</source> <source>Add Lingering Program</source>
@ -1972,7 +1980,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Issue message 1308 when a program fails to start</source> <source>Issue message 1308 when a program fails to start</source>
<translation> 1308</translation> <translation> 1308 </translation>
</message> </message>
<message> <message>
<source>Resource Access</source> <source>Resource Access</source>
@ -1984,7 +1992,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Hide host processes from processes running in the sandbox.</source> <source>Hide host processes from processes running in the sandbox.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>File Migration</source> <source>File Migration</source>
@ -1992,7 +2000,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Auto delete content when last sandboxed process terminates</source> <source>Auto delete content when last sandboxed process terminates</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add COM Object</source> <source>Add COM Object</source>
@ -2000,7 +2008,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>You can configure custom entries for the sandbox run menu.</source> <source>You can configure custom entries for the sandbox run menu.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Start Restrictions</source> <source>Start Restrictions</source>
@ -2012,7 +2020,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Edit ini Section</source> <source>Edit ini Section</source>
<translation> ini </translation> <translation> ini </translation>
</message> </message>
<message> <message>
<source>Block access to the printer spooler</source> <source>Block access to the printer spooler</source>
@ -2020,7 +2028,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Allow the print spooler to print to files outside the sandbox</source> <source>Allow the print spooler to print to files outside the sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Printing</source> <source>Printing</source>
@ -2028,7 +2036,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Remove spooler restriction, printers can be installed outside the sandbox</source> <source>Remove spooler restriction, printers can be installed outside the sandbox</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add program</source> <source>Add program</source>
@ -2040,7 +2048,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Here you can specify programs and/or services that are to be started automatically in the sandbox when it is activated</source> <source>Here you can specify programs and/or services that are to be started automatically in the sandbox when it is activated</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Add service</source> <source>Add service</source>
@ -2048,7 +2056,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Do not start sandboxed services using a system token (recommended)</source> <source>Do not start sandboxed services using a system token (recommended)</source>
<translation>使 ()</translation> <translation>使 ()</translation>
</message> </message>
<message> <message>
<source>Allow access to Smart Cards</source> <source>Allow access to Smart Cards</source>
@ -2060,7 +2068,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Sandbox isolation</source> <source>Sandbox isolation</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Auto Exec</source> <source>Auto Exec</source>
@ -2068,7 +2076,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message> </message>
<message> <message>
<source>Here you can specify a list of commands that are executed every time the sandbox is initially populated.</source> <source>Here you can specify a list of commands that are executed every time the sandbox is initially populated.</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Log all access events as seen by the driver to the resource access log. <source>Log all access events as seen by the driver to the resource access log.
@ -2079,18 +2087,18 @@ You can customize the logging using the ini by specifying
&quot;D&quot; - Denied accesses &quot;D&quot; - Denied accesses
&quot;I&quot; - Ignore access requests &quot;I&quot; - Ignore access requests
instead of &quot;*&quot;.</source> instead of &quot;*&quot;.</source>
<translation> <translation>
&quot;*&quot; - &quot;*&quot; -
ini ini
&quot;A&quot; - &quot;A&quot; -
&quot;D&quot; - &quot;D&quot; -
&quot;I&quot; - &quot;I&quot; -
&quot;*&quot;.</translation> &quot;*&quot;.</translation>
</message> </message>
<message> <message>
<source>Allow access to Bluetooth</source> <source>Allow access to Bluetooth</source>
<translation type="unfinished"></translation> <translation></translation>
</message> </message>
</context> </context>
<context> <context>
@ -2138,7 +2146,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>SandboxiePlus </translation> <translation type="vanished">SandboxiePlus </translation>
</message> </message>
<message> <message>
<source>Add Folder</source> <source>Add Folder</source>
@ -2168,6 +2176,10 @@ instead of &quot;*&quot;.</source>
<source>TextLabel</source> <source>TextLabel</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>SettingsWindow</name> <name>SettingsWindow</name>
@ -2177,7 +2189,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Path</source> <source>Path</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Change Password</source> <source>Change Password</source>
@ -2237,7 +2249,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Sandbox &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;registry root&lt;/a&gt;: </source> <source>Sandbox &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;registry root&lt;/a&gt;: </source>
<translation> &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;登錄檔根目錄&lt;/a&gt;: </translation> <translation> &lt;a href=&quot;sbie://docs/keyrootpath&quot;&gt;登錄檔根目錄&lt;/a&gt;: </translation>
</message> </message>
<message> <message>
<source>Add Program</source> <source>Add Program</source>
@ -2245,19 +2257,19 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Sandboxie has detected the following software applications in your system. Click OK to apply configuration settings, which will improve compatibility with these applications. These configuration settings will have effect in all existing sandboxes and in any new sandboxes.</source> <source>Sandboxie has detected the following software applications in your system. Click OK to apply configuration settings, which will improve compatibility with these applications. These configuration settings will have effect in all existing sandboxes and in any new sandboxes.</source>
<translation>Sandboxie . </translation> <translation>Sandboxie . OK </translation>
</message> </message>
<message> <message>
<source>Watch Sandboxie.ini for changes</source> <source>Watch Sandboxie.ini for changes</source>
<translation> Sandboxie.ini </translation> <translation> Sandboxie.ini </translation>
</message> </message>
<message> <message>
<source>Show Sys-Tray</source> <source>Show Sys-Tray</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Open urls from this ui sandboxed</source> <source>Open urls from this ui sandboxed</source>
<translation>使</translation> <translation> UI </translation>
</message> </message>
<message> <message>
<source>In the future, don&apos;t check software compatibility</source> <source>In the future, don&apos;t check software compatibility</source>
@ -2269,7 +2281,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>When any of the following programs is launched outside any sandbox, Sandboxie will issue message SBIE1301.</source> <source>When any of the following programs is launched outside any sandbox, Sandboxie will issue message SBIE1301.</source>
<translation>Sandboxie SBIE1301</translation> <translation>Sandboxie SBIE1301 </translation>
</message> </message>
<message> <message>
<source>Remove Program</source> <source>Remove Program</source>
@ -2285,15 +2297,15 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Add &apos;Run Sandboxed&apos; to the explorer context menu</source> <source>Add &apos;Run Sandboxed&apos; to the explorer context menu</source>
<translation>&apos;&apos; </translation> <translation>&apos;&apos; </translation>
</message> </message>
<message> <message>
<source>Issue message 1308 when a program fails to start</source> <source>Issue message 1308 when a program fails to start</source>
<translation> 1308</translation> <translation> 1308 </translation>
</message> </message>
<message> <message>
<source>Sandbox default</source> <source>Sandbox default</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>Separate user folders</source> <source>Separate user folders</source>
@ -2313,7 +2325,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Sandbox &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;ipc root&lt;/a&gt;: </source> <source>Sandbox &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;ipc root&lt;/a&gt;: </source>
<translation> &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;IPC 根目錄&lt;/a&gt;: </translation> <translation> &lt;a href=&quot;sbie://docs/ipcrootpath&quot;&gt;IPC 根目錄&lt;/a&gt;: </translation>
</message> </message>
<message> <message>
<source>Show Notifications for relevant log Messages</source> <source>Show Notifications for relevant log Messages</source>
@ -2321,7 +2333,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Sandbox &lt;a href=&quot;sbie://docs/filerootpath&quot;&gt;file system root&lt;/a&gt;: </source> <source>Sandbox &lt;a href=&quot;sbie://docs/filerootpath&quot;&gt;file system root&lt;/a&gt;: </source>
<translation> &lt;a href=&quot;sbie://docs/filerootpath&quot;&gt;檔案系統根目錄&lt;/a&gt;: </translation> <translation> &lt;a href=&quot;sbie://docs/filerootpath&quot;&gt;檔案系統根目錄&lt;/a&gt;: </translation>
</message> </message>
<message> <message>
<source>Portable root folder</source> <source>Portable root folder</source>
@ -2333,11 +2345,11 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>Start UI when a sandboxed process is started</source> <source>Start UI when a sandboxed process is started</source>
<translation> UI</translation> <translation> UI</translation>
</message> </message>
<message> <message>
<source>Show first recovery window when emptying sandboxes</source> <source>Show first recovery window when emptying sandboxes</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source>...</source> <source>...</source>
@ -2360,7 +2372,7 @@ instead of &quot;*&quot;.</source>
</message> </message>
<message> <message>
<source>SandboxiePlus Settings</source> <source>SandboxiePlus Settings</source>
<translation>SandboxiePlus </translation> <translation type="vanished">SandboxiePlus </translation>
</message> </message>
<message> <message>
<source>Description:</source> <source>Description:</source>
@ -2382,5 +2394,9 @@ instead of &quot;*&quot;.</source>
<source>Snapshot Actions</source> <source>Snapshot Actions</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

File diff suppressed because it is too large Load Diff