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
### Added
- added detection for waterfox.exe, Palemoon.exe, basilisk.exe and brave.exe firefox forks
- 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
- 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"
-- this should resolve issues with many Unity games hanging on startup for a long time
- added enhanced RPC/IPC interface tracing
- when DefaultBox is not found by the SandMan UI, it will be recreated
- "Disable Forced Programs" time is now saved and reloaded
### Changed
- reduced sandman cpu usage
- sandboxie.ini and templates.ini can now be UTF8 encoded
- reduced SandMan CPU usage
- Sandboxie.ini and Templates.ini can now be UTF8 encoded
-- 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
- 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="
-- "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
### Fixed
- fixed old memory pool leak in the sbie driver
- fixed issue with item selection in the access restrictions ui
- fixed updater crash in sbiectrl.exe
- fixed issues wih RPC calls introduced in sbie 5.33.1
- fixed recently broken terminate all command
- fixed a couple minor UI issues with Sandman UI
- fixed IPC issue with windows 7 and 8 resulting in process termination
- fixed old memory pool leak in the Sbie driver
- fixed issue with item selection in the access restrictions UI
- fixed updater crash in Sbiectrl.exe
- fixed issues with RPC calls introduced in Sbie 5.33.1
- fixed recently broken 'terminate all' command
- fixed a couple minor UI issues with SandMan UI
- fixed IPC issue with Windows 7 and 8 resulting in process termination
- fixed "recover to" functionality
@ -45,7 +61,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Added
- added confirmation prompts to terminate all commands
- 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
### Changed
@ -56,9 +72,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### Fixed
- fixed issues with window modality
- 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 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 browse button for box root folder in the SandMan UI
- 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
- added start SandMan UI when a sandboxed application starts
- recovery window can now list all files

View File

