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