132b1fd08SAndrew Rist /************************************************************** 232b1fd08SAndrew Rist * 332b1fd08SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 432b1fd08SAndrew Rist * or more contributor license agreements. See the NOTICE file 532b1fd08SAndrew Rist * distributed with this work for additional information 632b1fd08SAndrew Rist * regarding copyright ownership. The ASF licenses this file 732b1fd08SAndrew Rist * to you under the Apache License, Version 2.0 (the 832b1fd08SAndrew Rist * "License"); you may not use this file except in compliance 932b1fd08SAndrew Rist * with the License. You may obtain a copy of the License at 1032b1fd08SAndrew Rist * 1132b1fd08SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 1232b1fd08SAndrew Rist * 1332b1fd08SAndrew Rist * Unless required by applicable law or agreed to in writing, 1432b1fd08SAndrew Rist * software distributed under the License is distributed on an 1532b1fd08SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1632b1fd08SAndrew Rist * KIND, either express or implied. See the License for the 1732b1fd08SAndrew Rist * specific language governing permissions and limitations 1832b1fd08SAndrew Rist * under the License. 1932b1fd08SAndrew Rist * 2032b1fd08SAndrew Rist *************************************************************/ 2132b1fd08SAndrew Rist 22cdf0e10cSrcweir // Registrar.cpp: Implementierung der Klasse Registrar. 23cdf0e10cSrcweir // 24cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include "registrar.hxx" 27cdf0e10cSrcweir 28cdf0e10cSrcweir #ifndef _REGISTRYVALUEIMPL_HXX_ 29cdf0e10cSrcweir #include "RegistryValueImpl.hxx" 30cdf0e10cSrcweir #endif 31cdf0e10cSrcweir #include "windowsregistry.hxx" 32cdf0e10cSrcweir #include "registryexception.hxx" 33cdf0e10cSrcweir 34cdf0e10cSrcweir #include <assert.h> 35cdf0e10cSrcweir #ifdef _MSC_VER 36cdf0e10cSrcweir #pragma warning(disable: 4350 4482) 37cdf0e10cSrcweir #include "strsafe.h" 38cdf0e10cSrcweir #endif 39cdf0e10cSrcweir 40cdf0e10cSrcweir //---------------------------------------------------------- 41cdf0e10cSrcweir #ifdef DEBUG 42cdf0e10cSrcweir inline void OutputDebugStringFormat( LPCTSTR pFormat, ... ) 43cdf0e10cSrcweir { 44cdf0e10cSrcweir TCHAR buffer[1024]; 45cdf0e10cSrcweir va_list args; 46cdf0e10cSrcweir 47cdf0e10cSrcweir va_start( args, pFormat ); 48cdf0e10cSrcweir StringCchVPrintf( buffer, sizeof(buffer), pFormat, args ); 49cdf0e10cSrcweir OutputDebugString( buffer ); 50cdf0e10cSrcweir } 51cdf0e10cSrcweir #else 52cdf0e10cSrcweir static inline void OutputDebugStringFormat( LPCTSTR, ... ) 53cdf0e10cSrcweir { 54cdf0e10cSrcweir } 55cdf0e10cSrcweir #endif 56cdf0e10cSrcweir //---------------------------------------------------------- 57cdf0e10cSrcweir 58cdf0e10cSrcweir const int MSWORD = 0x1; 59cdf0e10cSrcweir const int MSEXCEL = 0x2; 60cdf0e10cSrcweir const int MSPOWERPOINT = 0x4; 61cdf0e10cSrcweir const int DEFAULT_HTML_EDITOR_FOR_IE = 0x8; 62cdf0e10cSrcweir const int HTML_EDITOR = 0x10; 63cdf0e10cSrcweir const int DEFAULT_SHELL_HTML_EDITOR = 0x20; 64cdf0e10cSrcweir 65cdf0e10cSrcweir namespace /* private */ 66cdf0e10cSrcweir { 67cdf0e10cSrcweir const std::wstring HTM_OPENWITHLIST = L".htm\\OpenWithList"; 68cdf0e10cSrcweir const std::wstring APPLICATIONS = L"Applications"; 69cdf0e10cSrcweir const std::wstring SHELL_EDIT_COMMAND = L"shell\\edit\\command"; 70cdf0e10cSrcweir const std::wstring HTML_EDIT = L"HTML Edit"; 71cdf0e10cSrcweir const std::wstring HTML_EDIT_DISPLAY_NAME = L"Edit Display Name"; 72cdf0e10cSrcweir const std::wstring SHELL_EDIT_COMMAND_BACKUP = L"Shell Edit Cmd"; 73cdf0e10cSrcweir const std::wstring DEFAULT_HTML_EDITOR = L"Default HTML Editor"; 74cdf0e10cSrcweir const std::wstring MS_IE_DEF_HTML_EDITOR = L"Software\\Microsoft\\Internet Explorer\\Default HTML Editor"; 75cdf0e10cSrcweir const std::wstring MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD = L"Software\\Microsoft\\Internet Explorer\\Default HTML Editor\\shell\\edit\\command"; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir Registrar::Registrar(const RegistrationContextInformation& RegContext) : 79cdf0e10cSrcweir m_ContextInformation(RegContext), 80*599cc5b4SOliver-Rainer Wittmann FORWARD_KEY_PREFIX(L"OpenOffice"), 81cdf0e10cSrcweir DEFAULT_VALUE_NAME(L""), 82cdf0e10cSrcweir BACKUP_VALUE_NAME(L"Backup"), 83*599cc5b4SOliver-Rainer Wittmann PRIVATE_BACKUP_KEY_NAME(L"OpenOffice.reg4msdocmsi"),//PRIVATE_BACKUP_KEY_NAME(L"soffice6.bak"), 84cdf0e10cSrcweir REGISTRATION_STATE(L"Reg4MsDocState") 85cdf0e10cSrcweir { 86cdf0e10cSrcweir m_RootKey = WindowsRegistry().GetClassesRootKey(); 87cdf0e10cSrcweir } 88cdf0e10cSrcweir 89cdf0e10cSrcweir Registrar::~Registrar() 90cdf0e10cSrcweir { 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir void Registrar::RegisterForMsWord() const 94cdf0e10cSrcweir { 95cdf0e10cSrcweir assert(m_RootKey.get()); 96cdf0e10cSrcweir 97cdf0e10cSrcweir RegisterForMsOfficeApplication( 98cdf0e10cSrcweir m_ContextInformation.GetWordDocumentFileExtension(), 99cdf0e10cSrcweir m_ContextInformation.GetWordDocumentDisplayName(), 100cdf0e10cSrcweir m_ContextInformation.GetWordDocumentDefaultIconEntry(), 101cdf0e10cSrcweir m_ContextInformation.GetWordDocumentDefaultShellCommand(), 102cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 103cdf0e10cSrcweir RegistrationContextInformation::Writer); 104cdf0e10cSrcweir 105cdf0e10cSrcweir RegisterForMsOfficeApplication( 106cdf0e10cSrcweir m_ContextInformation.GetWordTemplateFileExtension(), 107cdf0e10cSrcweir m_ContextInformation.GetWordTemplateDisplayName(), 108cdf0e10cSrcweir m_ContextInformation.GetWordTemplateDefaultIconEntry(), 109cdf0e10cSrcweir m_ContextInformation.GetWordTemplateDefaultShellCommand(), 110cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 111cdf0e10cSrcweir RegistrationContextInformation::Writer); 112cdf0e10cSrcweir 113cdf0e10cSrcweir RegisterForMsOfficeApplication( 114cdf0e10cSrcweir m_ContextInformation.GetRtfDocumentFileExtension(), 115cdf0e10cSrcweir m_ContextInformation.GetRtfDocumentDisplayName(), 116cdf0e10cSrcweir m_ContextInformation.GetRtfDocumentDefaultIconEntry(), 117cdf0e10cSrcweir m_ContextInformation.GetRtfDocumentDefaultShellCommand(), 118cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 119cdf0e10cSrcweir RegistrationContextInformation::Writer); 120cdf0e10cSrcweir 121cdf0e10cSrcweir SaveRegisteredFor(MSWORD); 122cdf0e10cSrcweir } 123cdf0e10cSrcweir 124cdf0e10cSrcweir void Registrar::UnregisterForMsWord() const 125cdf0e10cSrcweir { 126cdf0e10cSrcweir assert(m_RootKey.get()); 127cdf0e10cSrcweir 128cdf0e10cSrcweir try 129cdf0e10cSrcweir { 130cdf0e10cSrcweir UnregisterForMsOfficeApplication( 131cdf0e10cSrcweir m_ContextInformation.GetWordDocumentFileExtension()); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 134cdf0e10cSrcweir {} 135cdf0e10cSrcweir 136cdf0e10cSrcweir try 137cdf0e10cSrcweir { 138cdf0e10cSrcweir UnregisterForMsOfficeApplication( 139cdf0e10cSrcweir m_ContextInformation.GetWordTemplateFileExtension()); 140cdf0e10cSrcweir } 141cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 142cdf0e10cSrcweir {} 143cdf0e10cSrcweir 144cdf0e10cSrcweir try 145cdf0e10cSrcweir { 146cdf0e10cSrcweir UnregisterForMsOfficeApplication( 147cdf0e10cSrcweir m_ContextInformation.GetRtfDocumentFileExtension()); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 150cdf0e10cSrcweir {} 151cdf0e10cSrcweir 152cdf0e10cSrcweir SaveNotRegisteredFor(MSWORD); 153cdf0e10cSrcweir } 154cdf0e10cSrcweir 155cdf0e10cSrcweir bool Registrar::QueryPreselectForMsApplication(const std::wstring& file_extension) const 156cdf0e10cSrcweir { 157cdf0e10cSrcweir bool preselect = false; 158cdf0e10cSrcweir 159cdf0e10cSrcweir // We use HKCR else we would not see that a registration for 160cdf0e10cSrcweir // MS Office applications already exist if we are about to 161cdf0e10cSrcweir // register in HKCU\Software\Classes 162cdf0e10cSrcweir RegistryKey root_key = WindowsRegistry().GetClassesRootKey(); 163cdf0e10cSrcweir 164cdf0e10cSrcweir if (!root_key->HasSubKey(file_extension)) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir preselect = true; 167cdf0e10cSrcweir OutputDebugStringFormat( TEXT("QueryPreselect: No SubKey found for (%s), preselected!\n"), file_extension.c_str() ); 168cdf0e10cSrcweir } 169cdf0e10cSrcweir else 170cdf0e10cSrcweir { 171cdf0e10cSrcweir RegistryKey RegKey = root_key->OpenSubKey(file_extension, false); 172cdf0e10cSrcweir 173cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 176cdf0e10cSrcweir 177cdf0e10cSrcweir if (REG_SZ == RegVal->GetType() && 178cdf0e10cSrcweir IsOpenOfficeRegisteredForMsApplication(RegVal->GetDataAsUniString())) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir preselect = true; 181cdf0e10cSrcweir OutputDebugStringFormat( TEXT("QueryPreselect: (%s) registered to Office, preselected!\n"), file_extension.c_str() ); 182cdf0e10cSrcweir } 183cdf0e10cSrcweir else if ( (REG_SZ == RegVal->GetType()) && ! root_key->HasSubKey( RegVal->GetDataAsUniString() ) ) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir preselect = true; 186cdf0e10cSrcweir OutputDebugStringFormat( TEXT("QueryPreselect: (%s) registered but destination is empty, preselected!\n"), file_extension.c_str() ); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir } 189cdf0e10cSrcweir else 190cdf0e10cSrcweir { 191cdf0e10cSrcweir preselect = true; 192cdf0e10cSrcweir OutputDebugStringFormat( TEXT("QueryPreselect: No default found for SubKey (%s), preselected!\n"), file_extension.c_str() ); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir } 195cdf0e10cSrcweir return preselect; 196cdf0e10cSrcweir } 197cdf0e10cSrcweir 198cdf0e10cSrcweir bool Registrar::QueryPreselectMsWordRegistration() const 199cdf0e10cSrcweir { 200cdf0e10cSrcweir return QueryPreselectForMsApplication( 201cdf0e10cSrcweir m_ContextInformation.GetWordDocumentFileExtension()); 202cdf0e10cSrcweir } 203cdf0e10cSrcweir 204cdf0e10cSrcweir void Registrar::RegisterForMsExcel() const 205cdf0e10cSrcweir { 206cdf0e10cSrcweir assert(m_RootKey.get()); 207cdf0e10cSrcweir 208cdf0e10cSrcweir RegisterForMsOfficeApplication( 209cdf0e10cSrcweir m_ContextInformation.GetExcelSheetFileExtension(), 210cdf0e10cSrcweir m_ContextInformation.GetExcelSheetDisplayName(), 211cdf0e10cSrcweir m_ContextInformation.GetExcelSheetDefaultIconEntry(), 212cdf0e10cSrcweir m_ContextInformation.GetExcelSheetDefaultShellCommand(), 213cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 214cdf0e10cSrcweir RegistrationContextInformation::Calc); 215cdf0e10cSrcweir 216cdf0e10cSrcweir RegisterForMsOfficeApplication( 217cdf0e10cSrcweir m_ContextInformation.GetExcelTemplateFileExtension(), 218cdf0e10cSrcweir m_ContextInformation.GetExcelTemplateDisplayName(), 219cdf0e10cSrcweir m_ContextInformation.GetExcelTemplateDefaultIconEntry(), 220cdf0e10cSrcweir m_ContextInformation.GetExcelTemplateDefaultShellCommand(), 221cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 222cdf0e10cSrcweir RegistrationContextInformation::Calc); 223cdf0e10cSrcweir 224cdf0e10cSrcweir SaveRegisteredFor(MSEXCEL); 225cdf0e10cSrcweir } 226cdf0e10cSrcweir 227cdf0e10cSrcweir void Registrar::UnregisterForMsExcel() const 228cdf0e10cSrcweir { 229cdf0e10cSrcweir assert(m_RootKey.get()); 230cdf0e10cSrcweir 231cdf0e10cSrcweir try 232cdf0e10cSrcweir { 233cdf0e10cSrcweir UnregisterForMsOfficeApplication( 234cdf0e10cSrcweir m_ContextInformation.GetExcelSheetFileExtension()); 235cdf0e10cSrcweir } 236cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 237cdf0e10cSrcweir {} 238cdf0e10cSrcweir 239cdf0e10cSrcweir try 240cdf0e10cSrcweir { 241cdf0e10cSrcweir UnregisterForMsOfficeApplication( 242cdf0e10cSrcweir m_ContextInformation.GetExcelTemplateFileExtension()); 243cdf0e10cSrcweir } 244cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 245cdf0e10cSrcweir {} 246cdf0e10cSrcweir 247cdf0e10cSrcweir SaveNotRegisteredFor(MSEXCEL); 248cdf0e10cSrcweir } 249cdf0e10cSrcweir 250cdf0e10cSrcweir bool Registrar::QueryPreselectMsExcelRegistration() const 251cdf0e10cSrcweir { 252cdf0e10cSrcweir return QueryPreselectForMsApplication( 253cdf0e10cSrcweir m_ContextInformation.GetExcelSheetFileExtension()); 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir void Registrar::RegisterForMsPowerPoint() const 257cdf0e10cSrcweir { 258cdf0e10cSrcweir assert(m_RootKey.get()); 259cdf0e10cSrcweir 260cdf0e10cSrcweir RegisterForMsOfficeApplication( 261cdf0e10cSrcweir m_ContextInformation.GetPowerPointDocumentFileExtension(), 262cdf0e10cSrcweir m_ContextInformation.GetPowerPointDocumentDisplayName(), 263cdf0e10cSrcweir m_ContextInformation.GetPowerPointDocumentDefaultIconEntry(), 264cdf0e10cSrcweir m_ContextInformation.GetPowerPointDocumentDefaultShellCommand(), 265cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 266cdf0e10cSrcweir RegistrationContextInformation::Impress); 267cdf0e10cSrcweir 268cdf0e10cSrcweir RegisterForMsOfficeApplication( 269cdf0e10cSrcweir m_ContextInformation.GetPowerPointShowFileExtension(), 270cdf0e10cSrcweir m_ContextInformation.GetPowerPointShowDisplayName(), 271cdf0e10cSrcweir m_ContextInformation.GetPowerPointShowDefaultIconEntry(), 272cdf0e10cSrcweir m_ContextInformation.GetPowerPointShowDefaultShellCommand(), 273cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 274cdf0e10cSrcweir RegistrationContextInformation::Impress); 275cdf0e10cSrcweir 276cdf0e10cSrcweir RegisterForMsOfficeApplication( 277cdf0e10cSrcweir m_ContextInformation.GetPowerPointTemplateFileExtension(), 278cdf0e10cSrcweir m_ContextInformation.GetPowerPointTemplateDisplayName(), 279cdf0e10cSrcweir m_ContextInformation.GetPowerPointTemplateDefaultIconEntry(), 280cdf0e10cSrcweir m_ContextInformation.GetPowerPointTemplateDefaultShellCommand(), 281cdf0e10cSrcweir m_ContextInformation.ShellNewCommandDisplayName(), 282cdf0e10cSrcweir RegistrationContextInformation::Impress); 283cdf0e10cSrcweir 284cdf0e10cSrcweir SaveRegisteredFor(MSPOWERPOINT); 285cdf0e10cSrcweir } 286cdf0e10cSrcweir 287cdf0e10cSrcweir void Registrar::UnregisterForMsPowerPoint() const 288cdf0e10cSrcweir { 289cdf0e10cSrcweir assert(m_RootKey.get()); 290cdf0e10cSrcweir 291cdf0e10cSrcweir try 292cdf0e10cSrcweir { 293cdf0e10cSrcweir UnregisterForMsOfficeApplication( 294cdf0e10cSrcweir m_ContextInformation.GetPowerPointDocumentFileExtension()); 295cdf0e10cSrcweir } 296cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 297cdf0e10cSrcweir {} 298cdf0e10cSrcweir 299cdf0e10cSrcweir try 300cdf0e10cSrcweir { 301cdf0e10cSrcweir UnregisterForMsOfficeApplication( 302cdf0e10cSrcweir m_ContextInformation.GetPowerPointShowFileExtension()); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 305cdf0e10cSrcweir {} 306cdf0e10cSrcweir 307cdf0e10cSrcweir try 308cdf0e10cSrcweir { 309cdf0e10cSrcweir UnregisterForMsOfficeApplication( 310cdf0e10cSrcweir m_ContextInformation.GetPowerPointTemplateFileExtension()); 311cdf0e10cSrcweir } 312cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 313cdf0e10cSrcweir {} 314cdf0e10cSrcweir 315cdf0e10cSrcweir SaveNotRegisteredFor(MSPOWERPOINT); 316cdf0e10cSrcweir } 317cdf0e10cSrcweir 318cdf0e10cSrcweir //----------------------------------------- 319cdf0e10cSrcweir /* 320cdf0e10cSrcweir */ 321cdf0e10cSrcweir bool Registrar::QueryPreselectMsPowerPointRegistration() const 322cdf0e10cSrcweir { 323cdf0e10cSrcweir return QueryPreselectForMsApplication( m_ContextInformation.GetPowerPointDocumentFileExtension()) && 324cdf0e10cSrcweir QueryPreselectForMsApplication( m_ContextInformation.GetPowerPointShowFileExtension()); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir 327cdf0e10cSrcweir //----------------------------------------- 328cdf0e10cSrcweir /** The documentation says we have to 329cdf0e10cSrcweir make the following entries to register 330cdf0e10cSrcweir a html editor for the Internet Explorer 331cdf0e10cSrcweir HKCR\.htm\OpenWithList\App Friendly Name\shell\edit\command 332cdf0e10cSrcweir But the reality shows that this works only 333cdf0e10cSrcweir with Internet Explorer 5.x 334cdf0e10cSrcweir Internet Explorer 6.0 wants the follwoing 335cdf0e10cSrcweir entries: 336cdf0e10cSrcweir HKCR\.htm\OpenWithList\App.exe 337cdf0e10cSrcweir HKCR\Applications\App.ex\shell\edit\command 338cdf0e10cSrcweir */ 339cdf0e10cSrcweir void Registrar::RegisterAsHtmlEditorForInternetExplorer() const 340cdf0e10cSrcweir { 341cdf0e10cSrcweir assert(m_RootKey.get()); 342cdf0e10cSrcweir 343cdf0e10cSrcweir std::wstring OOFriendlyAppName = m_ContextInformation.GetOpenOfficeFriendlyAppName(); 344cdf0e10cSrcweir 345cdf0e10cSrcweir std::wstring RegKeyName = HTM_OPENWITHLIST + std::wstring(L"\\") + OOFriendlyAppName; 346cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->CreateSubKey(RegKeyName); 347cdf0e10cSrcweir 348cdf0e10cSrcweir RegKey = RegKey->CreateSubKey(SHELL_EDIT_COMMAND); 349cdf0e10cSrcweir 350cdf0e10cSrcweir RegistryValue RegVal( 351cdf0e10cSrcweir new RegistryValueImpl( 352cdf0e10cSrcweir DEFAULT_VALUE_NAME, 353cdf0e10cSrcweir m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, 354cdf0e10cSrcweir RegistrationContextInformation::Writer))); 355cdf0e10cSrcweir 356cdf0e10cSrcweir RegKey->SetValue(RegVal); 357cdf0e10cSrcweir 358cdf0e10cSrcweir RegKeyName = APPLICATIONS + std::wstring(L"\\") + OOFriendlyAppName; 359cdf0e10cSrcweir RegKey = m_RootKey->CreateSubKey(RegKeyName); 360cdf0e10cSrcweir 361cdf0e10cSrcweir RegVal->SetName(L"FriendlyAppName"); 362cdf0e10cSrcweir RegVal->SetValue(OOFriendlyAppName); 363cdf0e10cSrcweir RegKey->SetValue(RegVal); 364cdf0e10cSrcweir 365cdf0e10cSrcweir RegKey = RegKey->CreateSubKey(SHELL_EDIT_COMMAND); 366cdf0e10cSrcweir RegVal->SetName(DEFAULT_VALUE_NAME); 367cdf0e10cSrcweir RegVal->SetValue( 368cdf0e10cSrcweir m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, 369cdf0e10cSrcweir RegistrationContextInformation::Writer)); 370cdf0e10cSrcweir RegKey->SetValue(RegVal); 371cdf0e10cSrcweir 372cdf0e10cSrcweir SaveRegisteredFor(HTML_EDITOR); 373cdf0e10cSrcweir } 374cdf0e10cSrcweir 375cdf0e10cSrcweir void Registrar::UnregisterAsHtmlEditorForInternetExplorer() const 376cdf0e10cSrcweir { 377cdf0e10cSrcweir assert(m_RootKey.get()); 378cdf0e10cSrcweir 379cdf0e10cSrcweir try 380cdf0e10cSrcweir { 381cdf0e10cSrcweir std::wstring OOFriendlyAppName = m_ContextInformation.GetOpenOfficeFriendlyAppName(); 382cdf0e10cSrcweir 383cdf0e10cSrcweir RegistryKey aRegKey = m_RootKey->OpenSubKey( APPLICATIONS ); 384cdf0e10cSrcweir if ( aRegKey->HasSubKey( OOFriendlyAppName ) ) 385cdf0e10cSrcweir aRegKey->DeleteSubKeyTree( OOFriendlyAppName ); 386cdf0e10cSrcweir 387cdf0e10cSrcweir aRegKey = m_RootKey->OpenSubKey( HTM_OPENWITHLIST ); 388cdf0e10cSrcweir if ( aRegKey->HasSubKey( OOFriendlyAppName ) ) 389cdf0e10cSrcweir aRegKey->DeleteSubKeyTree( OOFriendlyAppName ); 390cdf0e10cSrcweir } 391cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 392cdf0e10cSrcweir {} 393cdf0e10cSrcweir 394cdf0e10cSrcweir SaveNotRegisteredFor(HTML_EDITOR); 395cdf0e10cSrcweir } 396cdf0e10cSrcweir 397cdf0e10cSrcweir void Registrar::RegisterAsDefaultHtmlEditorForInternetExplorer() const 398cdf0e10cSrcweir { 399cdf0e10cSrcweir assert(m_RootKey.get()); 400cdf0e10cSrcweir 401cdf0e10cSrcweir RegistryKey RegistrationRootKey = GetRootKeyForDefHtmlEditorForIERegistration(); 402cdf0e10cSrcweir 403cdf0e10cSrcweir RegistryKey RegKey = RegistrationRootKey->CreateSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD); 404cdf0e10cSrcweir 405cdf0e10cSrcweir RegistryValue RegVal = RegistryValue(new RegistryValueImpl(DEFAULT_VALUE_NAME, L"")); 406cdf0e10cSrcweir 407cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 408cdf0e10cSrcweir { 409cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 410cdf0e10cSrcweir 411cdf0e10cSrcweir std::wstring CmdLine = RegVal->GetDataAsUniString(); 412cdf0e10cSrcweir 413cdf0e10cSrcweir if (std::wstring::npos == CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName())) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + DEFAULT_HTML_EDITOR); 416cdf0e10cSrcweir 417cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 418cdf0e10cSrcweir BackupRegKey->CopyValue(RegKey, DEFAULT_VALUE_NAME); 419cdf0e10cSrcweir 420cdf0e10cSrcweir RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR); 421cdf0e10cSrcweir if (RegKey->HasValue(L"Description")) 422cdf0e10cSrcweir BackupRegKey->CopyValue(RegKey, L"Description"); 423cdf0e10cSrcweir } 424cdf0e10cSrcweir } 425cdf0e10cSrcweir 426cdf0e10cSrcweir RegVal->SetValue( 427cdf0e10cSrcweir m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, 428cdf0e10cSrcweir RegistrationContextInformation::Writer)); 429cdf0e10cSrcweir RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD); 430cdf0e10cSrcweir RegKey->SetValue(RegVal); 431cdf0e10cSrcweir 432cdf0e10cSrcweir RegVal->SetName(L"Description"); 433cdf0e10cSrcweir RegVal->SetValue(m_ContextInformation.GetOpenOfficeFriendlyAppName()); 434cdf0e10cSrcweir RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR); 435cdf0e10cSrcweir RegKey->SetValue(RegVal); 436cdf0e10cSrcweir 437cdf0e10cSrcweir SaveRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE); 438cdf0e10cSrcweir } 439cdf0e10cSrcweir 440cdf0e10cSrcweir void Registrar::UnregisterAsDefaultHtmlEditorForInternetExplorer() const 441cdf0e10cSrcweir { 442cdf0e10cSrcweir assert(m_RootKey.get()); 443cdf0e10cSrcweir 444cdf0e10cSrcweir RegistryKey RegistrationRootKey = GetRootKeyForDefHtmlEditorForIERegistration(); 445cdf0e10cSrcweir 446cdf0e10cSrcweir RegistryKey RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD); 447cdf0e10cSrcweir 448cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 451cdf0e10cSrcweir 452cdf0e10cSrcweir std::wstring CmdLine = RegVal->GetDataAsUniString(); 453cdf0e10cSrcweir 454cdf0e10cSrcweir if (std::wstring::npos != CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName())) 455cdf0e10cSrcweir { 456cdf0e10cSrcweir RegistryKey BackupRegKey = m_RootKey->OpenSubKey(PRIVATE_BACKUP_KEY_NAME); 457cdf0e10cSrcweir 458cdf0e10cSrcweir if (BackupRegKey->HasSubKey(DEFAULT_HTML_EDITOR)) 459cdf0e10cSrcweir { 460cdf0e10cSrcweir BackupRegKey = BackupRegKey->OpenSubKey(DEFAULT_HTML_EDITOR); 461cdf0e10cSrcweir 462cdf0e10cSrcweir if (BackupRegKey->HasValue(DEFAULT_VALUE_NAME)) 463cdf0e10cSrcweir RegKey->CopyValue(BackupRegKey, DEFAULT_VALUE_NAME); 464cdf0e10cSrcweir else 465cdf0e10cSrcweir RegKey->DeleteValue(DEFAULT_VALUE_NAME); 466cdf0e10cSrcweir 467cdf0e10cSrcweir RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR); 468cdf0e10cSrcweir 469cdf0e10cSrcweir if (BackupRegKey->HasValue(L"Description")) 470cdf0e10cSrcweir RegKey->CopyValue(BackupRegKey, L"Description"); 471cdf0e10cSrcweir else 472cdf0e10cSrcweir RegKey->DeleteValue(L"Description"); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir else 475cdf0e10cSrcweir { 476cdf0e10cSrcweir RegKey->DeleteValue(DEFAULT_VALUE_NAME); 477cdf0e10cSrcweir RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR); 478cdf0e10cSrcweir RegKey->DeleteValue(L"Description"); 479cdf0e10cSrcweir } 480cdf0e10cSrcweir } 481cdf0e10cSrcweir } 482cdf0e10cSrcweir 483cdf0e10cSrcweir SaveNotRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE); 484cdf0e10cSrcweir } 485cdf0e10cSrcweir 486cdf0e10cSrcweir void Registrar::RegisterAsDefaultShellHtmlEditor() const 487cdf0e10cSrcweir { 488cdf0e10cSrcweir assert(m_RootKey.get()); 489cdf0e10cSrcweir 490cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->CreateSubKey(L".htm"); 491cdf0e10cSrcweir 492cdf0e10cSrcweir RegistryValue RegVal = RegistryValue( 493cdf0e10cSrcweir new RegistryValueImpl(DEFAULT_VALUE_NAME, L"")); 494cdf0e10cSrcweir 495cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 496cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 497cdf0e10cSrcweir 498cdf0e10cSrcweir std::wstring HtmFwdKey = RegVal->GetDataAsUniString(); 499cdf0e10cSrcweir if (0 == HtmFwdKey.length() || !m_RootKey->HasSubKey(HtmFwdKey)) 500cdf0e10cSrcweir HtmFwdKey = L".htm"; 501cdf0e10cSrcweir 502cdf0e10cSrcweir RegKey = m_RootKey->CreateSubKey(HtmFwdKey + L"\\" + SHELL_EDIT_COMMAND); 503cdf0e10cSrcweir 504cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 507cdf0e10cSrcweir 508cdf0e10cSrcweir std::wstring CmdLine = RegVal->GetDataAsUniString(); 509cdf0e10cSrcweir 510cdf0e10cSrcweir // backup old values if we are not in place 511cdf0e10cSrcweir if (std::wstring::npos == CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName())) 512cdf0e10cSrcweir { 513cdf0e10cSrcweir RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + HTML_EDIT); 514cdf0e10cSrcweir BackupRegKey->CopyValue(RegKey, DEFAULT_VALUE_NAME, SHELL_EDIT_COMMAND_BACKUP); 515cdf0e10cSrcweir } 516cdf0e10cSrcweir } 517cdf0e10cSrcweir 518cdf0e10cSrcweir RegVal->SetValue( 519cdf0e10cSrcweir m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, 520cdf0e10cSrcweir RegistrationContextInformation::Writer)); 521cdf0e10cSrcweir 522cdf0e10cSrcweir RegKey->SetValue(RegVal); 523cdf0e10cSrcweir 524cdf0e10cSrcweir SaveRegisteredFor(DEFAULT_SHELL_HTML_EDITOR); 525cdf0e10cSrcweir } 526cdf0e10cSrcweir 527cdf0e10cSrcweir void Registrar::UnregisterAsDefaultShellHtmlEditor() const 528cdf0e10cSrcweir { 529cdf0e10cSrcweir assert(m_RootKey.get()); 530cdf0e10cSrcweir 531cdf0e10cSrcweir try 532cdf0e10cSrcweir { 533cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->OpenSubKey(L".htm"); 534cdf0e10cSrcweir 535cdf0e10cSrcweir RegistryValue RegVal = RegistryValue( 536cdf0e10cSrcweir new RegistryValueImpl(DEFAULT_VALUE_NAME, L"")); 537cdf0e10cSrcweir 538cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 539cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 540cdf0e10cSrcweir 541cdf0e10cSrcweir std::wstring HtmFwdKey = RegVal->GetDataAsUniString(); 542cdf0e10cSrcweir 543cdf0e10cSrcweir if (0 == HtmFwdKey.length() || !m_RootKey->HasSubKey(HtmFwdKey)) 544cdf0e10cSrcweir HtmFwdKey = L".htm"; 545cdf0e10cSrcweir 546cdf0e10cSrcweir RegKey = m_RootKey->OpenSubKey(HtmFwdKey + L"\\" + SHELL_EDIT_COMMAND); 547cdf0e10cSrcweir 548cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 549cdf0e10cSrcweir 550cdf0e10cSrcweir std::wstring CmdLine = RegVal->GetDataAsUniString(); 551cdf0e10cSrcweir 552cdf0e10cSrcweir if (std::wstring::npos != CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName())) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + HTML_EDIT); 555cdf0e10cSrcweir 556cdf0e10cSrcweir if (BackupRegKey->HasValue(SHELL_EDIT_COMMAND_BACKUP)) 557cdf0e10cSrcweir RegKey->CopyValue(BackupRegKey, SHELL_EDIT_COMMAND_BACKUP, DEFAULT_VALUE_NAME); 558cdf0e10cSrcweir else 559cdf0e10cSrcweir RegKey->DeleteValue(DEFAULT_VALUE_NAME); 560cdf0e10cSrcweir } 561cdf0e10cSrcweir } 562cdf0e10cSrcweir catch(RegistryKeyNotFoundException&) 563cdf0e10cSrcweir { 564cdf0e10cSrcweir } 565cdf0e10cSrcweir 566cdf0e10cSrcweir SaveNotRegisteredFor(DEFAULT_SHELL_HTML_EDITOR); 567cdf0e10cSrcweir } 568cdf0e10cSrcweir 569cdf0e10cSrcweir void Registrar::SaveRegisteredFor(int State) const 570cdf0e10cSrcweir { 571cdf0e10cSrcweir assert(m_RootKey.get()); 572cdf0e10cSrcweir 573cdf0e10cSrcweir int NewState = GetRegisterState(); 574cdf0e10cSrcweir NewState |= State; 575cdf0e10cSrcweir SetRegisterState(NewState); 576cdf0e10cSrcweir } 577cdf0e10cSrcweir 578cdf0e10cSrcweir void Registrar::SaveNotRegisteredFor(int State) const 579cdf0e10cSrcweir { 580cdf0e10cSrcweir assert(m_RootKey.get()); 581cdf0e10cSrcweir 582cdf0e10cSrcweir int NewState = GetRegisterState(); 583cdf0e10cSrcweir NewState &= ~State; 584cdf0e10cSrcweir SetRegisterState(NewState); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir 587cdf0e10cSrcweir int Registrar::GetRegisterState() const 588cdf0e10cSrcweir { 589cdf0e10cSrcweir int State = 0; 590cdf0e10cSrcweir 591cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME); 592cdf0e10cSrcweir 593cdf0e10cSrcweir if (RegKey->HasValue(REGISTRATION_STATE)) 594cdf0e10cSrcweir { 595cdf0e10cSrcweir RegistryValue RegVal = RegKey->GetValue(REGISTRATION_STATE); 596cdf0e10cSrcweir if (REG_DWORD == RegVal->GetType()) 597cdf0e10cSrcweir State = RegVal->GetDataAsInt(); 598cdf0e10cSrcweir } 599cdf0e10cSrcweir 600cdf0e10cSrcweir return State; 601cdf0e10cSrcweir } 602cdf0e10cSrcweir 603cdf0e10cSrcweir void Registrar::SetRegisterState(int NewState) const 604cdf0e10cSrcweir { 605cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME); 606cdf0e10cSrcweir RegistryValue RegVal = RegistryValue(new RegistryValueImpl(REGISTRATION_STATE, NewState)); 607cdf0e10cSrcweir RegKey->SetValue(RegVal); 608cdf0e10cSrcweir } 609cdf0e10cSrcweir 610cdf0e10cSrcweir bool Registrar::IsRegisteredFor(int State) const 611cdf0e10cSrcweir { 612cdf0e10cSrcweir assert(m_RootKey.get()); 613cdf0e10cSrcweir 614cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME); 615cdf0e10cSrcweir 616cdf0e10cSrcweir int SavedState = 0; 617cdf0e10cSrcweir 618cdf0e10cSrcweir if (RegKey->HasValue(REGISTRATION_STATE)) 619cdf0e10cSrcweir { 620cdf0e10cSrcweir RegistryValue RegVal = RegKey->GetValue(REGISTRATION_STATE); 621cdf0e10cSrcweir if (REG_DWORD == RegVal->GetType()) 622cdf0e10cSrcweir SavedState = RegVal->GetDataAsInt(); 623cdf0e10cSrcweir } 624cdf0e10cSrcweir 625cdf0e10cSrcweir return ((SavedState & State) == State); 626cdf0e10cSrcweir } 627cdf0e10cSrcweir 628cdf0e10cSrcweir //-------------------------------------- 629cdf0e10cSrcweir /** Restore the last registration state (necessary for 630cdf0e10cSrcweir Setup repair) */ 631cdf0e10cSrcweir void Registrar::RepairRegistrationState() const 632cdf0e10cSrcweir { 633cdf0e10cSrcweir assert(m_RootKey.get()); 634cdf0e10cSrcweir 635cdf0e10cSrcweir if (IsRegisteredFor(MSWORD)) 636cdf0e10cSrcweir RegisterForMsWord(); 637cdf0e10cSrcweir 638cdf0e10cSrcweir if (IsRegisteredFor(MSEXCEL)) 639cdf0e10cSrcweir RegisterForMsExcel(); 640cdf0e10cSrcweir 641cdf0e10cSrcweir if (IsRegisteredFor(MSPOWERPOINT)) 642cdf0e10cSrcweir RegisterForMsPowerPoint(); 643cdf0e10cSrcweir 644cdf0e10cSrcweir if (IsRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE)) 645cdf0e10cSrcweir RegisterAsDefaultHtmlEditorForInternetExplorer(); 646cdf0e10cSrcweir 647cdf0e10cSrcweir if (IsRegisteredFor(HTML_EDITOR)) 648cdf0e10cSrcweir RegisterAsHtmlEditorForInternetExplorer(); 649cdf0e10cSrcweir 650cdf0e10cSrcweir if (IsRegisteredFor(DEFAULT_SHELL_HTML_EDITOR)) 651cdf0e10cSrcweir RegisterAsDefaultShellHtmlEditor(); 652cdf0e10cSrcweir } 653cdf0e10cSrcweir 654cdf0e10cSrcweir /** Unregisters all and delete all Registry keys we have written */ 655cdf0e10cSrcweir void Registrar::UnregisterAllAndCleanUpRegistry() const 656cdf0e10cSrcweir { 657cdf0e10cSrcweir assert(m_RootKey.get()); 658cdf0e10cSrcweir 659cdf0e10cSrcweir if (IsRegisteredFor(MSWORD)) 660cdf0e10cSrcweir UnregisterForMsWord(); 661cdf0e10cSrcweir 662cdf0e10cSrcweir if (IsRegisteredFor(MSEXCEL)) 663cdf0e10cSrcweir UnregisterForMsExcel(); 664cdf0e10cSrcweir 665cdf0e10cSrcweir if (IsRegisteredFor(MSPOWERPOINT)) 666cdf0e10cSrcweir UnregisterForMsPowerPoint(); 667cdf0e10cSrcweir 668cdf0e10cSrcweir if (IsRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE)) 669cdf0e10cSrcweir UnregisterAsDefaultHtmlEditorForInternetExplorer(); 670cdf0e10cSrcweir 671cdf0e10cSrcweir if (IsRegisteredFor(HTML_EDITOR)) 672cdf0e10cSrcweir UnregisterAsHtmlEditorForInternetExplorer(); 673cdf0e10cSrcweir 674cdf0e10cSrcweir if (IsRegisteredFor(DEFAULT_SHELL_HTML_EDITOR)) 675cdf0e10cSrcweir UnregisterAsDefaultShellHtmlEditor(); 676cdf0e10cSrcweir 677cdf0e10cSrcweir if (m_RootKey->HasSubKey(PRIVATE_BACKUP_KEY_NAME)) 678cdf0e10cSrcweir m_RootKey->DeleteSubKeyTree(PRIVATE_BACKUP_KEY_NAME); 679cdf0e10cSrcweir } 680cdf0e10cSrcweir 681cdf0e10cSrcweir void Registrar::RegisterForMsOfficeApplication( 682cdf0e10cSrcweir const std::wstring& FileExtension, 683cdf0e10cSrcweir const std::wstring& DocumentDisplayName, 684cdf0e10cSrcweir const std::wstring& DefaultIconEntry, 685cdf0e10cSrcweir const std::wstring& DefaultShellCommand, 686cdf0e10cSrcweir const std::wstring& ShellNewCommandDisplayName, 687cdf0e10cSrcweir const RegistrationContextInformation::OFFICE_APPLICATION eOfficeApp) const 688cdf0e10cSrcweir { 689cdf0e10cSrcweir assert(m_RootKey.get()); 690cdf0e10cSrcweir 691cdf0e10cSrcweir std::wstring ForwardKeyName = FORWARD_KEY_PREFIX + FileExtension; 692cdf0e10cSrcweir 693cdf0e10cSrcweir RegistryKey ForwardKey = m_RootKey->CreateSubKey(ForwardKeyName); 694cdf0e10cSrcweir RegistryValue RegVal(new RegistryValueImpl(std::wstring(DEFAULT_VALUE_NAME), DocumentDisplayName)); 695cdf0e10cSrcweir ForwardKey->SetValue(RegVal); 696cdf0e10cSrcweir 697cdf0e10cSrcweir RegistryKey RegKey = ForwardKey->CreateSubKey(L"DefaultIcon"); 698cdf0e10cSrcweir RegVal->SetValue(DefaultIconEntry); 699cdf0e10cSrcweir RegKey->SetValue(RegVal); 700cdf0e10cSrcweir 701cdf0e10cSrcweir RegistryKey RegKeyShell = ForwardKey->CreateSubKey(L"shell"); 702cdf0e10cSrcweir RegVal->SetValue(DefaultShellCommand); 703cdf0e10cSrcweir RegKeyShell->SetValue(RegVal); 704cdf0e10cSrcweir 705cdf0e10cSrcweir RegKey = RegKeyShell->CreateSubKey(L"new"); 706cdf0e10cSrcweir RegVal->SetValue(ShellNewCommandDisplayName); 707cdf0e10cSrcweir RegKey->SetValue(RegVal); 708cdf0e10cSrcweir 709cdf0e10cSrcweir RegKey = RegKey->CreateSubKey(L"command"); 710cdf0e10cSrcweir RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::New, eOfficeApp)); 711cdf0e10cSrcweir RegKey->SetValue(RegVal); 712cdf0e10cSrcweir 713cdf0e10cSrcweir RegKey = RegKeyShell->CreateSubKey(L"open\\command"); 714cdf0e10cSrcweir RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, eOfficeApp)); 715cdf0e10cSrcweir RegKey->SetValue(RegVal); 716cdf0e10cSrcweir 717cdf0e10cSrcweir RegKey = RegKeyShell->CreateSubKey(L"print\\command"); 718cdf0e10cSrcweir RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Print, eOfficeApp)); 719cdf0e10cSrcweir RegKey->SetValue(RegVal); 720cdf0e10cSrcweir 721cdf0e10cSrcweir RegKey = RegKeyShell->CreateSubKey(L"printto\\command"); 722cdf0e10cSrcweir RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Printto, eOfficeApp)); 723cdf0e10cSrcweir RegKey->SetValue(RegVal); 724cdf0e10cSrcweir 725cdf0e10cSrcweir // set the new forward key under the appropriate extension 726cdf0e10cSrcweir RegKey = m_RootKey->CreateSubKey(FileExtension); 727cdf0e10cSrcweir 728cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 729cdf0e10cSrcweir { 730cdf0e10cSrcweir RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 731cdf0e10cSrcweir 732cdf0e10cSrcweir if (REG_SZ == RegVal->GetType()) 733cdf0e10cSrcweir { 734cdf0e10cSrcweir std::wstring str = RegVal->GetDataAsUniString(); 735cdf0e10cSrcweir if (!IsOpenOfficeRegisteredForMsApplication(str)) 736cdf0e10cSrcweir ForwardKey->CopyValue(RegKey, DEFAULT_VALUE_NAME, BACKUP_VALUE_NAME); 737cdf0e10cSrcweir } 738cdf0e10cSrcweir } 739cdf0e10cSrcweir 740cdf0e10cSrcweir RegVal->SetValue(ForwardKeyName); 741cdf0e10cSrcweir RegKey->SetValue(RegVal); 742cdf0e10cSrcweir } 743cdf0e10cSrcweir 744cdf0e10cSrcweir void Registrar::UnregisterForMsOfficeApplication(const std::wstring& FileExtension) const 745cdf0e10cSrcweir { 746cdf0e10cSrcweir std::wstring FwdRegKeyName = FORWARD_KEY_PREFIX + FileExtension; 747cdf0e10cSrcweir 748cdf0e10cSrcweir if (m_RootKey->HasSubKey(FileExtension)) 749cdf0e10cSrcweir { 750cdf0e10cSrcweir RegistryKey RegKey = m_RootKey->OpenSubKey(FileExtension); 751cdf0e10cSrcweir 752cdf0e10cSrcweir if (RegKey->HasValue(DEFAULT_VALUE_NAME)) 753cdf0e10cSrcweir { 754cdf0e10cSrcweir RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME); 755cdf0e10cSrcweir if (REG_SZ == RegVal->GetType() && 756cdf0e10cSrcweir IsOpenOfficeRegisteredForMsApplication(RegVal->GetDataAsUniString())) 757cdf0e10cSrcweir { 758cdf0e10cSrcweir RegistryKey FwdRegKey = m_RootKey->CreateSubKey(FwdRegKeyName); 759cdf0e10cSrcweir 760cdf0e10cSrcweir if (FwdRegKey->HasValue(BACKUP_VALUE_NAME)) 761cdf0e10cSrcweir RegKey->CopyValue(FwdRegKey, BACKUP_VALUE_NAME, DEFAULT_VALUE_NAME); 762cdf0e10cSrcweir else 763cdf0e10cSrcweir RegKey->DeleteValue(DEFAULT_VALUE_NAME); 764cdf0e10cSrcweir } 765cdf0e10cSrcweir } 766cdf0e10cSrcweir } 767cdf0e10cSrcweir 768cdf0e10cSrcweir if (m_RootKey->HasSubKey(FwdRegKeyName)) 769cdf0e10cSrcweir m_RootKey->DeleteSubKeyTree(FwdRegKeyName); 770cdf0e10cSrcweir } 771cdf0e10cSrcweir 772cdf0e10cSrcweir RegistryKey Registrar::GetRootKeyForDefHtmlEditorForIERegistration() const 773cdf0e10cSrcweir { 774cdf0e10cSrcweir return WindowsRegistry().GetLocalMachineKey(); 775cdf0e10cSrcweir } 776cdf0e10cSrcweir 777cdf0e10cSrcweir bool Registrar::IsOpenOfficeRegisteredForMsApplication(const std::wstring& DocumentExtensionDefValue) const 778cdf0e10cSrcweir { 779cdf0e10cSrcweir return (std::wstring::npos != DocumentExtensionDefValue.find(FORWARD_KEY_PREFIX)); 780cdf0e10cSrcweir } 781