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