unit SettingService; interface uses BaseService, Forms, Registry, superobject, Windows, SysUtils; type TSettingGroup = (sgSystem, sgHotkey); TSettingService = class(TBaseService) private FAutoRun: Boolean; FSystemSettings, FHotkeySettings: ISuperObject; procedure SetAutoRun(const Value: Boolean); public class function Current: TSettingService; function GetSettingGroup(ASettingGroup: TSettingGroup): ISuperObject; procedure SetSettingGroup(AJoSetting: ISuperObject; ASettingGroup: TSettingGroup); property AutoRun: Boolean read FAutoRun write SetAutoRun; end; implementation { TSettingService } var ASettingService: TSettingService; class function TSettingService.Current: TSettingService; var AReg: TRegistry; begin if ASettingService = nil then begin ASettingService := TSettingService.Create; ASettingService.FSystemSettings := SO(); ASettingService.FHotkeySettings := SO(); AReg := TRegistry.Create; try AReg.RootKey := HKEY_LOCAL_MACHINE; if not AReg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then begin ASettingService.FAutoRun := False; end else begin ASettingService.FAutoRun := AReg.KeyExists(Application.Title); ASettingService.FSystemSettings.B['autoRun'] := ASettingService.FAutoRun; end; finally AReg.Free; end; end; Result := ASettingService; end; function TSettingService.GetSettingGroup( ASettingGroup: TSettingGroup): ISuperObject; begin case ASettingGroup of sgSystem: begin Result := FSystemSettings; Exit; end; sgHotkey: begin Result := FHotkeySettings; Exit; end; end; end; procedure TSettingService.SetAutoRun(const Value: Boolean); var AReg: TRegistry; begin if FAutoRun = Value then Exit; FAutoRun := Value; ASettingService.FSystemSettings.B['autoRun'] := ASettingService.FAutoRun; AReg := TRegistry.Create; try AReg.RootKey := HKEY_LOCAL_MACHINE; if AReg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False) then begin if FAutoRun then AReg.WriteString(Application.Title, '"' + Application.ExeName + '" -OSBOOT') {设置程序自动启动} else AReg.DeleteValue(Application.Title); {取消程序自动启动} end; finally AReg.Free; end; end; procedure TSettingService.SetSettingGroup(AJoSetting: ISuperObject; ASettingGroup: TSettingGroup); begin case ASettingGroup of sgSystem: begin AutoRun := AJoSetting.B['autoRun']; end; sgHotkey: ; end; end; initialization finalization if ASettingService <> nil then FreeAndNil(ASettingService); end.