00001
00002
00003
00004
00005 #include <ShlObj.h>
00006 #pragma comment(lib, "shell32.lib")
00007 #include "FilesAssociationBox.h"
00008
00009 #define stricmp _stricmp
00010
00011 typedef int (*fptr)(void);
00012
00013 BOOL CALLBACK FilesAssociationDlgProc (HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);
00014 BOOL ON_FILESASSOCIATIONBOX_WM_INITDIALOG(HWND hDlg,HWND hwndFocus, LPARAM lParam);
00015 BOOL ON_FILESASSOCIATIONBOX_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
00016 void ON_FILESASSOCIATIONBOX_WM_CLOSE(HWND hwnd);
00017
00018 BOOL TestRegistryKey(char *Key,char *ValueToCompare);
00019
00020 void InitCheckSCI(HWND hDlgParent);
00021 void InitCheckSCE(HWND hDlgParent);
00022 void InitCheckTST(HWND hDlgParent);
00023 void InitCheckDEM(HWND hDlgParent);
00024 void InitCheckCOS(HWND hDlgParent);
00025 void InitCheckCOSF(HWND hDlgParent);
00026 void InitCheckSAV(HWND hDlgParent);
00027 void InitCheckBIN(HWND hDlgParent);
00028 void InitCheckGRAPH(HWND hDlgParent);
00029 void InitCheckGRAPHB(HWND hDlgParent);
00030 BOOL InitCheckBox(HWND hDlgParent,char *extension);
00031
00032 void UpdateFromCheckBox(HWND hDlgParent,fptr Update,fptr Delete);
00033 BOOL UpdateSCE(void);
00034 BOOL UpdateSCI(void);
00035 BOOL UpdateTST(void);
00036 BOOL UpdateDEM(void);
00037 BOOL UpdateCOS(void);
00038 BOOL UpdateCOSF(void);
00039 BOOL UpdateSAV(void);
00040 BOOL UpdateBIN(void);
00041 BOOL UpdateGRAPH(void);
00042 BOOL UpdateGRAPHB(void);
00043 BOOL UpdateAKey(char *Clef,char *line);
00044
00045 BOOL DeleteSCE(void);
00046 BOOL DeleteSCI(void);
00047 BOOL DeleteTST(void);
00048 BOOL DeleteDEM(void);
00049 BOOL DeleteCOS(void);
00050 BOOL DeleteCOSF(void);
00051 BOOL DeleteSAV(void);
00052 BOOL DeleteBIN(void);
00053 BOOL DeleteGRAPH(void);
00054 BOOL DeleteGRAPHB(void);
00055 BOOL DeleteAKey(char *Clef);
00056
00057 char * GetWhereIsThisExe(void);
00058
00059 extern BOOL IsWindowInterface(void);
00060 extern LPTW GetTextWinScilab(void);
00061 extern int GetCurrentLanguage(void);
00062
00063 #define PATH_MAX 512
00064
00065 EXPORT void WINAPI FilesAssociationBox (HWND hwnd)
00066 {
00067 DLGPROC FilesAssociationDlgProc ;
00068
00069 FilesAssociationDlgProc = (DLGPROC) GetProcAddress((HINSTANCE)GetModuleHandle("LibScilab"),"FilesAssociationDlgProc");
00070 DialogBox((HINSTANCE)GetModuleHandle("LibScilab"),(LPCSTR)IDD_FILEASSOCIATION,hwnd,FilesAssociationDlgProc) ;
00071 }
00072
00073 BOOL CALLBACK FilesAssociationDlgProc (HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam)
00074 {
00075 switch (wMsg)
00076 {
00077 case WM_INITDIALOG:
00078 return HANDLE_WM_INITDIALOG(hDlg,wParam,lParam,ON_FILESASSOCIATIONBOX_WM_INITDIALOG);
00079
00080 case WM_COMMAND:
00081 return HANDLE_WM_COMMAND(hDlg,wParam,lParam,ON_FILESASSOCIATIONBOX_WM_COMMAND);
00082
00083 case WM_CLOSE:
00084 HANDLE_WM_DESTROY(hDlg,wParam,lParam,ON_FILESASSOCIATIONBOX_WM_CLOSE);
00085 return TRUE;
00086 }
00087
00088 return FALSE;
00089 }
00090
00091 BOOL ON_FILESASSOCIATIONBOX_WM_INITDIALOG(HWND hDlg,HWND hwndFocus, LPARAM lParam)
00092 {
00093 int CodeLanguage=GetCurrentLanguage();
00094
00095 switch (CodeLanguage)
00096 {
00097 case 0:default:
00098 SetWindowText(hDlg,"File's Association");
00099 break;
00100
00101 case 1:
00102 SetWindowText(hDlg,"Association des fichiers");
00103 break;
00104 }
00105
00106 InitCheckBox(hDlg,".sci");
00107 InitCheckBox(hDlg,".sce");
00108 InitCheckBox(hDlg,".tst");
00109 InitCheckBox(hDlg,".dem");
00110 InitCheckBox(hDlg,".cos");
00111 InitCheckBox(hDlg,".cosf");
00112 InitCheckBox(hDlg,".sav");
00113 InitCheckBox(hDlg,".bin");
00114 InitCheckBox(hDlg,".graph");
00115 InitCheckBox(hDlg,".graphb");
00116
00117 return TRUE;
00118 }
00119
00120 BOOL ON_FILESASSOCIATIONBOX_WM_COMMAND(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
00121 {
00122 switch (id)
00123 {
00124 case IDOK:
00125 {
00126 HWND hControl[10];
00127 hControl[0] = GetDlgItem(hwnd, IDC_CHECKSCI);
00128 hControl[1] = GetDlgItem(hwnd, IDC_CHECKSCE);
00129 hControl[2] = GetDlgItem(hwnd, IDC_CHECKTST);
00130 hControl[3] = GetDlgItem(hwnd, IDC_CHECKDEM);
00131 hControl[4] = GetDlgItem(hwnd, IDC_CHECKCOS);
00132 hControl[5] = GetDlgItem(hwnd, IDC_CHECKCOSF);
00133 hControl[6] = GetDlgItem(hwnd, IDC_CHECKBIN);
00134 hControl[7] = GetDlgItem(hwnd, IDC_CHECKSAV);
00135 hControl[8] = GetDlgItem(hwnd, IDC_CHECKGRAPH);
00136 hControl[9] = GetDlgItem(hwnd, IDC_CHECKGRAPHB);
00137
00138 UpdateFromCheckBox(hControl[0],&UpdateSCI,&DeleteSCI);
00139 UpdateFromCheckBox(hControl[1],&UpdateSCE,&DeleteSCE);
00140 UpdateFromCheckBox(hControl[2],&UpdateTST,&DeleteTST);
00141 UpdateFromCheckBox(hControl[3],&UpdateDEM,&DeleteDEM);
00142 UpdateFromCheckBox(hControl[4],&UpdateCOS,&DeleteCOS);
00143 UpdateFromCheckBox(hControl[5],&UpdateCOSF,&DeleteCOSF);
00144 UpdateFromCheckBox(hControl[6],&UpdateBIN,&DeleteBIN);
00145 UpdateFromCheckBox(hControl[7],&UpdateSAV,&DeleteSAV);
00146 UpdateFromCheckBox(hControl[8],&UpdateGRAPH,&DeleteGRAPH);
00147 UpdateFromCheckBox(hControl[9],&UpdateGRAPHB,&DeleteGRAPHB);
00148
00149 SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,NULL,NULL);
00150
00151 EndDialog(hwnd, IDOK);
00152 return TRUE;
00153 }
00154
00155 case IDCANCEL:
00156 {
00157 EndDialog(hwnd, IDCANCEL);
00158 return TRUE;
00159 }
00160 }
00161 return FALSE;
00162 }
00163
00164 void ON_FILESASSOCIATIONBOX_WM_CLOSE(HWND hwnd)
00165 {
00166 EndDialog (hwnd, 0L);
00167 }
00168
00169 BOOL InitCheckBox(HWND hDlgParent,char *extension)
00170 {
00171 if ( strcmp(extension,".sci")==0 )
00172 {
00173 InitCheckSCI(hDlgParent);
00174 return TRUE;
00175 }
00176
00177 if ( strcmp(extension,".sce")==0 )
00178 {
00179 InitCheckSCE(hDlgParent);
00180 return TRUE;
00181 }
00182
00183 if ( strcmp(extension,".tst")==0 )
00184 {
00185 InitCheckTST(hDlgParent);
00186 return TRUE;
00187 }
00188
00189 if ( strcmp(extension,".dem")==0 )
00190 {
00191 InitCheckDEM(hDlgParent);
00192 return TRUE;
00193 }
00194
00195 if ( strcmp(extension,".cos")==0 )
00196 {
00197 InitCheckCOS(hDlgParent);
00198 return TRUE;
00199 }
00200
00201 if ( strcmp(extension,".cosf")==0 )
00202 {
00203 InitCheckCOSF(hDlgParent);
00204 return TRUE;
00205 }
00206
00207 if ( strcmp(extension,".graph")==0 )
00208 {
00209 InitCheckGRAPH(hDlgParent);
00210 return TRUE;
00211 }
00212
00213 if ( strcmp(extension,".graphb")==0 )
00214 {
00215 InitCheckGRAPHB(hDlgParent);
00216 return TRUE;
00217 }
00218
00219 if ( strcmp(extension,".bin")==0 )
00220 {
00221 InitCheckBIN(hDlgParent);
00222 return TRUE;
00223 }
00224
00225 if ( strcmp(extension,".sav")==0 )
00226 {
00227 InitCheckSAV(hDlgParent);
00228 return TRUE;
00229 }
00230
00231 return FALSE;
00232 }
00233
00234 BOOL TestRegistryKey(char *Key,char *ValueToCompare)
00235 {
00236 BOOL bOK=TRUE;
00237 HKEY key;
00238 DWORD Length=MAX_PATH;
00239
00240 if ( RegOpenKeyEx(HKEY_CLASSES_ROOT, Key, 0, KEY_QUERY_VALUE , &key) == ERROR_SUCCESS )
00241 {
00242 char Line[MAX_PATH];
00243 if ( RegQueryValueEx(key,"", NULL, NULL, (LPBYTE)&Line, &Length) != ERROR_SUCCESS )
00244 {
00245 bOK=FALSE;
00246 }
00247 else
00248 {
00249 if ( stricmp(Line,ValueToCompare) != 0 ) bOK=FALSE;
00250 }
00251 RegCloseKey(key);
00252
00253 }
00254 else bOK=FALSE;
00255
00256 return bOK;
00257 }
00258
00259 void UpdateFromCheckBox(HWND hwnd,fptr Update,fptr Delete)
00260 {
00261 LRESULT lResult;
00262
00263 lResult = SendMessage( hwnd ,(UINT) BM_GETCHECK, (WPARAM) 0,(LPARAM) 0);
00264
00265 if (lResult == BST_CHECKED)
00266 {
00267 (Update)();
00268 }
00269
00270 if (lResult == BST_UNCHECKED)
00271 {
00272 (Delete)();
00273 }
00274 }
00275
00276 BOOL UpdateSCE(void)
00277 {
00278 BOOL bOK=TRUE;
00279 char Line[512];
00280 char *path=GetWhereIsThisExe();
00281 int Language=GetCurrentLanguage();
00282 char KeyRegistryWithLanguage[1024];
00283
00284 DeleteSCE();
00285
00286 bOK=UpdateAKey(".sce","SCE_scilab_file");
00287 if (bOK) bOK=UpdateAKey("SCE_scilab_file","SCE_scilab_file");
00288
00289 wsprintf(Line,"\"%s%s\",9",path,WSCILEX);
00290 if (bOK) bOK=UpdateAKey("SCE_scilab_file\\DefaultIcon",Line);
00291
00292 wsprintf(Line,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00293 if (bOK) bOK=UpdateAKey("SCE_scilab_file\\shell\\open\\command",Line);
00294
00295 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00296 switch (Language)
00297 {
00298 case 1:
00299 wsprintf(KeyRegistryWithLanguage,"SCE_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00300 break;
00301
00302 default :case 0:
00303 wsprintf(KeyRegistryWithLanguage,"SCE_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00304 break;
00305 }
00306 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00307
00308 wsprintf(Line,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00309 if (bOK) bOK=UpdateAKey("SCE_scilab_file\\shell\\print\\command",Line);
00310
00311 FREE(path);
00312 return bOK;
00313 }
00314
00315 BOOL UpdateSCI(void)
00316 {
00317 BOOL bOK=TRUE;
00318 char Line[512];
00319 char *path=GetWhereIsThisExe();
00320 int Language=GetCurrentLanguage();
00321 char KeyRegistryWithLanguage[1024];
00322
00323 DeleteSCI();
00324
00325 bOK=UpdateAKey(".sci","SCI_scilab_file");
00326 if (bOK) bOK=UpdateAKey("SCI_scilab_file","SCI_scilab_file");
00327
00328 wsprintf(Line,"\"%s%s\",10",path,WSCILEX);
00329 if (bOK) bOK=UpdateAKey("SCI_scilab_file\\DefaultIcon",Line);
00330
00331 wsprintf(Line,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00332 if (bOK) bOK=UpdateAKey("SCI_scilab_file\\shell\\open\\command",Line);
00333
00334 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00335 switch (Language)
00336 {
00337 case 1:
00338 wsprintf(KeyRegistryWithLanguage,"SCI_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00339 break;
00340
00341 default :case 0:
00342 wsprintf(KeyRegistryWithLanguage,"SCI_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00343 break;
00344 }
00345 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00346
00347
00348 wsprintf(Line,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00349 if (bOK) bOK=UpdateAKey("SCI_scilab_file\\shell\\print\\command",Line);
00350
00351 FREE(path);
00352 return bOK;
00353 }
00354
00355 BOOL UpdateTST(void)
00356 {
00357 BOOL bOK=TRUE;
00358 char Line[512];
00359 char *path=GetWhereIsThisExe();
00360 int Language=GetCurrentLanguage();
00361 char KeyRegistryWithLanguage[1024];
00362
00363 DeleteTST();
00364
00365 bOK=UpdateAKey(".tst","TST_scilab_file");
00366 if (bOK) bOK=UpdateAKey("TST_scilab_file","TST_scilab_file");
00367
00368 wsprintf(Line,"\"%s%s\",11",path,WSCILEX);
00369 if (bOK) bOK=UpdateAKey("TST_scilab_file\\DefaultIcon",Line);
00370
00371 wsprintf(Line,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00372 if (bOK) bOK=UpdateAKey("TST_scilab_file\\shell\\open\\command",Line);
00373
00374 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00375 switch (Language)
00376 {
00377 case 1:
00378 wsprintf(KeyRegistryWithLanguage,"TST_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00379 break;
00380
00381 default :case 0:
00382 wsprintf(KeyRegistryWithLanguage,"TST_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00383 break;
00384 }
00385 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00386
00387
00388 wsprintf(Line,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00389 if (bOK) bOK=UpdateAKey("TST_scilab_file\\shell\\print\\command",Line);
00390
00391 FREE(path);
00392 return bOK;
00393 }
00394
00395 BOOL UpdateDEM(void)
00396 {
00397 BOOL bOK=TRUE;
00398 char Line[512];
00399 char *path=GetWhereIsThisExe();
00400 int Language=GetCurrentLanguage();
00401 char KeyRegistryWithLanguage[1024];
00402
00403 DeleteDEM();
00404
00405 bOK=UpdateAKey(".dem","DEM_scilab_file");
00406 if (bOK) bOK=UpdateAKey("DEM_scilab_file","DEM_scilab_file");
00407
00408 wsprintf(Line,"\"%s%s\",6",path,WSCILEX);
00409 if (bOK) bOK=UpdateAKey("DEM_scilab_file\\DefaultIcon",Line);
00410
00411 wsprintf(Line,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00412 if (bOK) bOK=UpdateAKey("DEM_scilab_file\\shell\\open\\command",Line);
00413
00414 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00415 switch (Language)
00416 {
00417 case 1:
00418 wsprintf(KeyRegistryWithLanguage,"DEM_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00419 break;
00420
00421 default :case 0:
00422 wsprintf(KeyRegistryWithLanguage,"DEM_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00423 break;
00424 }
00425 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00426
00427
00428 wsprintf(Line,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00429 if (bOK) bOK=UpdateAKey("DEM_scilab_file\\shell\\print\\command",Line);
00430
00431 FREE(path);
00432 return bOK;
00433 }
00434
00435 BOOL UpdateCOS(void)
00436 {
00437 BOOL bOK=TRUE;
00438 char Line[512];
00439 char *path=GetWhereIsThisExe();
00440 int Language=GetCurrentLanguage();
00441 char KeyRegistryWithLanguage[1024];
00442
00443 DeleteCOS();
00444
00445 bOK=UpdateAKey(".cos","COS_scilab_file");
00446 if (bOK) bOK=UpdateAKey("COS_scilab_file","COS_scilab_file");
00447
00448 wsprintf(Line,"\"%s%s\",4",path,WSCILEX);
00449 if (bOK) bOK=UpdateAKey("COS_scilab_file\\DefaultIcon",Line);
00450
00451 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00452 switch (Language)
00453 {
00454 case 1:
00455 wsprintf(KeyRegistryWithLanguage,"COS_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00456 break;
00457
00458 default :case 0:
00459 wsprintf(KeyRegistryWithLanguage,"COS_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00460 break;
00461 }
00462 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00463
00464
00465 FREE(path);
00466 return bOK;
00467 }
00468
00469 BOOL UpdateCOSF(void)
00470 {
00471 BOOL bOK=TRUE;
00472 char Line[512];
00473 char *path=GetWhereIsThisExe();
00474 int Language=GetCurrentLanguage();
00475 char KeyRegistryWithLanguage[1024];
00476
00477 DeleteCOSF();
00478
00479 bOK=UpdateAKey(".cosf","COSF_scilab_file");
00480 if (bOK) bOK=UpdateAKey("COSF_scilab_file","COSF_scilab_file");
00481
00482 wsprintf(Line,"\"%s%s\",5",path,WSCILEX);
00483 if (bOK) bOK=UpdateAKey("COSF_scilab_file\\DefaultIcon",Line);
00484
00485 wsprintf(Line,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00486 if (bOK) bOK=UpdateAKey("COSF_scilab_file\\shell\\open\\command",Line);
00487
00488 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00489 switch (Language)
00490 {
00491 case 1:
00492 wsprintf(KeyRegistryWithLanguage,"COSF_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00493 break;
00494
00495 default :case 0:
00496 wsprintf(KeyRegistryWithLanguage,"COSF_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00497 break;
00498 }
00499 if (bOK) bOK=UpdateAKey(KeyRegistryWithLanguage,Line);
00500
00501
00502 FREE(path);
00503 return bOK;
00504 }
00505
00506 BOOL UpdateSAV(void)
00507 {
00508 BOOL bOK=TRUE;
00509 char Line[512];
00510 char *path=GetWhereIsThisExe();
00511
00512 DeleteSAV();
00513
00514 bOK=UpdateAKey(".sav","SAV_scilab_file");
00515 if (bOK) bOK=UpdateAKey("SAV_scilab_file","SAV_scilab_file");
00516
00517 wsprintf(Line,"\"%s%s\",8",path,WSCILEX);
00518 if (bOK) bOK=UpdateAKey("SAV_scilab_file\\DefaultIcon",Line);
00519
00520 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00521 if (bOK) bOK=UpdateAKey("SAV_scilab_file\\shell\\open\\command",Line);
00522
00523 FREE(path);
00524 return bOK;
00525 }
00526
00527 BOOL UpdateBIN(void)
00528 {
00529 BOOL bOK=TRUE;
00530 char Line[512];
00531 char *path=GetWhereIsThisExe();
00532
00533 DeleteBIN();
00534
00535 bOK=UpdateAKey(".bin","BIN_scilab_file");
00536 if (bOK) bOK=UpdateAKey("BIN_scilab_file","BIN_scilab_file");
00537
00538 wsprintf(Line,"\"%s%s\",3",path,WSCILEX);
00539 if (bOK) bOK=UpdateAKey("BIN_scilab_file\\DefaultIcon",Line);
00540
00541 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00542 if (bOK) bOK=UpdateAKey("BIN_scilab_file\\shell\\open\\command",Line);
00543
00544 FREE(path);
00545 return bOK;
00546 }
00547
00548 BOOL UpdateGRAPH(void)
00549 {
00550 BOOL bOK=TRUE;
00551 char Line[512];
00552 char *path=GetWhereIsThisExe();
00553
00554 DeleteGRAPH();
00555
00556 bOK=UpdateAKey(".graph","GRAPH_scilab_file");
00557 if (bOK) bOK=UpdateAKey("GRAPH_scilab_file","GRAPH_scilab_file");
00558
00559 wsprintf(Line,"\"%s%s\",7",path,WSCILEX);
00560 if (bOK) bOK=UpdateAKey("GRAPH_scilab_file\\DefaultIcon",Line);
00561
00562 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00563 if (bOK) bOK=UpdateAKey("GRAPH_scilab_file\\shell\\open\\command",Line);
00564
00565 FREE(path);
00566 return bOK;
00567 }
00568
00569 BOOL UpdateGRAPHB(void)
00570 {
00571 BOOL bOK=TRUE;
00572 char Line[512];
00573 char *path=GetWhereIsThisExe();
00574
00575 DeleteGRAPHB();
00576
00577 bOK=UpdateAKey(".graphb","GRAPHB_scilab_file");
00578 if (bOK) bOK=UpdateAKey("GRAPHB_scilab_file","GRAPHB_scilab_file");
00579
00580 wsprintf(Line,"\"%s%s\",7",path,WSCILEX);
00581 if (bOK) bOK=UpdateAKey("GRAPHB_scilab_file\\DefaultIcon",Line);
00582
00583 wsprintf(Line,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00584 if (bOK) bOK=UpdateAKey("GRAPHB_scilab_file\\shell\\open\\command",Line);
00585
00586 FREE(path);
00587 return bOK;
00588 }
00589
00590 BOOL UpdateAKey(char *Clef,char *line)
00591 {
00592 HKEY key;
00593 DWORD result=0;
00594 BOOL bOK=TRUE;
00595
00596 if ( RegCreateKeyEx(HKEY_CLASSES_ROOT, Clef, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &result) == ERROR_SUCCESS )
00597 {
00598 if ( RegSetValueEx(key, "", 0, REG_SZ, (LPBYTE)line, (DWORD)(strlen(line)+1)) != ERROR_SUCCESS ) bOK=FALSE;
00599 RegFlushKey(key);
00600 RegCloseKey(key);
00601 }
00602 else bOK=FALSE;
00603
00604 return bOK;
00605 }
00606
00607 BOOL DeleteSCE(void)
00608 {
00609 BOOL bOK[2];
00610
00611 bOK[0]=DeleteAKey(".sce");
00612 bOK[1]=DeleteAKey("SCE_scilab_file");
00613 return (bOK[0] || bOK[1]);
00614 }
00615
00616 BOOL DeleteSCI(void)
00617 {
00618 BOOL bOK[2];
00619
00620 bOK[0]=DeleteAKey(".sci");
00621 bOK[1]=DeleteAKey("SCI_scilab_file");
00622 return (bOK[0] || bOK[1]);
00623 }
00624
00625 BOOL DeleteTST(void)
00626 {
00627 BOOL bOK[2];
00628
00629 bOK[0]=DeleteAKey(".tst");
00630 bOK[1]=DeleteAKey("TST_scilab_file");
00631 return (bOK[0] || bOK[1]);
00632 }
00633
00634 BOOL DeleteDEM(void)
00635 {
00636 BOOL bOK[2];
00637
00638 bOK[0]=DeleteAKey(".dem");
00639 bOK[1]=DeleteAKey("DEM_scilab_file");
00640 return (bOK[0] || bOK[1]);
00641 }
00642
00643 BOOL DeleteCOS(void)
00644 {
00645 BOOL bOK[2];
00646
00647 bOK[0]=DeleteAKey(".cos");
00648 bOK[1]=DeleteAKey("COS_scilab_file");
00649 return (bOK[0] || bOK[1]);
00650 }
00651
00652 BOOL DeleteCOSF(void)
00653 {
00654 BOOL bOK[2];
00655
00656 bOK[0]=DeleteAKey(".cosf");
00657 bOK[1]=DeleteAKey("COSF_scilab_file");
00658 return (bOK[0] || bOK[1]);
00659 }
00660
00661 BOOL DeleteBIN(void)
00662 {
00663 BOOL bOK[2];
00664
00665 bOK[0]=DeleteAKey(".bin");
00666 bOK[1]=DeleteAKey("BIN_scilab_file");
00667 return (bOK[0] || bOK[1]);
00668 }
00669
00670 BOOL DeleteSAV(void)
00671 {
00672 BOOL bOK[2];
00673
00674 bOK[0]=DeleteAKey(".sav");
00675 bOK[1]=DeleteAKey("SAV_scilab_file");
00676 return (bOK[0] || bOK[1]);
00677 }
00678
00679 BOOL DeleteGRAPH(void)
00680 {
00681 BOOL bOK[2];
00682
00683 bOK[0]=DeleteAKey(".graph");
00684 bOK[1]=DeleteAKey("GRAPH_scilab_file");
00685 return (bOK[0] || bOK[1]);
00686 }
00687
00688 BOOL DeleteGRAPHB(void)
00689 {
00690 BOOL bOK[2];
00691
00692 bOK[0]=DeleteAKey(".graphb");
00693 bOK[1]=DeleteAKey("GRAPHB_scilab_file");
00694 return (bOK[0] || bOK[1]);
00695 }
00696
00697 BOOL DeleteAKey(char *Clef)
00698 {
00699 BOOL bOK=TRUE;
00700
00701 if ( SHDeleteKey(HKEY_CLASSES_ROOT,Clef) != ERROR_SUCCESS ) bOK=FALSE;
00702
00703 return bOK;
00704 }
00705
00706 char * GetWhereIsThisExe(void)
00707 {
00708 LPSTR tail;
00709 char *fullfilename=NULL;
00710 fullfilename=(char*)MALLOC(sizeof(char)*MAX_PATH);
00711
00712 GetModuleFileName(GetModuleHandle(NULL),fullfilename,MAX_PATH);
00713
00714 if ((tail = strrchr (fullfilename, '\\')) != (LPSTR) NULL)
00715 {
00716 tail++;
00717 *tail = '\0';
00718 }
00719
00720 return (char*)fullfilename;
00721 }
00722
00723 void InitCheckSCI(HWND hDlgParent)
00724 {
00725 BOOL bOK[5];
00726 char Key[PATH_MAX];
00727 char KeyENG[PATH_MAX];
00728 char KeyFR[PATH_MAX];
00729 char GoodValue[PATH_MAX];
00730 char *path=GetWhereIsThisExe();
00731 HWND hControlCheckBoxSCI = GetDlgItem(hDlgParent, IDC_CHECKSCI );
00732
00733 wsprintf(Key,"%s",".sci");
00734 wsprintf(GoodValue,"%s","SCI_scilab_file");
00735 bOK[0]=TestRegistryKey(Key,GoodValue);
00736
00737 wsprintf(Key,"%s","SCI_scilab_file\\DefaultIcon");
00738 wsprintf(GoodValue,"\"%s%s\",10",path,WSCILEX);
00739 bOK[1]=TestRegistryKey(Key,GoodValue);
00740
00741 wsprintf(Key,"%s","SCI_scilab_file\\shell\\open\\command");
00742 wsprintf(GoodValue,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00743 bOK[2]=TestRegistryKey(Key,GoodValue);
00744
00745 wsprintf(KeyFR,"SCI_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00746 wsprintf(KeyENG,"SCI_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00747 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00748 bOK[3]=TestRegistryKey(KeyENG,GoodValue);
00749 if (!bOK[3]) bOK[3]=TestRegistryKey(KeyFR,GoodValue);
00750
00751 wsprintf(Key,"%s","SCI_scilab_file\\shell\\print\\command");
00752 wsprintf(GoodValue,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00753 bOK[4]=TestRegistryKey(Key,GoodValue);
00754
00755 if ( bOK[0] && bOK[1] && bOK[2] && bOK[3] && bOK[4])
00756 SendMessage(hControlCheckBoxSCI,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00757 else
00758 SendMessage(hControlCheckBoxSCI,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00759
00760 FREE(path);
00761 }
00762
00763 void InitCheckSCE(HWND hDlgParent)
00764 {
00765 BOOL bOK[5];
00766 char Key[PATH_MAX];
00767 char KeyENG[PATH_MAX];
00768 char KeyFR[PATH_MAX];
00769 char GoodValue[PATH_MAX];
00770 char *path=GetWhereIsThisExe();
00771 HWND hControlCheckBoxSCE = GetDlgItem(hDlgParent, IDC_CHECKSCE );
00772
00773 wsprintf(Key,"%s",".sce");
00774 wsprintf(GoodValue,"%s","SCE_scilab_file");
00775 bOK[0]=TestRegistryKey(Key,GoodValue);
00776
00777 wsprintf(Key,"%s","SCE_scilab_file\\DefaultIcon");
00778 wsprintf(GoodValue,"\"%s%s\",9",path,WSCILEX);
00779 bOK[1]=TestRegistryKey(Key,GoodValue);
00780
00781 wsprintf(Key,"%s","SCE_scilab_file\\shell\\open\\command");
00782 wsprintf(GoodValue,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00783 bOK[2]=TestRegistryKey(Key,GoodValue);
00784
00785 wsprintf(KeyFR,"SCE_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00786 wsprintf(KeyENG,"SCE_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00787 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00788 bOK[3]=TestRegistryKey(KeyENG,GoodValue);
00789 if (!bOK[3]) bOK[3]=TestRegistryKey(KeyFR,GoodValue);
00790
00791 wsprintf(Key,"%s","SCE_scilab_file\\shell\\print\\command");
00792 wsprintf(GoodValue,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00793 bOK[4]=TestRegistryKey(Key,GoodValue);
00794
00795 if ( bOK[0] && bOK[1] && bOK[2] && bOK[3] && bOK[4])
00796 SendMessage(hControlCheckBoxSCE,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00797 else
00798 SendMessage(hControlCheckBoxSCE,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00799
00800 FREE(path);
00801 }
00802
00803 void InitCheckTST(HWND hDlgParent)
00804 {
00805 BOOL bOK[5];
00806 char Key[PATH_MAX];
00807 char KeyENG[PATH_MAX];
00808 char KeyFR[PATH_MAX];
00809 char GoodValue[PATH_MAX];
00810 char *path=GetWhereIsThisExe();
00811 HWND hControlCheckBoxTST = GetDlgItem(hDlgParent, IDC_CHECKTST );
00812
00813 wsprintf(Key,"%s",".tst");
00814 wsprintf(GoodValue,"%s","TST_scilab_file");
00815 bOK[0]=TestRegistryKey(Key,GoodValue);
00816
00817 wsprintf(Key,"%s","TST_scilab_file\\DefaultIcon");
00818 wsprintf(GoodValue,"\"%s%s\",11",path,WSCILEX);
00819 bOK[1]=TestRegistryKey(Key,GoodValue);
00820
00821 wsprintf(Key,"%s","TST_scilab_file\\shell\\open\\command");
00822 wsprintf(GoodValue,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00823 bOK[2]=TestRegistryKey(Key,GoodValue);
00824
00825 wsprintf(KeyFR,"TST_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00826 wsprintf(KeyENG,"TST_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00827 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00828 bOK[3]=TestRegistryKey(KeyENG,GoodValue);
00829 if (!bOK[3]) bOK[3]=TestRegistryKey(KeyFR,GoodValue);
00830
00831 wsprintf(Key,"%s","TST_scilab_file\\shell\\print\\command");
00832 wsprintf(GoodValue,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00833 bOK[4]=TestRegistryKey(Key,GoodValue);
00834
00835 if ( bOK[0] && bOK[1] && bOK[2] && bOK[3] && bOK[4])
00836 SendMessage(hControlCheckBoxTST,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00837 else
00838 SendMessage(hControlCheckBoxTST,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00839
00840 FREE(path);
00841 }
00842
00843 void InitCheckDEM(HWND hDlgParent)
00844 {
00845 BOOL bOK[5];
00846 char Key[PATH_MAX];
00847 char KeyENG[PATH_MAX];
00848 char KeyFR[PATH_MAX];
00849 char GoodValue[PATH_MAX];
00850 char *path=GetWhereIsThisExe();
00851 HWND hControlCheckBoxDEM = GetDlgItem(hDlgParent, IDC_CHECKDEM );
00852
00853 wsprintf(Key,"%s",".dem");
00854 wsprintf(GoodValue,"%s","DEM_scilab_file");
00855 bOK[0]=TestRegistryKey(Key,GoodValue);
00856
00857 wsprintf(Key,"%s","DEM_scilab_file\\DefaultIcon");
00858 wsprintf(GoodValue,"\"%s%s\",6",path,WSCILEX);
00859 bOK[1]=TestRegistryKey(Key,GoodValue);
00860
00861 wsprintf(Key,"%s","DEM_scilab_file\\shell\\open\\command");
00862 wsprintf(GoodValue,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00863 bOK[2]=TestRegistryKey(Key,GoodValue);
00864
00865 wsprintf(KeyFR,"DEM_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00866 wsprintf(KeyENG,"DEM_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00867 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00868 bOK[3]=TestRegistryKey(KeyENG,GoodValue);
00869 if (!bOK[3]) bOK[3]=TestRegistryKey(KeyFR,GoodValue);
00870
00871 wsprintf(Key,"%s","DEM_scilab_file\\shell\\print\\command");
00872 wsprintf(GoodValue,"\"%s%s\" -P \"%%1\"",path,WSCILEX);
00873 bOK[4]=TestRegistryKey(Key,GoodValue);
00874
00875 if ( bOK[0] && bOK[1] && bOK[2] && bOK[3] && bOK[4])
00876 SendMessage(hControlCheckBoxDEM,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00877 else
00878 SendMessage(hControlCheckBoxDEM,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00879
00880 FREE(path);
00881 }
00882
00883 void InitCheckCOS(HWND hDlgParent)
00884 {
00885 BOOL bOK[3];
00886 char Key[PATH_MAX];
00887 char KeyENG[PATH_MAX];
00888 char KeyFR[PATH_MAX];
00889 char GoodValue[PATH_MAX];
00890 char *path=GetWhereIsThisExe();
00891 HWND hControlCheckBoxCOS = GetDlgItem(hDlgParent, IDC_CHECKCOS );
00892
00893 wsprintf(Key,"%s",".cos");
00894 wsprintf(GoodValue,"%s","COS_scilab_file");
00895 bOK[0]=TestRegistryKey(Key,GoodValue);
00896
00897 wsprintf(Key,"%s","COS_scilab_file\\DefaultIcon");
00898 wsprintf(GoodValue,"\"%s%s\",4",path,WSCILEX);
00899 bOK[1]=TestRegistryKey(Key,GoodValue);
00900
00901 wsprintf(KeyFR,"COS_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00902 wsprintf(KeyENG,"COS_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00903 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00904 bOK[2]=TestRegistryKey(KeyENG,GoodValue);
00905 if (!bOK[2]) bOK[2]=TestRegistryKey(KeyFR,GoodValue);
00906
00907 if ( bOK[0] && bOK[1] && bOK[2])
00908 SendMessage(hControlCheckBoxCOS,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00909 else
00910 SendMessage(hControlCheckBoxCOS,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00911
00912 FREE(path);
00913 }
00914
00915 void InitCheckCOSF(HWND hDlgParent)
00916 {
00917 BOOL bOK[4];
00918 char Key[PATH_MAX];
00919 char KeyENG[PATH_MAX];
00920 char KeyFR[PATH_MAX];
00921 char GoodValue[PATH_MAX];
00922 char *path=GetWhereIsThisExe();
00923 HWND hControlCheckBoxCOSF = GetDlgItem(hDlgParent, IDC_CHECKCOSF );
00924
00925 wsprintf(Key,"%s",".cosf");
00926 wsprintf(GoodValue,"%s","COSF_scilab_file");
00927 bOK[0]=TestRegistryKey(Key,GoodValue);
00928
00929 wsprintf(Key,"%s","COSF_scilab_file\\DefaultIcon");
00930 wsprintf(GoodValue,"\"%s%s\",5",path,WSCILEX);
00931 bOK[1]=TestRegistryKey(Key,GoodValue);
00932
00933 wsprintf(Key,"%s","COSF_scilab_file\\shell\\open\\command");
00934 wsprintf(GoodValue,"\"%s%s\" -O \"%%1\"",path,WSCILEX);
00935 bOK[2]=TestRegistryKey(Key,GoodValue);
00936
00937 wsprintf(KeyFR,"COSF_scilab_file\\shell\\Executer avec %s\\command",SCI_VERSION_STRING);
00938 wsprintf(KeyENG,"COSF_scilab_file\\shell\\Run with %s\\command",SCI_VERSION_STRING);
00939 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00940 bOK[3]=TestRegistryKey(KeyENG,GoodValue);
00941 if (!bOK[3]) bOK[3]=TestRegistryKey(KeyFR,GoodValue);
00942
00943 if ( bOK[0] && bOK[1] && bOK[2] && bOK[3])
00944 SendMessage(hControlCheckBoxCOSF,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00945 else
00946 SendMessage(hControlCheckBoxCOSF,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00947
00948 FREE(path);
00949 }
00950
00951 void InitCheckSAV(HWND hDlgParent)
00952 {
00953 BOOL bOK[3];
00954 char Key[PATH_MAX];
00955 char GoodValue[PATH_MAX];
00956 char *path=GetWhereIsThisExe();
00957 HWND hControlCheckBoxSAV = GetDlgItem(hDlgParent, IDC_CHECKSAV );
00958
00959 wsprintf(Key,"%s",".sav");
00960 wsprintf(GoodValue,"%s","SAV_scilab_file");
00961 bOK[0]=TestRegistryKey(Key,GoodValue);
00962
00963 wsprintf(Key,"%s","SAV_scilab_file\\DefaultIcon");
00964 wsprintf(GoodValue,"\"%s%s\",8",path,WSCILEX);
00965 bOK[1]=TestRegistryKey(Key,GoodValue);
00966
00967 wsprintf(Key,"%s","SAV_scilab_file\\shell\\open\\command");
00968 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00969 bOK[2]=TestRegistryKey(Key,GoodValue);
00970
00971 if ( bOK[0] && bOK[1] && bOK[2] )
00972 SendMessage(hControlCheckBoxSAV,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
00973 else
00974 SendMessage(hControlCheckBoxSAV,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
00975
00976 FREE(path);
00977 }
00978
00979 void InitCheckBIN(HWND hDlgParent)
00980 {
00981 BOOL bOK[3];
00982 char Key[PATH_MAX];
00983 char GoodValue[PATH_MAX];
00984 char *path=GetWhereIsThisExe();
00985 HWND hControlCheckBoxBIN = GetDlgItem(hDlgParent, IDC_CHECKBIN );
00986
00987 wsprintf(Key,"%s",".bin");
00988 wsprintf(GoodValue,"%s","BIN_scilab_file");
00989 bOK[0]=TestRegistryKey(Key,GoodValue);
00990
00991 wsprintf(Key,"%s","BIN_scilab_file\\DefaultIcon");
00992 wsprintf(GoodValue,"\"%s%s\",3",path,WSCILEX);
00993 bOK[1]=TestRegistryKey(Key,GoodValue);
00994
00995 wsprintf(Key,"%s","BIN_scilab_file\\shell\\open\\command");
00996 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
00997 bOK[2]=TestRegistryKey(Key,GoodValue);
00998
00999 if ( bOK[0] && bOK[1] && bOK[2] )
01000 SendMessage(hControlCheckBoxBIN,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
01001 else
01002 SendMessage(hControlCheckBoxBIN,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
01003
01004 FREE(path);
01005 }
01006
01007 void InitCheckGRAPH(HWND hDlgParent)
01008 {
01009 BOOL bOK[3];
01010 char Key[PATH_MAX];
01011 char GoodValue[PATH_MAX];
01012 char *path=GetWhereIsThisExe();
01013 HWND hControlCheckBoxGRAPH = GetDlgItem(hDlgParent, IDC_CHECKGRAPH );
01014
01015 wsprintf(Key,"%s",".graph");
01016 wsprintf(GoodValue,"%s","GRAPH_scilab_file");
01017 bOK[0]=TestRegistryKey(Key,GoodValue);
01018
01019 wsprintf(Key,"%s","GRAPH_scilab_file\\DefaultIcon");
01020 wsprintf(GoodValue,"\"%s%s\",7",path,WSCILEX);
01021 bOK[1]=TestRegistryKey(Key,GoodValue);
01022
01023 wsprintf(Key,"%s","GRAPH_scilab_file\\shell\\open\\command");
01024 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
01025 bOK[2]=TestRegistryKey(Key,GoodValue);
01026
01027 if ( bOK[0] && bOK[1] && bOK[2] )
01028 SendMessage(hControlCheckBoxGRAPH,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
01029 else
01030 SendMessage(hControlCheckBoxGRAPH,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
01031
01032 FREE(path);
01033 }
01034
01035 void InitCheckGRAPHB(HWND hDlgParent)
01036 {
01037 BOOL bOK[3];
01038 char Key[PATH_MAX];
01039 char GoodValue[PATH_MAX];
01040 char *path=GetWhereIsThisExe();
01041 HWND hControlCheckBoxGRAPHB = GetDlgItem(hDlgParent, IDC_CHECKGRAPHB );
01042
01043 wsprintf(Key,"%s",".graphb");
01044 wsprintf(GoodValue,"%s","GRAPHB_scilab_file");
01045 bOK[0]=TestRegistryKey(Key,GoodValue);
01046
01047 wsprintf(Key,"%s","GRAPHB_scilab_file\\DefaultIcon");
01048 wsprintf(GoodValue,"\"%s%s\",7",path,WSCILEX);
01049 bOK[1]=TestRegistryKey(Key,GoodValue);
01050
01051 wsprintf(Key,"%s","GRAPHB_scilab_file\\shell\\open\\command");
01052 wsprintf(GoodValue,"\"%s%s\" -X \"%%1\"",path,WSCILEX);
01053 bOK[2]=TestRegistryKey(Key,GoodValue);
01054
01055 if ( bOK[0] && bOK[1] && bOK[2] )
01056 SendMessage(hControlCheckBoxGRAPHB,(UINT) BM_SETCHECK,(WPARAM) BST_CHECKED,0);
01057 else
01058 SendMessage(hControlCheckBoxGRAPHB,(UINT) BM_SETCHECK,(WPARAM) BST_UNCHECKED,0);
01059
01060 FREE(path);
01061 }
01062