| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| // UserRegistrar.cpp: Implementierung der Klasse UserRegistrar. |
| // |
| ////////////////////////////////////////////////////////////////////// |
| |
| #include "userregistrar.hxx" |
| #include "registryvalueimpl.hxx" |
| #include "windowsregistry.hxx" |
| #include "registryexception.hxx" |
| |
| #ifdef _MSC_VER |
| #pragma warning(disable : 4350) |
| #endif |
| |
| //-------------------------------------- |
| /** |
| */ |
| UserRegistrar::UserRegistrar(const RegistrationContextInformation& RegContext) : |
| Registrar(RegContext) |
| { |
| RegistryKey RegKey = WindowsRegistry().GetCurrentUserKey(); |
| m_RootKey = RegKey->OpenSubKey(L"Software\\Classes"); |
| } |
| |
| //################################### |
| // Command |
| //################################### |
| |
| //-------------------------------------- |
| /** |
| */ |
| void UserRegistrar::UnregisterAsHtmlEditorForInternetExplorer() const |
| { |
| Registrar::UnregisterAsHtmlEditorForInternetExplorer(); |
| |
| DeleteHtmFileAssociationKeys(); |
| |
| try |
| { |
| RegistryKey RegKey = m_RootKey->OpenSubKey(L"Applications"); |
| if ((0 == RegKey->GetSubValueCount()) && (0 == RegKey->GetSubKeyCount())) |
| { |
| RegKey->Close(); |
| m_RootKey->DeleteSubKey(L"Applications"); |
| } |
| } |
| catch(RegistryKeyNotFoundException&) |
| { |
| } |
| } |
| |
| //-------------------------------------- |
| /** |
| */ |
| void UserRegistrar::RegisterAsDefaultShellHtmlEditor() const |
| { |
| RegistryKey LocalHtmKey = m_RootKey->CreateSubKey(L".htm"); |
| |
| if (!LocalHtmKey->HasValue(DEFAULT_VALUE_NAME)) |
| { |
| RegistryKey HKCRKey = WindowsRegistry().GetClassesRootKey(); |
| |
| if (HKCRKey->HasSubKey(L".htm")) |
| { |
| RegistryKey RootHtmKey = HKCRKey->OpenSubKey(L".htm", false); |
| |
| if (RootHtmKey->HasValue(DEFAULT_VALUE_NAME)) |
| { |
| RegistryValue RegVal = RootHtmKey->GetValue(DEFAULT_VALUE_NAME); |
| |
| std::wstring RootHtmFwdKey = RegVal->GetDataAsUniString(); |
| |
| if (HKCRKey->HasSubKey(RootHtmFwdKey)) |
| { |
| m_RootKey->CreateSubKey(RootHtmFwdKey); |
| LocalHtmKey->CopyValue(RootHtmKey, DEFAULT_VALUE_NAME); |
| } |
| } |
| } |
| } |
| |
| // calling base class method |
| Registrar::RegisterAsDefaultShellHtmlEditor(); |
| } |
| |
| //-------------------------------------- |
| /** |
| */ |
| void UserRegistrar::UnregisterAsDefaultShellHtmlEditor() const |
| { |
| // calling base class method |
| Registrar::UnregisterAsDefaultShellHtmlEditor(); |
| DeleteHtmFileAssociationKeys(); |
| } |
| |
| //-------------------------------------- |
| /** |
| */ |
| void UserRegistrar::UnregisterForMsOfficeApplication( |
| const std::wstring& FileExtension) const |
| { |
| /// calling base class method |
| Registrar::UnregisterForMsOfficeApplication(FileExtension); |
| |
| if (m_RootKey->HasSubKey(FileExtension)) |
| { |
| RegistryKey RegKey = m_RootKey->OpenSubKey(FileExtension); |
| |
| if ((0 == RegKey->GetSubKeyCount()) && (0 == RegKey->GetSubValueCount())) |
| { |
| RegKey->Close(); |
| m_RootKey->DeleteSubKey(FileExtension); |
| } |
| } |
| } |
| |
| //-------------------------------------- |
| /** |
| */ |
| RegistryKey UserRegistrar::GetRootKeyForDefHtmlEditorForIERegistration() const |
| { |
| return WindowsRegistry().GetCurrentUserKey(); |
| } |
| |
| //-------------------------------------- |
| /** |
| */ |
| void UserRegistrar::DeleteHtmFileAssociationKeys() const |
| { |
| // Later delete the created keys if they are empty and have not changed meanwhile. |
| // Remember: if we create a new registry key in the user part of the |
| // registry, changes to that key via the merged key HKEY_CLASSES_ROOT |
| // go into the user branch HKEY_CURRENT_USER and are not visible for other users. |
| // so we must carefully detect if the keys have not changed in order to prevent accidentally |
| // deleting a key and so destroying existing associations |
| // See MSDN: "Merged View of HKEY_CLASSES_ROOT" |
| } |