@ -21,8 +21,8 @@
#ifndef _MY_VERSION_H
#define _MY_VERSION_H
#define MY_VERSION_BINARY 5,47,0
#define MY_VERSION_STRING "5.47.0"
#define MY_VERSION_BINARY 5,47,1
#define MY_VERSION_STRING "5.47.1"
#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

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,
// then match the image name against the executing process.
@ -242,9 +232,11 @@ _FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value)
else
inv = FALSE;
if (pMode) *pMode = inv ? 1 : 0; // 1 - match by negation, 0 - exact match
ULONG len = (ULONG)(tmp - value);
if (len) {
match = Config_MatchImage(value, len, image_lwr, 1);
match = Config_MatchImage(value, len, Dll_ImageName, 1);
if (inv)
match = !match;
if (!match)
@ -253,13 +245,32 @@ _FX WCHAR* Config_MatchImageAndGetValue(WCHAR* value)
value = tmp ? tmp + 1 : NULL;
}
else {
Dll_Free(image_lwr);
if (pMode) *pMode = 2; // 2 - global default
}
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
//---------------------------------------------------------------------------
@ -280,7 +291,7 @@ _FX BOOLEAN Config_InitPatternList(const WCHAR* setting, LIST* list)
break;
++index;
WCHAR* value = Config_MatchImageAndGetValue(conf_buf);
WCHAR* value = Config_MatchImageAndGetValue(conf_buf, NULL);
if (value)
{
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)
{
WCHAR conf_buf[2048];
WCHAR* found_value = NULL;
ULONG found_mode = -1;
ULONG index = 0;
while (1) {
@ -313,19 +324,22 @@ _FX NTSTATUS Config_GetSettingsForImageName(
break;
++index;
WCHAR* value = Config_MatchImageAndGetValue(conf_buf);
if (!value)
ULONG mode = -1;
WCHAR* found_value = Config_MatchImageAndGetValue(conf_buf, &mode);
if (!found_value || mode > found_mode)
continue;
if (found_value) {
SbieApi_Log(2302, L"%S - %S [%S]", setting, Dll_ImageName, Dll_BoxName);
break;
}
found_value = value;
//if (found_value) {
// SbieApi_Log(2302, L"%S - %S [%S]", setting, Dll_ImageName, Dll_BoxName);
// break;
//}
wcscpy_s(value, value_size / sizeof(WCHAR), found_value);
found_mode = mode;
}
if (found_value) wcscpy_s(value, value_size / sizeof(WCHAR), found_value);
else if (deftext) wcscpy_s(value, value_size / sizeof(WCHAR), deftext);
else value[0] = L'\0';
if (found_mode == -1) {
if (deftext) wcscpy_s(value, value_size / sizeof(WCHAR), deftext);
else value[0] = L'\0';
}
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);
NTSTATUS Config_GetSettingsForImageName(
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"palemoon.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"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"maxthon.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"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"DontCopy", &File_MigrationOptions[FILE_DONT_COPY]);
WCHAR conf[16];
Config_GetSettingsForImageName(L"CopyBlockDenyWrite", conf, sizeof(conf), NULL);
if (*conf == L'y' || *conf == L'Y')
File_MigrationDenyWrite = TRUE;
File_MigrationDenyWrite = Config_GetSettingsForImageName_bool(L"CopyBlockDenyWrite", FALSE);
File_InitCopyLimit();

View File

@ -188,11 +188,13 @@ _FX BOOLEAN RpcRt_Init(HMODULE module)
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];
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
@ -461,7 +463,7 @@ _FX ULONG RpcRt_RpcBindingFromStringBindingW(
//OutputDebugString(msg);
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;
}
@ -525,7 +527,7 @@ _FX RPC_STATUS RpcRt_RpcBindingCreateW(
//OutputDebugString(msg);
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;
}

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
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
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);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
d->combo->setFocus();
connect(d->buttonBox, SIGNAL(accepted()), SLOT(accept()));
connect(d->buttonBox, SIGNAL(rejected()), SLOT(reject()));
connect(d->buttonBox, SIGNAL(clicked(QAbstractButton*)),

View File

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

View File

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

View File

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

View File

@ -91,7 +91,8 @@ QList<QVariant> CSbieModel::MakeBoxPath(const QVariant& Name, const QMap<QString
QString ParentID = FindParent(Name, Groups);
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.append(ParentID);

View File

@ -15,7 +15,6 @@
#include "Windows/RecoveryWindow.h"
#include <QtConcurrent>
#include "../MiscHelpers/Common/SettingsWidgets.h"
#include "Windows/NewBoxWindow.h"
#include "Windows/OptionsWindow.h"
#include <QProxyStyle>
@ -99,8 +98,7 @@ CSandMan::CSandMan(QWidget *parent)
m_LanguageId = 1033; // lang en_us
LoadLanguage();
if (theConf->GetBool("Options/DarkTheme", false))
SetDarkTheme(true);
SetUITheme();
m_bExit = false;
@ -1063,15 +1061,7 @@ void CSandMan::OnNotAuthorized(bool bLoginRequired, bool& bRetry)
void CSandMan::OnNewBox()
{
CNewBoxWindow NewBoxWindow(this);
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);
}
m_pBoxView->AddNewBox();
}
void CSandMan::OnEmptyAll()
@ -1319,7 +1309,7 @@ void CSandMan::OnSettings()
void CSandMan::UpdateSettings()
{
SetDarkTheme(theConf->GetBool("Options/DarkTheme", false));
SetUITheme();
//m_pBoxView->UpdateRunMenu();
@ -1620,7 +1610,7 @@ void CSandMan::OnSysTray(QSystemTrayIcon::ActivationReason Reason)
NullifyTrigger = false;
return;
}
setWindowState(Qt::WindowActive);
this->setWindowState((this->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
SetForegroundWindow(MainWndHandle);
} );
}
@ -1944,8 +1934,16 @@ void CSandMan::OnAbout()
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)
{
QApplication::setStyle(QStyleFactory::create("Fusion"));
@ -1986,7 +1984,10 @@ void CSandMan::LoadLanguage()
m_Translation.clear();
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())
{
m_LanguageId = LocaleNameToLCID(Lang.toStdWString().c_str(), 0);

View File

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

View File

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

View File

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

View File

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

View File

@ -11,6 +11,7 @@
#include <QFileIconProvider>
#include "../../MiscHelpers/Common/CheckableMessageBox.h"
#include "../Windows/RecoveryWindow.h"
#include "../Windows/NewBoxWindow.h"
#include "qt_windows.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);
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_pDelGroupe = m_pMenu->addAction(CSandMan::GetIcon("Remove"), tr("Remove Group"), this, SLOT(OnGroupAction()));
m_iMenuTop = m_pMenu->actions().count();
@ -380,7 +381,22 @@ void CSbieView::OnGroupAction()
{
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);
if (Name.isEmpty() || m_Groups.contains(Name))
@ -433,9 +449,15 @@ void CSbieView::OnGroupAction()
Name = m_pSbieModel->GetID(ModelIndex).toString();
else if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eBox)
Name = m_pSbieModel->GetSandBox(ModelIndex)->GetName();
if (Name.isEmpty() || Name == Group)
if (Name.isEmpty())
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
for (auto I = m_Groups.begin(); I != m_Groups.end(); ++I)
I.value().removeAll(Name);
@ -452,6 +474,21 @@ void CSbieView::OnGroupAction()
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()
{
QList<SB_STATUS> Results;

View File

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

View File

@ -16,7 +16,7 @@ public:
QSize s = QProxyStyle::sizeFromContents(type, option, size, widget);
if (type == QStyle::CT_TabBarTab) {
s.transpose();
if(theConf->GetBool("Options/DarkTheme", false))
if(theGUI->m_DarkTheme)
s.setHeight(s.height() * 13 / 10);
else
s.setHeight(s.height() * 15 / 10);
@ -368,11 +368,19 @@ void COptionsWindow::closeEvent(QCloseEvent *e)
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);
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)
{
@ -996,9 +1004,10 @@ QString COptionsWindow::SelectProgram(bool bOrGroup)
if (!progDialog.exec())
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);
if (Index != -1)
if (Index != -1 && progDialog.data().isValid())
Program = progDialog.data().toString();
return Program;

