Changeset 742


Ignore:
Timestamp:
12/6/2008 6:58:00 AM (6 years ago)
Author:
lowjoel
Message:

Allow the user to control whether the shell extension should be loaded from the Settings panel; and that should only affect the current user. Implements #81

Location:
branches/eraser6
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/Eraser/Program.cs

    r741 r742  
    803803 
    804804        /// <summary> 
     805        /// Gets or sets whether the Shell Extension should be loaded into Explorer. 
     806        /// </summary> 
     807        public bool IntegrateWithShell 
     808        { 
     809            get 
     810            { 
     811                return settings["IntegrateWithShell"] == null ? 
     812                    true : (bool)settings["IntegrateWithShell"]; 
     813            } 
     814            set 
     815            { 
     816                settings["IntegrateWithShell"] = value; 
     817            } 
     818        } 
     819 
     820        /// <summary> 
    805821        /// Gets or sets a value on whether the main frame should be minimised to the 
    806822        /// system notification area. 
  • branches/eraser6/Eraser/SettingsPanel.cs

    r636 r742  
    180180                plausibleDeniabilityFiles.Items.Add(path); 
    181181 
     182            uiContextMenu.Checked = settings.IntegrateWithShell; 
    182183            lockedAllow.Checked = 
    183184                ManagerLibrary.Instance.Settings.EraseLockedFilesOnRestart; 
     
    409410                    MessageBoxIcon.Information); 
    410411            } 
     412            settings.IntegrateWithShell = uiContextMenu.Checked; 
     413 
    411414            managerSettings.DefaultFileErasureMethod = 
    412415                ((ErasureMethod)eraseFilesMethod.SelectedItem).GUID; 
  • branches/eraser6/ShellExt/CtxMenu.cpp

    r736 r742  
    8383}; 
    8484 
     85Handle<HKEY>::~Handle() 
     86{ 
     87    CloseHandle(Object); 
     88} 
     89 
    8590namespace Eraser { 
    8691    HRESULT CCtxMenu::FinalConstruct() 
     
    9196        MenuTitle = new wchar_t[menuTitle.length() + 1]; 
    9297        wcscpy_s(MenuTitle, menuTitle.length() + 1, menuTitle.c_str()); 
     98 
     99        //Check if the shell extension has been disabled. 
     100        Handle<HKEY> eraserKey(NULL); 
     101        LONG openKeyResult = RegOpenKeyEx(HKEY_CURRENT_USER, 
     102            L"Software\\Eraser\\Eraser 6\\3460478d-ed1b-4ecc-96c9-2ca0e8500557\\", 0, 
     103            KEY_READ, &static_cast<HKEY&>(eraserKey)); 
     104 
     105        switch (openKeyResult) 
     106        { 
     107        case ERROR_FILE_NOT_FOUND: 
     108            //No settings defined: we default to enabling the shell extension. 
     109            return S_OK; 
     110 
     111        case ERROR_SUCCESS: 
     112            break; 
     113             
     114        default: 
     115            return E_FAIL; 
     116        } 
     117 
     118        //Check the value of the IntegrateWithShell value. 
     119        DWORD valueType;         
     120        BYTE valueBuffer[512]; 
     121        DWORD valueBufferSize = sizeof(valueBuffer); 
     122        DWORD error = RegQueryValueEx(eraserKey, L"IntegrateWithShell", NULL, &valueType, 
     123            valueBuffer, &valueBufferSize); 
     124        if (error == ERROR_SUCCESS) 
     125        { 
     126            if (!*reinterpret_cast<char*>(valueBuffer + 51)) 
     127                return E_FAIL; 
     128        } 
    93129 
    94130        return S_OK; 
Note: See TracChangeset for help on using the changeset viewer.