xref: /trunk/main/cui/source/dialogs/winpluginlib.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1e715d8b7Sdamjan /**************************************************************
2e715d8b7Sdamjan  *
3e715d8b7Sdamjan  * Licensed to the Apache Software Foundation (ASF) under one
4e715d8b7Sdamjan  * or more contributor license agreements.  See the NOTICE file
5e715d8b7Sdamjan  * distributed with this work for additional information
6e715d8b7Sdamjan  * regarding copyright ownership.  The ASF licenses this file
7e715d8b7Sdamjan  * to you under the Apache License, Version 2.0 (the
8e715d8b7Sdamjan  * "License"); you may not use this file except in compliance
9e715d8b7Sdamjan  * with the License.  You may obtain a copy of the License at
10e715d8b7Sdamjan  *
11e715d8b7Sdamjan  *   http://www.apache.org/licenses/LICENSE-2.0
12e715d8b7Sdamjan  *
13e715d8b7Sdamjan  * Unless required by applicable law or agreed to in writing,
14e715d8b7Sdamjan  * software distributed under the License is distributed on an
15e715d8b7Sdamjan  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16e715d8b7Sdamjan  * KIND, either express or implied.  See the License for the
17e715d8b7Sdamjan  * specific language governing permissions and limitations
18e715d8b7Sdamjan  * under the License.
19e715d8b7Sdamjan  *
20e715d8b7Sdamjan  *************************************************************/
21e715d8b7Sdamjan 
22*75f04985Sdamjan // MARKER(update_precomp.py): autogen include statement, do not remove
23*75f04985Sdamjan #include "precompiled_cui.hxx"
24e715d8b7Sdamjan 
25e715d8b7Sdamjan #if defined _MSC_VER
26e715d8b7Sdamjan #pragma warning(push, 1)
27e715d8b7Sdamjan #endif
28e715d8b7Sdamjan #include <windows.h>
29e715d8b7Sdamjan #if defined _MSC_VER
30e715d8b7Sdamjan #pragma warning(pop)
31e715d8b7Sdamjan #endif
32e715d8b7Sdamjan #include <Winreg.h>
33e715d8b7Sdamjan #include <Shlwapi.h>
34e715d8b7Sdamjan #include <stdio.h>
35e715d8b7Sdamjan 
36e715d8b7Sdamjan 
37e715d8b7Sdamjan #define SO_PATH_SIZE        4096
38e715d8b7Sdamjan #define MOZ_PLUGIN_DLL_NAME "npsopluginmi.dll"
39e715d8b7Sdamjan extern "C" {
lc_isInstalled(const char * realFilePath)40e715d8b7Sdamjan int lc_isInstalled(const  char* realFilePath)
41e715d8b7Sdamjan {
42e715d8b7Sdamjan     HKEY hKeySoftware;
43e715d8b7Sdamjan     HKEY hMozillaPlugins;
44e715d8b7Sdamjan     HKEY hStarOffice;
45e715d8b7Sdamjan     char sSoPath[SO_PATH_SIZE];
46e715d8b7Sdamjan     char sPluginPath[SO_PATH_SIZE];
47e715d8b7Sdamjan 
48e715d8b7Sdamjan     LONG ret;
49e715d8b7Sdamjan     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ, &hKeySoftware);
50e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
51e715d8b7Sdamjan         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ, &hKeySoftware);
52e715d8b7Sdamjan         if(ret != ERROR_SUCCESS){
53e715d8b7Sdamjan             return -1;
54e715d8b7Sdamjan         }
55e715d8b7Sdamjan     }
56e715d8b7Sdamjan     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ, &hMozillaPlugins);
57e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
58e715d8b7Sdamjan         RegCloseKey(hKeySoftware);
59e715d8b7Sdamjan         if( ret == ERROR_FILE_NOT_FOUND)
60e715d8b7Sdamjan             return 1;
61e715d8b7Sdamjan         else
62e715d8b7Sdamjan             return -1;
63e715d8b7Sdamjan     }
64e715d8b7Sdamjan     ret = RegOpenKeyEx(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0",  0,  KEY_READ, &hStarOffice);
65e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
66e715d8b7Sdamjan         RegCloseKey(hKeySoftware);
67e715d8b7Sdamjan         RegCloseKey(hMozillaPlugins);
68e715d8b7Sdamjan         if( ret == ERROR_FILE_NOT_FOUND)
69e715d8b7Sdamjan             return 1;
70e715d8b7Sdamjan         else
71e715d8b7Sdamjan             return -1;
72e715d8b7Sdamjan     }
73e715d8b7Sdamjan 
74e715d8b7Sdamjan     if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
75e715d8b7Sdamjan         ret = -1;
76e715d8b7Sdamjan     else{
77e715d8b7Sdamjan         sprintf(sSoPath,"%s", realFilePath);
78e715d8b7Sdamjan         ret = 0;
79e715d8b7Sdamjan     }
80e715d8b7Sdamjan     //ret =  GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
81e715d8b7Sdamjan     //ret = GetEnvironmentVariable("prog", sSoPath, SO_PATH_SIZE);
82e715d8b7Sdamjan     // GetCurrentDirectory return the char number of the string
83e715d8b7Sdamjan     if(ret == 0){
84e715d8b7Sdamjan         DWORD  dType = REG_SZ;
85e715d8b7Sdamjan         DWORD  dSize = SO_PATH_SIZE;
86e715d8b7Sdamjan         ret = RegQueryValueEx (hStarOffice, "Path", NULL,  &dType , (LPBYTE) sPluginPath, &dSize);
87e715d8b7Sdamjan         if(ret == ERROR_SUCCESS){
88e715d8b7Sdamjan             if(strcmp(sPluginPath, sSoPath) == 0)
89e715d8b7Sdamjan                 ret = 0;
90e715d8b7Sdamjan             else
91e715d8b7Sdamjan                 ret = 1;
92e715d8b7Sdamjan         }
93e715d8b7Sdamjan         else
94e715d8b7Sdamjan             ret = -1;
95e715d8b7Sdamjan     }
96e715d8b7Sdamjan     else
97e715d8b7Sdamjan         ret = -1;
98e715d8b7Sdamjan     RegCloseKey(hStarOffice);
99e715d8b7Sdamjan     RegCloseKey(hMozillaPlugins);
100e715d8b7Sdamjan     RegCloseKey(hKeySoftware);
101e715d8b7Sdamjan     return ret;
102e715d8b7Sdamjan }
103e715d8b7Sdamjan 
lc_uninstallPlugin(const char *)104e715d8b7Sdamjan int lc_uninstallPlugin(const  char*)
105e715d8b7Sdamjan {
106e715d8b7Sdamjan     HKEY hKeySoftware;
107e715d8b7Sdamjan     HKEY hMozillaPlugins;
108e715d8b7Sdamjan     HKEY hStarOffice;
109e715d8b7Sdamjan 
110e715d8b7Sdamjan     LONG ret;
111e715d8b7Sdamjan     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
112e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
113e715d8b7Sdamjan         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
114e715d8b7Sdamjan         if(ret != ERROR_SUCCESS){
115e715d8b7Sdamjan             return -1;
116e715d8b7Sdamjan         }
117e715d8b7Sdamjan     }
118e715d8b7Sdamjan     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ|KEY_WRITE, &hMozillaPlugins);
119e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
120e715d8b7Sdamjan         RegCloseKey(hKeySoftware);
121e715d8b7Sdamjan         if( ret == ERROR_FILE_NOT_FOUND)
122e715d8b7Sdamjan             return 0;
123e715d8b7Sdamjan         else
124e715d8b7Sdamjan             return -1;
125e715d8b7Sdamjan     }
126e715d8b7Sdamjan 
127e715d8b7Sdamjan     ret = RegOpenKeyEx(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0",  0,  KEY_READ|KEY_WRITE, &hStarOffice);
128e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
129e715d8b7Sdamjan         RegCloseKey(hKeySoftware);
130e715d8b7Sdamjan         RegCloseKey(hMozillaPlugins);
131e715d8b7Sdamjan         if( ret == ERROR_FILE_NOT_FOUND)
132e715d8b7Sdamjan             return 0;
133e715d8b7Sdamjan         else
134e715d8b7Sdamjan             return -1;
135e715d8b7Sdamjan     }
136e715d8b7Sdamjan     RegCloseKey(hStarOffice);
137e715d8b7Sdamjan     ret = SHDeleteKey(hMozillaPlugins,  "@sun.com/npsopluginmi;version=1.0");
138e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
139e715d8b7Sdamjan         ret = -1;
140e715d8b7Sdamjan     }
141e715d8b7Sdamjan     RegFlushKey(hMozillaPlugins);
142e715d8b7Sdamjan     RegCloseKey(hMozillaPlugins);
143e715d8b7Sdamjan     RegCloseKey(hKeySoftware);
144e715d8b7Sdamjan     return ret;
145e715d8b7Sdamjan }
146e715d8b7Sdamjan 
lc_installPlugin(const char * realFilePath)147e715d8b7Sdamjan int lc_installPlugin(const  char* realFilePath)
148e715d8b7Sdamjan {
149e715d8b7Sdamjan     HKEY hKeySoftware;
150e715d8b7Sdamjan     HKEY hMozillaPlugins;
151e715d8b7Sdamjan     HKEY hStarOffice;
152e715d8b7Sdamjan     char sSoPath[SO_PATH_SIZE];
153e715d8b7Sdamjan     DWORD  sState;
154e715d8b7Sdamjan 
155e715d8b7Sdamjan 
156e715d8b7Sdamjan     LONG ret;
157e715d8b7Sdamjan     ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
158e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
159e715d8b7Sdamjan         ret = RegOpenKeyEx(HKEY_CURRENT_USER,  "SOFTWARE",  0,  KEY_READ|KEY_WRITE, &hKeySoftware);
160e715d8b7Sdamjan         if(ret != ERROR_SUCCESS){
161e715d8b7Sdamjan             return -1;
162e715d8b7Sdamjan         }
163e715d8b7Sdamjan     }
164e715d8b7Sdamjan     ret = RegOpenKeyEx(hKeySoftware,  "MozillaPlugins",  0,  KEY_READ|KEY_WRITE, &hMozillaPlugins);
165e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
166e715d8b7Sdamjan         RegCreateKeyEx(hKeySoftware,
167e715d8b7Sdamjan             "MozillaPlugins",
168e715d8b7Sdamjan             0,
169e715d8b7Sdamjan             NULL,
170e715d8b7Sdamjan             REG_OPTION_NON_VOLATILE,
171e715d8b7Sdamjan             KEY_READ|KEY_WRITE,
172e715d8b7Sdamjan             NULL,
173e715d8b7Sdamjan             &hMozillaPlugins,
174e715d8b7Sdamjan             &sState);
175e715d8b7Sdamjan     }
176e715d8b7Sdamjan 
177e715d8b7Sdamjan     ret = RegCreateKeyEx(hMozillaPlugins,
178e715d8b7Sdamjan         "@sun.com/npsopluginmi;version=1.0",
179e715d8b7Sdamjan         0,
180e715d8b7Sdamjan         NULL,
181e715d8b7Sdamjan         REG_OPTION_NON_VOLATILE,
182e715d8b7Sdamjan         KEY_READ|KEY_WRITE,
183e715d8b7Sdamjan         NULL,
184e715d8b7Sdamjan         &hStarOffice,
185e715d8b7Sdamjan         &sState);
186e715d8b7Sdamjan     if(ret != ERROR_SUCCESS){
187e715d8b7Sdamjan         RegCloseKey(hKeySoftware);
188e715d8b7Sdamjan         RegCloseKey(hMozillaPlugins);
189e715d8b7Sdamjan         return -1;
190e715d8b7Sdamjan     }
191e715d8b7Sdamjan 
192e715d8b7Sdamjan     RegFlushKey(hStarOffice);
193e715d8b7Sdamjan     RegFlushKey(hMozillaPlugins);
194e715d8b7Sdamjan 
195e715d8b7Sdamjan 
196e715d8b7Sdamjan     if((realFilePath == NULL) || (strlen(realFilePath) == 0) || (strlen(realFilePath) >= SO_PATH_SIZE))
197e715d8b7Sdamjan         ret = -1;
198e715d8b7Sdamjan     else{
199e715d8b7Sdamjan         sprintf(sSoPath,"%s", realFilePath);
200e715d8b7Sdamjan         ret = 0;
201e715d8b7Sdamjan     }
202e715d8b7Sdamjan 
203e715d8b7Sdamjan     //ret =  GetCurrentDirectory( SO_PATH_SIZE, sSoPath);
204e715d8b7Sdamjan     // GetCurrentDirectory return the char number of the string
205e715d8b7Sdamjan     if(ret == 0){
206e715d8b7Sdamjan         ret = RegSetValueEx( hStarOffice, "Path", 0, REG_SZ,  (LPBYTE) sSoPath, strlen(sSoPath) + 1);
207e715d8b7Sdamjan         if(ret == ERROR_SUCCESS)
208e715d8b7Sdamjan             ret = 0;
209e715d8b7Sdamjan         else
210e715d8b7Sdamjan             ret = -1;
211e715d8b7Sdamjan     }
212e715d8b7Sdamjan     else
213e715d8b7Sdamjan         ret = -1;
214e715d8b7Sdamjan     RegFlushKey(hStarOffice);
215e715d8b7Sdamjan     RegFlushKey(hMozillaPlugins);
216e715d8b7Sdamjan     RegCloseKey(hStarOffice);
217e715d8b7Sdamjan     RegCloseKey(hMozillaPlugins);
218e715d8b7Sdamjan     RegCloseKey(hKeySoftware);
219e715d8b7Sdamjan     RegFlushKey(HKEY_LOCAL_MACHINE);
220e715d8b7Sdamjan 
221e715d8b7Sdamjan     return ret;
222e715d8b7Sdamjan }
223e715d8b7Sdamjan }
224