View File

@ -7,6 +7,26 @@
#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)
: QDialog(parent)
{
@ -27,7 +47,8 @@ CSettingsWindow::CSettingsWindow(QWidget *parent)
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/");
foreach(const QString& langFile, langDir.entryList(QStringList("sandman_*.qm"), QDir::Files))
{
@ -36,29 +57,20 @@ CSettingsWindow::CSettingsWindow(QWidget *parent)
QString Lang = Locale.nativeLanguageName();
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.chkSvcStart->setChecked(theAPI->GetUserSettings()->GetBool("SbieCtrl_EnableAutoStart", true));
switch (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.chkAutoUpdate->setCheckState(CSettingsWindow__Int2Chk(theConf->GetInt("Options/CheckForUpdates", 2)));
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));
switch (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.chkSandboxUrls->setCheckState(CSettingsWindow__Int2Chk(theConf->GetInt("Options/OpenUrlsSandboxed", 2)));
ui.chkShowRecovery->setChecked(theConf->GetBool("Options/ShowRecovery", false));
@ -177,18 +189,14 @@ void CSettingsWindow::closeEvent(QCloseEvent *e)
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());
theAPI->GetUserSettings()->SetBool("SbieCtrl_EnableAutoStart", ui.chkSvcStart->isChecked());
switch (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;
}
theConf->SetValue("Options/CheckForUpdates", CSettingsWindow__Chk2Int(ui.chkAutoUpdate->checkState()));
if (ui.chkShellMenu->checkState() != CSbieUtils::IsContextMenu())
{
@ -200,11 +208,7 @@ void CSettingsWindow::apply()
theConf->SetValue("Options/ShowNotifications", ui.chkNotifications->isChecked());
switch (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/OpenUrlsSandboxed", CSettingsWindow__Chk2Int(ui.chkSandboxUrls->checkState()));
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>
<translation type="unfinished"></translation>
</message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<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>
<translation>Пароли не совпадают, повторите попытку.</translation>
</message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CSnapshotsWindow</name>
@ -2125,7 +2133,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>Настройки SandboxiePlus</translation>
<translation type="vanished">Настройки SandboxiePlus</translation>
</message>
<message>
<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>
<translation>Текстовая метка</translation>
</message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsWindow</name>
@ -2347,7 +2359,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>Настройки SandboxiePlus</translation>
<translation type="vanished">Настройки SandboxiePlus</translation>
</message>
<message>
<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>
<translation>Действия со снимками</translation>
</message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context>
</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>
<translation type="unfinished"></translation>
</message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<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>
<translation>Parolalar eşleşmedi, lütfen tekrar deneyin.</translation>
</message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>CSnapshotsWindow</name>
@ -2145,7 +2153,7 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>SandboxiePlus Ayarları</translation>
<translation type="vanished">SandboxiePlus Ayarları</translation>
</message>
<message>
<source>Add Folder</source>
@ -2175,6 +2183,10 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
<source>TextLabel</source>
<translation>Metin Etiketi</translation>
</message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsWindow</name>
@ -2367,7 +2379,7 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>SandboxiePlus Ayarları</translation>
<translation type="vanished">SandboxiePlus Ayarları</translation>
</message>
<message>
<source>Description:</source>
@ -2389,5 +2401,9 @@ Not: Bir korumalı kutuya ilişkin Zorlanmış Programlar ve Zorlanmış Dizinle
<source>Snapshot Actions</source>
<translation>Anlık Görüntü Eylemleri</translation>
</message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -31,7 +31,7 @@
<name>CNewBoxWindow</name>
<message>
<source>New Box</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Hardened</source>
@ -43,11 +43,11 @@
</message>
<message>
<source>Legacy (old sbie behaviour)</source>
<translation type="vanished"> ()</translation>
<translation type="vanished"> ( Sbie )</translation>
</message>
<message>
<source>Sandboxie-Plus - Create New Box</source>
<translation>Sandboxie-Plus - </translation>
<translation>Sandboxie-Plus - </translation>
</message>
<message>
<source>Legacy Sandboxie Behaviour</source>
@ -94,7 +94,7 @@
</message>
<message>
<source>Display box name in title</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Folder</source>
@ -122,7 +122,7 @@
</message>
<message>
<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>
<source>%1 (%2)</source>
@ -198,7 +198,7 @@
</message>
<message>
<source>RT interfaces must be specified by their name.</source>
<translation>RT </translation>
<translation>RT </translation>
</message>
<message>
<source>Browse for Program</source>
@ -206,7 +206,7 @@
</message>
<message>
<source>Please enter a program path</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Please enter a service identifier</source>
@ -226,7 +226,7 @@
</message>
<message>
<source>This sandbox has been deleted hence configuration can not be saved.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Direct</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Direct All</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Closed</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Closed RT</source>
<translation type="unfinished"></translation>
<translation> RT</translation>
</message>
<message>
<source>Read Only</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Hidden</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Unknown</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>File/Folder</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>Registry</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>IPC Path</source>
<translation type="unfinished"></translation>
<translation>IPC </translation>
</message>
<message>
<source>Wnd Class</source>
@ -282,7 +282,7 @@
</message>
<message>
<source>COM Object</source>
<translation type="unfinished"></translation>
<translation>COM </translation>
</message>
</context>
<context>
@ -358,7 +358,7 @@
<name>CPopUpRecovery</name>
<message>
<source>Recover to:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<source>Browse</source>
@ -386,7 +386,7 @@
</message>
<message>
<source>Open file recovery for this box</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Dismiss</source>
@ -398,11 +398,11 @@
</message>
<message>
<source>Dismiss all from this box</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Disable quick recovery until the box restarts</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Select Directory</source>
@ -429,12 +429,12 @@
</message>
<message>
<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>
<source>Do you want to allow %4 (%5) to copy a %1 large file into sandbox: %2?
File name: %3</source>
<translation type="vanished"> %4 (%5) %1 : %2
<translation type="vanished"> %4 (%5) %1 : %2
: %3</translation>
</message>
<message>
@ -452,7 +452,7 @@ The file was written by: %3</source>
<message>
<source>Migrating a large file %1 into the sandbox %2, %3 left.
Full path: %4</source>
<translation type="vanished"> %1 %2%3
<translation type="vanished"> %1 %2%3
: %4</translation>
</message>
<message>
@ -504,7 +504,7 @@ Full path: %4</source>
</message>
<message>
<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>
</context>
<context>
@ -581,7 +581,7 @@ Full path: %4</source>
</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>
<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>
<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>
<source>Error deleting sandbox folder: %1</source>
<translation>: %1</translation>
<translation>: %1</translation>
</message>
<message>
<source>About Sandboxie-Plus</source>
@ -641,7 +641,7 @@ Full path: %4</source>
</message>
<message>
<source>Failed to copy configuration from sandbox %1: %2</source>
<translation> %1: %2 </translation>
<translation> %1: %2 </translation>
</message>
<message>
<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>
<source>The sandbox name can not be longer than 32 characters.</source>
<translation>32</translation>
<translation>32</translation>
</message>
<message>
<source>Stop Driver</source>
@ -811,7 +811,7 @@ Full path: %4</source>
</message>
<message>
<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>
<source>Reset all hidden messages</source>
@ -819,15 +819,15 @@ Full path: %4</source>
</message>
<message>
<source>A sandbox must be emptied before it can be deleted.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>The sandbox name can contain only letters, digits and underscores which are displayed as spaces.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>A sandbox must be emptied before it can be renamed.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>API Call Logging</source>
@ -851,7 +851,7 @@ Full path: %4</source>
</message>
<message>
<source>The sandbox name can not be a device name.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Operation failed for %1 item(s).</source>
@ -867,7 +867,7 @@ Full path: %4</source>
</message>
<message>
<source>&amp;Sandbox</source>
<translation>&amp;</translation>
<translation>&amp;</translation>
</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>
@ -915,7 +915,7 @@ Full path: %4</source>
</message>
<message>
<source>Delete protection is enabled for the sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>&amp;Advanced</source>
@ -943,7 +943,7 @@ Full path: %4</source>
</message>
<message>
<source>Create New Box</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Failed to copy RegHive</source>
@ -959,7 +959,7 @@ Full path: %4</source>
</message>
<message>
<source>Failed to delete sandbox %1: %2</source>
<translation> %1: %2 </translation>
<translation> %1: %2 </translation>
</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>
@ -1007,7 +1007,7 @@ Full path: %4</source>
</message>
<message>
<source>This Snapshot operation can not be performed while processes are still running in the box.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>server not reachable</source>
@ -1027,7 +1027,7 @@ Full path: %4</source>
</message>
<message>
<source>No sandboxes found; creating: %1</source>
<translation type="vanished">: %1</translation>
<translation type="vanished">: %1</translation>
</message>
<message>
<source>Cleanup Resource Log</source>
@ -1047,7 +1047,7 @@ Full path: %4</source>
</message>
<message>
<source>A sandbox of the name %1 already exists</source>
<translation> %1 </translation>
<translation> %1 </translation>
</message>
<message>
<source>Failed to set configuration setting %1 in section %2: %3</source>
@ -1075,7 +1075,7 @@ Full path: %4</source>
</message>
<message>
<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>
<source>The file %1 already exists, do you want to overwrite it?</source>
@ -1088,8 +1088,8 @@ Full path: %4</source>
<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.
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使用沙盒建立
使 sandboxie.ini README.md </translation>
<translation>使 API https://github.com/sandboxie-plus/LogApiDll 下載 LogApiDll為一個或更多沙盤設定
使 sandboxie.ini README.md </translation>
</message>
<message>
<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>
<source>Sellect box:</source>
<translation type="vanished">:</translation>
<translation type="vanished">:</translation>
</message>
<message>
<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>
<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>
<source>Can not create snapshot of an empty sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>A sandbox with that name already exists</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Show Hidden Boxes</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Select box:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<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>
<source>Do you want to terminate all processes in all sandboxes?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<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>
<source>The selected window is not running as part of any sandboxed program.</source>
<translation></translation>
<translation></translation>
</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>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Box Groupe</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Status</source>
@ -1230,7 +1230,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message>
<message>
<source>Create Shortcut to sandbox %1</source>
<translation> %1 </translation>
<translation> %1 </translation>
</message>
<message>
<source>Options:
@ -1252,11 +1252,11 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message>
<message>
<source>Sandbox Options</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Sandbox Presets</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Remove Sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Rename Sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Please enter a new name for the Sandbox.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Do you really want to remove the selected sandbox(es)?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Force into this sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Create New Box</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>This box does not have Internet restrictions in place, do you want to enable them?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>This Sandbox is already empty.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Do you want to delete the content of the selected sandbox?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Do you really want to delete the content of multiple sandboxes?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Do you want to terminate all processes in the selected sandbox(es)?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>This sandbox is disabled, do you want to enable it?</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>This Sandbox is empty.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>A group can not be its own parent.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<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>
<translation></translation>
</message>
<message>
<source>Auto Detection</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<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>
<message>
<source>Copy options from an existing box:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<source>Initial sandbox configuration:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<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>
<source>SandboxiePlus new box</source>
<translation>SandboxiePlus </translation>
<translation>SandboxiePlus </translation>
</message>
<message>
<source>Enter a name for the new box:</source>
<translation type="vanished">:</translation>
<translation type="vanished">:</translation>
</message>
<message>
<source>Sandbox Name:</source>
<translation>:</translation>
<translation>:</translation>
</message>
</context>
<context>
@ -1562,7 +1570,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message>
<message>
<source>Allow only selected programs to start in this sandbox. *</source>
<translation> *</translation>
<translation> *</translation>
</message>
<message>
<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>
<source>Sandbox Indicator in title:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<source>Debug</source>
@ -1586,7 +1594,7 @@ Please download the latest release and set it up with the Sandboxie.ini as instr
</message>
<message>
<source>&lt;- for this one the above does not apply</source>
<translation>&lt;- </translation>
<translation>&lt;- </translation>
</message>
<message>
<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>
<source>Don&apos;t alter window class names created by sandboxed programs</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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.
For files access you can use &apos;Direct All&apos; instead to make it apply to all programs.</source>
<translation>
&apos;&apos;
&apos;&apos;
...=!&lt;&gt;,...
使 &apos;&apos; 使</translation>
</message>
<message>
<source>Log Debug Output to the Trace Log</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Forced Programs</source>
@ -1660,7 +1668,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Allow all programs to start in this sandbox.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Protect the sandbox integrity itself</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Add Folder</source>
@ -1728,7 +1736,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Issue message 1307 when a program is denied internet access</source>
<translation>1307</translation>
<translation> 1307 </translation>
</message>
<message>
<source>Compatibility</source>
@ -1740,15 +1748,15 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<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>
<source>Box Options</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Don&apos;t allow sandboxed processes to see processes running in other boxes</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Add Group</source>
@ -1756,11 +1764,11 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Sandboxed window border:</source>
<translation>:</translation>
<translation>:</translation>
</message>
<message>
<source>Prevent selected programs from starting in this sandbox.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Miscellaneous</source>
@ -1768,7 +1776,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Issue message 2102 when a file is too large</source>
<translation> 2102</translation>
<translation> 2102 </translation>
</message>
<message>
<source>File Recovery</source>
@ -1776,7 +1784,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Box Delete options</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Pipe Trace</source>
@ -1812,7 +1820,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Protect the system from sandboxed processes</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Add Leader Program</source>
@ -1836,7 +1844,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Sandbox protection</source>
<translation></translation>
<translation></translation>
</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>
@ -1844,7 +1852,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>COM Class Trace</source>
@ -1860,11 +1868,11 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>When the Quick Recovery function is invoked, the following folders will be checked for sandboxed content. </source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>px Width</source>
<translation>px </translation>
<translation></translation>
</message>
<message>
<source>Add User</source>
@ -1872,7 +1880,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</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>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Force Program</source>
@ -1880,7 +1888,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>WARNING, these options can disable core security guarantees and break sandbox security!!!</source>
<translation>使!!!</translation>
<translation>使!!!</translation>
</message>
<message>
<source>Edit ini</source>
@ -1912,7 +1920,7 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Add sandboxed processes to job objects (recommended)</source>
<translation>()</translation>
<translation>()</translation>
</message>
<message>
<source>Remove Program</source>
@ -1944,23 +1952,23 @@ If leader processes are defined, all others are treated as lingering processes.<
</message>
<message>
<source>Protect this sandbox from deletion or emptying</source>
<translation></translation>
<translation></translation>
</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.
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>
<source>* Note: Programs installed to this sandbox won&apos;t be able to start at all.</source>
<translation>* 注意: 安裝在此沙盒裡的程式將完全無法啟動</translation>
<translation>* 注意: 安裝至此沙盤裡的程式將完全無法啟動</translation>
</message>
<message>
<source>This list contains a large amount of sandbox compatibility enhancing templates</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>Issue message 1308 when a program fails to start</source>
<translation> 1308</translation>
<translation> 1308 </translation>
</message>
<message>
<source>Resource Access</source>
@ -1984,7 +1992,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>Hide host processes from processes running in the sandbox.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>File Migration</source>
@ -1992,7 +2000,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>Auto delete content when last sandboxed process terminates</source>
<translation></translation>
<translation></translation>
</message>
<message>
<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>
<source>You can configure custom entries for the sandbox run menu.</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Start Restrictions</source>
@ -2012,7 +2020,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>Edit ini Section</source>
<translation> ini </translation>
<translation> ini </translation>
</message>
<message>
<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>
<source>Allow the print spooler to print to files outside the sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Printing</source>
@ -2028,7 +2036,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>Remove spooler restriction, printers can be installed outside the sandbox</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Add program</source>
@ -2040,7 +2048,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</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>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Add service</source>
@ -2048,7 +2056,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<source>Do not start sandboxed services using a system token (recommended)</source>
<translation>使 ()</translation>
<translation>使 ()</translation>
</message>
<message>
<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>
<source>Sandbox isolation</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Auto Exec</source>
@ -2068,7 +2076,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
</message>
<message>
<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>
<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;I&quot; - Ignore access requests
instead of &quot;*&quot;.</source>
<translation>
<translation>
&quot;*&quot; -
ini
&quot;A&quot; -
&quot;D&quot; -
&quot;I&quot; -
&quot;*&quot;.</translation>
&quot;*&quot; -
ini
&quot;A&quot; -
&quot;D&quot; -
&quot;I&quot; -
&quot;*&quot;.</translation>
</message>
<message>
<source>Allow access to Bluetooth</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -2138,7 +2146,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>SandboxiePlus </translation>
<translation type="vanished">SandboxiePlus </translation>
</message>
<message>
<source>Add Folder</source>
@ -2168,6 +2176,10 @@ instead of &quot;*&quot;.</source>
<source>TextLabel</source>
<translation></translation>
</message>
<message>
<source>SandboxiePlus - Recovery</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsWindow</name>
@ -2177,7 +2189,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<source>Path</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Change Password</source>
@ -2237,7 +2249,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<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>
<source>Add Program</source>
@ -2245,19 +2257,19 @@ instead of &quot;*&quot;.</source>
</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>
<translation>Sandboxie . </translation>
<translation>Sandboxie . OK </translation>
</message>
<message>
<source>Watch Sandboxie.ini for changes</source>
<translation> Sandboxie.ini </translation>
<translation> Sandboxie.ini </translation>
</message>
<message>
<source>Show Sys-Tray</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Open urls from this ui sandboxed</source>
<translation>使</translation>
<translation> UI </translation>
</message>
<message>
<source>In the future, don&apos;t check software compatibility</source>
@ -2269,7 +2281,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<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>
<source>Remove Program</source>
@ -2285,15 +2297,15 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<source>Add &apos;Run Sandboxed&apos; to the explorer context menu</source>
<translation>&apos;&apos; </translation>
<translation>&apos;&apos; </translation>
</message>
<message>
<source>Issue message 1308 when a program fails to start</source>
<translation> 1308</translation>
<translation> 1308 </translation>
</message>
<message>
<source>Sandbox default</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Separate user folders</source>
@ -2313,7 +2325,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<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>
<source>Show Notifications for relevant log Messages</source>
@ -2321,7 +2333,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<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>
<source>Portable root folder</source>
@ -2333,11 +2345,11 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<source>Start UI when a sandboxed process is started</source>
<translation> UI</translation>
<translation> UI</translation>
</message>
<message>
<source>Show first recovery window when emptying sandboxes</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>...</source>
@ -2360,7 +2372,7 @@ instead of &quot;*&quot;.</source>
</message>
<message>
<source>SandboxiePlus Settings</source>
<translation>SandboxiePlus </translation>
<translation type="vanished">SandboxiePlus </translation>
</message>
<message>
<source>Description:</source>
@ -2382,5 +2394,9 @@ instead of &quot;*&quot;.</source>
<source>Snapshot Actions</source>
<translation></translation>
</message>
<message>
<source>SandboxiePlus - Snapshots</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff