6b025a24f0
Setup setzt den Autostart weiterhin fuer alle Benutzer (HKLM); die Task-Beschreibung im Installer stellt das jetzt klar. In den Einstellungen neuer Abschnitt "Autostart": - "Nur fuer diesen Benutzer" -> HKCU\...\Run - "Fuer alle Benutzer" -> HKLM\...\Run, nur mit Admin-Rechten aenderbar (so laesst sich der vom Setup gesetzte All-User-Autostart auch entfernen). Neuer AutostartManager kapselt Lesen/Setzen/Entfernen beider Run-Eintraege und die Admin-Pruefung. Single-Instance-Mutex verhindert weiterhin einen Doppelstart, falls beide Eintraege gesetzt sind. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
209 lines
7.9 KiB
C#
209 lines
7.9 KiB
C#
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using StarfaceOutlookSync.Models;
|
|
using StarfaceOutlookSync.Services;
|
|
|
|
namespace StarfaceOutlookSync.UI
|
|
{
|
|
public class SettingsForm : Form
|
|
{
|
|
private CheckBox _chkStartMinimized, _chkSyncOnStart, _chkAutoAcceptOutlook;
|
|
private CheckBox _chkNotifGeneral, _chkNotifWarn;
|
|
private CheckBox _chkAutostartUser, _chkAutostartAll;
|
|
private NumericUpDown _numLogRetention;
|
|
private TextBox _txtSharedDir;
|
|
private Button _btnBrowseShared;
|
|
private Button _btnSave, _btnCancel;
|
|
private readonly UserSettings _settings;
|
|
|
|
public SettingsForm()
|
|
{
|
|
_settings = UserSettings.Load();
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
Text = "Einstellungen";
|
|
Size = new Size(380, 250);
|
|
FormBorderStyle = FormBorderStyle.FixedDialog;
|
|
MaximizeBox = false;
|
|
MinimizeBox = false;
|
|
StartPosition = FormStartPosition.CenterParent;
|
|
Font = new Font("Segoe UI", 9);
|
|
|
|
_chkStartMinimized = new CheckBox
|
|
{
|
|
Text = "Minimiert starten (nur im System Tray)",
|
|
Left = 20, Top = 24, AutoSize = true,
|
|
Checked = _settings.StartMinimized
|
|
};
|
|
|
|
_chkSyncOnStart = new CheckBox
|
|
{
|
|
Text = "Beim Start automatisch synchronisieren",
|
|
Left = 20, Top = 52, AutoSize = true,
|
|
Checked = _settings.SyncOnStart
|
|
};
|
|
|
|
_chkAutoAcceptOutlook = new CheckBox
|
|
{
|
|
Text = "Outlook-Sicherheitsabfrage automatisch erlauben",
|
|
Left = 20, Top = 80, AutoSize = true,
|
|
Checked = _settings.AutoAcceptOutlookPrompt
|
|
};
|
|
|
|
var hintText = "Hinweis: Outlook muss nach Aenderung neu gestartet werden.";
|
|
if (UserSettings.IsOutlookSecurityLockedByPolicy())
|
|
hintText += "\nAuf Domaenen-PCs: App einmalig als Admin starten!";
|
|
|
|
var lblHint = new Label
|
|
{
|
|
Text = hintText,
|
|
Left = 38, Top = 102, Width = 320, Height = 36,
|
|
ForeColor = UserSettings.IsOutlookSecurityLockedByPolicy() ? Color.OrangeRed : Color.Gray,
|
|
Font = new Font("Segoe UI", 8)
|
|
};
|
|
|
|
_chkNotifGeneral = new CheckBox
|
|
{
|
|
Text = "Tray-Benachrichtigungen (allgemein)",
|
|
Left = 20, Top = 144, AutoSize = true,
|
|
Checked = _settings.NotificationsEnabled
|
|
};
|
|
|
|
_chkNotifWarn = new CheckBox
|
|
{
|
|
Text = "Benachrichtigungen bei Warnungen/Fehlern (Konflikte, Fehler)",
|
|
Left = 20, Top = 170, AutoSize = true,
|
|
Checked = _settings.NotifyWarningsErrors
|
|
};
|
|
|
|
var lblLogRetention = new Label
|
|
{
|
|
Text = "Protokoll auto-leeren - Eintraege aelter als (Tage, 0 = aus):",
|
|
Left = 20, Top = 204, AutoSize = true
|
|
};
|
|
|
|
_numLogRetention = new NumericUpDown
|
|
{
|
|
Left = 305, Top = 200, Width = 55, Minimum = 0, Maximum = 3650,
|
|
Value = System.Math.Max(0, System.Math.Min(3650, _settings.LogRetentionDays))
|
|
};
|
|
|
|
var lblShared = new Label
|
|
{
|
|
Text = "Gemeinsames Verzeichnis fuer Sync-Sperre (Mehrplatz, optional):",
|
|
Left = 20, Top = 240, AutoSize = true
|
|
};
|
|
|
|
_txtSharedDir = new TextBox
|
|
{
|
|
Left = 20, Top = 262, Width = 250,
|
|
Text = _settings.SharedDirectory
|
|
};
|
|
|
|
_btnBrowseShared = new Button
|
|
{
|
|
Text = "...", Left = 274, Top = 261, Width = 36, Height = 24
|
|
};
|
|
_btnBrowseShared.Click += (s, e) => BrowseSharedDir();
|
|
|
|
var lblSharedHint = new Label
|
|
{
|
|
Text = "Netzlaufwerk/UNC, das alle Arbeitsplaetze erreichen. Leer = keine\n" +
|
|
"clientuebergreifende Sperre (nur Schutz auf diesem PC).",
|
|
Left = 20, Top = 288, Width = 330, Height = 32,
|
|
ForeColor = Color.Gray, Font = new Font("Segoe UI", 8)
|
|
};
|
|
|
|
// === Autostart ===
|
|
bool isAdmin = AutostartManager.IsAdmin();
|
|
|
|
var lblAutostart = new Label
|
|
{
|
|
Text = "Autostart (bei Windows-Anmeldung starten)",
|
|
Left = 12, Top = 332, AutoSize = true, Font = new Font("Segoe UI", 10, FontStyle.Bold)
|
|
};
|
|
|
|
_chkAutostartUser = new CheckBox
|
|
{
|
|
Text = "Nur fuer diesen Benutzer",
|
|
Left = 20, Top = 360, AutoSize = true,
|
|
Checked = AutostartManager.GetUserAutostart()
|
|
};
|
|
|
|
_chkAutostartAll = new CheckBox
|
|
{
|
|
Text = "Fuer alle Benutzer" + (isAdmin ? "" : " (nur mit Admin-Rechten aenderbar)"),
|
|
Left = 20, Top = 386, AutoSize = true,
|
|
Checked = AutostartManager.GetMachineAutostart(),
|
|
Enabled = isAdmin
|
|
};
|
|
|
|
_btnSave = new Button
|
|
{
|
|
Text = "Speichern", Left = 95, Top = 422, Width = 85, Height = 28,
|
|
DialogResult = DialogResult.None
|
|
};
|
|
_btnSave.Click += (s, e) => Save();
|
|
|
|
_btnCancel = new Button
|
|
{
|
|
Text = "Abbrechen", Left = 189, Top = 422, Width = 85, Height = 28,
|
|
DialogResult = DialogResult.Cancel
|
|
};
|
|
|
|
Size = new Size(380, 512);
|
|
Controls.AddRange(new Control[] { _chkStartMinimized, _chkSyncOnStart, _chkAutoAcceptOutlook, lblHint,
|
|
_chkNotifGeneral, _chkNotifWarn, lblLogRetention, _numLogRetention,
|
|
lblShared, _txtSharedDir, _btnBrowseShared, lblSharedHint,
|
|
lblAutostart, _chkAutostartUser, _chkAutostartAll, _btnSave, _btnCancel });
|
|
AcceptButton = _btnSave;
|
|
CancelButton = _btnCancel;
|
|
}
|
|
|
|
private void BrowseSharedDir()
|
|
{
|
|
using (var dlg = new FolderBrowserDialog())
|
|
{
|
|
dlg.Description = "Gemeinsames Verzeichnis fuer die Sync-Sperre waehlen";
|
|
if (!string.IsNullOrWhiteSpace(_txtSharedDir.Text))
|
|
{
|
|
try { dlg.SelectedPath = _txtSharedDir.Text; } catch { }
|
|
}
|
|
if (dlg.ShowDialog(this) == DialogResult.OK)
|
|
_txtSharedDir.Text = dlg.SelectedPath;
|
|
}
|
|
}
|
|
|
|
private void Save()
|
|
{
|
|
_settings.StartMinimized = _chkStartMinimized.Checked;
|
|
_settings.SyncOnStart = _chkSyncOnStart.Checked;
|
|
_settings.AutoAcceptOutlookPrompt = _chkAutoAcceptOutlook.Checked;
|
|
_settings.NotificationsEnabled = _chkNotifGeneral.Checked;
|
|
_settings.NotifyWarningsErrors = _chkNotifWarn.Checked;
|
|
_settings.LogRetentionDays = (int)_numLogRetention.Value;
|
|
_settings.SharedDirectory = _txtSharedDir.Text.Trim();
|
|
_settings.Save();
|
|
|
|
// Sofort anwenden, damit der Effekt direkt sichtbar ist.
|
|
Logger.PruneOlderThan(_settings.LogRetentionDays);
|
|
|
|
// Autostart (Registry). Pro Benutzer immer; alle Benutzer nur mit Admin.
|
|
AutostartManager.SetUserAutostart(_chkAutostartUser.Checked);
|
|
if (AutostartManager.IsAdmin())
|
|
{
|
|
if (!AutostartManager.SetMachineAutostart(_chkAutostartAll.Checked))
|
|
MessageBox.Show(this,
|
|
"Autostart fuer alle Benutzer konnte nicht geaendert werden (Rechte?).",
|
|
"Autostart", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
}
|
|
}
|