source: dev/trunk/ab5.0/abdev/abdev/ExtensionLink.cpp@ 717

Last change on this file since 717 was 717, checked in by dai, 16 years ago

#188への対応。UserSettingディレクトリを廃止し、正規のユーザ空間ディレクトリを取り入れた。

File size: 17.7 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5
6#ifndef ListView_SetCheckState
7 #define ListView_SetCheckState(hwndLV, i, fCheck) \
8 ListView_SetItemState(hwndLV, i, \
9 INDEXTOSTATEIMAGEMASK((fCheck)+1), LVIS_STATEIMAGEMASK)
10#endif
11
12
13
14COneExt::COneExt(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color){
15 m_bReg=bReg;
16 lstrcpy(m_szExtension,lpszExtension);
17 lstrcpy(m_szNote,lpszNote);
18 m_bWindowsSearch=bWindowsSearch;
19 TabColor=tab_color;
20}
21COneExt::~COneExt(){
22}
23
24CExtLink::CExtLink(){
25 ppobj_ExtItems=(COneExt **)malloc(1);
26 iExtItemNum=0;
27}
28CExtLink::~CExtLink(){
29 int i;
30 for(i=0;i<iExtItemNum;i++){
31 delete ppobj_ExtItems[i];
32 }
33 free(ppobj_ExtItems);
34 ppobj_ExtItems=0;
35}
36
37void CExtLink::load( const std::string &path )
38{
39 char *buffer;
40 buffer=ReadBuffer_NonErrMsg(path);
41 if(buffer){
42 int i=0;
43 char temporary[64],temp2[255],temp3[64],temp4[64];
44 while(1){
45 //関連付けをおこなうかどうかのチェック
46 BOOL bReg;
47 i=GetOneParameter(buffer,i,temporary);
48 if(temporary[0]=='\0') break;
49 bReg=atoi(temporary);
50
51 //拡張子
52 i=GetOneParameter(buffer,i,temporary);
53 if(temporary[0]=='\0') break;
54
55 //説明
56 i=GetOneParameter(buffer,i,temp2);
57 if(temp2[0]=='\0') break;
58
59 //Windows検索
60 i=GetOneParameter(buffer,i,temp3);
61 if(temp3[0]=='\0') break;
62
63 //タブの色
64 i=GetOneParameter(buffer,i,temp4);
65 if(temp4[0]=='\0') break;
66
67 DWORD dwColor;
68 sscanf(temp4,"%x",&dwColor);
69
70 add(bReg,temporary,temp2,atoi(temp3),(COLORREF)dwColor);
71
72 if(buffer[i]=='\r'&&buffer[i+1]=='\n'){
73 i+=2;
74 }
75 else break;
76 }
77
78 HeapDefaultFree(buffer);
79 }
80 else{
81 //デフォルト値をセット
82 SetInitData();
83 }
84}
85void CExtLink::save( const std::string &path )
86{
87 int i;
88 char buffer[8192];
89 buffer[0]=0;
90 for(i=0;i<iExtItemNum;i++){
91 sprintf(buffer+lstrlen(buffer),"%d,%s,%s,%d,%x\r\n",
92 ppobj_ExtItems[i]->m_bReg,
93 ppobj_ExtItems[i]->m_szExtension,
94 ppobj_ExtItems[i]->m_szNote,
95 ppobj_ExtItems[i]->m_bWindowsSearch,
96 ppobj_ExtItems[i]->TabColor);
97 }
98
99 //保存
100 WriteBuffer(path,buffer,lstrlen(buffer));
101}
102
103BOOL CExtLink::add(BOOL bReg,char *lpszExtension,char *lpszNote,BOOL bWindowsSearch,COLORREF tab_color){
104 //重複チェック
105 int i;
106 for(i=0;i<iExtItemNum;i++){
107 if(lstrcmpi(ppobj_ExtItems[i]->m_szExtension,lpszExtension)==0){
108 return 0;
109 }
110 }
111
112 ppobj_ExtItems=(COneExt **)realloc(ppobj_ExtItems,(iExtItemNum+1)*sizeof(COneExt*));
113 ppobj_ExtItems[iExtItemNum]=new COneExt(bReg,lpszExtension,lpszNote,bWindowsSearch,tab_color);
114 iExtItemNum++;
115
116 return 1;
117}
118void CExtLink::del(char *lpszExtension){
119 int i;
120 for(i=0;i<iExtItemNum;i++){
121 if(lstrcmpi(lpszExtension,ppobj_ExtItems[i]->m_szExtension)==0)
122 break;
123 }
124 if(i==iExtItemNum) return;
125
126 delete ppobj_ExtItems[i];
127
128 iExtItemNum--;
129 for(;i<iExtItemNum;i++){
130 ppobj_ExtItems[i]=ppobj_ExtItems[i+1];
131 }
132}
133
134void CExtLink::SetInitData(void){
135 ///////////////////////////////////
136 // 初期立ち上げ時用の値をセット
137 ///////////////////////////////////
138
139#ifdef THETEXT
140 add(1,"txt","テキスト ドキュメント",1,TABCOLOR_GRAY);
141 add(0,"htm","HTML ドキュメント",1,TABCOLOR_BLUE);
142 add(0,"html","HTML ドキュメント",1,TABCOLOR_BLUE);
143 add(1,"cgi","CGI ドキュメント",1,TABCOLOR_GREEN);
144 add(1,"pl","Perl ドキュメント",1,TABCOLOR_GREEN);
145 add(1,"php","PHP ドキュメント",1,TABCOLOR_RED);
146 add(1,"tpl","テンプレート ドキュメント",1,TABCOLOR_YELLOW);
147#else
148 add(1,"ab","Basic ソースコード",1,TABCOLOR_BLUE);
149 add(1,"abp","Basic ソースコード",1,TABCOLOR_BLUE);
150 add(1,"bas","Basic ソースコード",1,TABCOLOR_BLUE);
151 add(1,"sbp","サブソースコード",1,TABCOLOR_GREEN);
152 add(1,"pj","ActiveBasic プロジェクト ドキュメント",0,TABCOLOR_GRAY);
153#endif
154}
155
156void CExtLink::ResetListView(HWND hListView){
157 ListView_DeleteAllItems(hListView);
158
159 int i;
160 for(i=0; i < pobj_nv->pobj_ExtLink->iExtItemNum; i++){
161 LV_ITEM item;
162
163 //拡張子
164 item.mask=LVIF_TEXT;
165 item.pszText=ppobj_ExtItems[i]->m_szExtension;
166 item.iItem=i;
167 item.iSubItem=0;
168 ListView_InsertItem(hListView,&item);
169
170 //説明
171 item.pszText=ppobj_ExtItems[i]->m_szNote;
172 item.iItem=i;
173 item.iSubItem++;
174 ListView_SetItem(hListView,&item);
175
176 //Windows検索
177 if(ppobj_ExtItems[i]->m_bWindowsSearch)
178 item.pszText="有効";
179 else item.pszText="無効";
180 item.iItem=i;
181 item.iSubItem++;
182 ListView_SetItem(hListView,&item);
183
184 //タブの色
185 if(ppobj_ExtItems[i]->TabColor==TABCOLOR_GRAY) item.pszText="灰色";
186 else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_WHITE) item.pszText="白";
187 else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_RED) item.pszText="赤";
188 else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_GREEN) item.pszText="緑";
189 else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_BLUE) item.pszText="青";
190 else if(ppobj_ExtItems[i]->TabColor==TABCOLOR_YELLOW) item.pszText="黄色";
191 else item.pszText="ユーザー設定";
192 item.iItem=i;
193 item.iSubItem++;
194 ListView_SetItem(hListView,&item);
195
196 //チェックマーク
197 ListView_SetCheckState(hListView,i,ppobj_ExtItems[i]->m_bReg);
198 }
199}
200
201COLORREF CExtLink::GetTabColorFromFilePath( const std::string &filepath )
202{
203 //拡張子を識別し、タブの色を決定
204 char szExt[255],*lpszTemp;
205 _splitpath(filepath.c_str(),NULL,NULL,NULL,szExt);
206 if(szExt[0]=='.') lpszTemp=szExt+1;
207 else lpszTemp=szExt;
208 for(int i=0;i<iExtItemNum;i++){
209 if(lstrcmpi(lpszTemp,ppobj_ExtItems[i]->m_szExtension)==0){
210 return ppobj_ExtItems[i]->TabColor;
211 }
212 }
213 return TABCOLOR_GRAY;
214}
215
216
217BOOL CALLBACK DlgFileLinkAdd(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
218 static COneExt *pobj_OneExt;
219
220 static int TabColor;
221 switch(message){
222 case WM_INITDIALOG:
223 if(lParam){
224 pobj_OneExt=(COneExt *)lParam;
225
226 SetDlgItemText(hwnd,IDC_EXTENSION,pobj_OneExt->m_szExtension);
227 SetDlgItemText(hwnd,IDC_NOTE,pobj_OneExt->m_szNote);
228 TabColor=pobj_OneExt->TabColor;
229
230 if(pobj_OneExt->m_bWindowsSearch)
231 SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_SETCHECK,BST_CHECKED,0);
232 else
233 SendDlgItemMessage(hwnd,IDC_SEARCH_OFF,BM_SETCHECK,BST_CHECKED,0);
234
235 EnableWindow(GetDlgItem(hwnd,IDC_EXTENSION),0);
236
237 SetFocus(GetDlgItem(hwnd,IDC_NOTE));
238 }
239 else{
240 pobj_OneExt=0;
241 TabColor=TABCOLOR_GRAY;
242
243 SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_SETCHECK,BST_CHECKED,0);
244
245 SetFocus(GetDlgItem(hwnd,IDC_EXTENSION));
246 }
247
248 SendMessage(hwnd,WM_COMMAND,IDC_EXTENSION,0);
249
250 break;
251 case WM_DRAWITEM:
252 LPDRAWITEMSTRUCT pds;
253 pds=(LPDRAWITEMSTRUCT)lParam;
254
255 HBRUSH hBrush,hOldBrush;
256
257 if(wParam==IDC_COLOR_BUTTON){
258 //////////////
259 // 色を描画
260 //////////////
261
262 //ペンとブラシを生成
263 HPEN hPen,hOldPen;
264 hPen=(HPEN)GetStockObject(WHITE_PEN);
265 hBrush=CreateSolidBrush(TabColor);
266
267 //塗りつぶす
268 hOldPen=(HPEN)SelectObject(pds->hDC,hPen);
269 hOldBrush=(HBRUSH)SelectObject(pds->hDC,hBrush);
270 Rectangle(pds->hDC,0,0,pds->rcItem.right,pds->rcItem.bottom);
271 SelectObject(pds->hDC,hOldPen);
272 SelectObject(pds->hDC,hOldBrush);
273
274 //ブラシを破棄
275 DeleteObject(hBrush);
276 }
277 return 1;
278 case WM_COMMAND:
279 switch(LOWORD(wParam)){
280 case IDOK:
281 char szExtension[64];
282 GetDlgItemText(hwnd,IDC_EXTENSION,szExtension,64);
283
284 char szNote[255];
285 GetDlgItemText(hwnd,IDC_NOTE,szNote,255);
286
287 BOOL bWindowsSearch;
288 if(SendDlgItemMessage(hwnd,IDC_SEARCH_ON,BM_GETCHECK,0,0))
289 bWindowsSearch=1;
290 else bWindowsSearch=0;
291
292 if(pobj_OneExt){
293 //変更
294 lstrcpy(pobj_OneExt->m_szNote,szNote);
295 pobj_OneExt->m_bWindowsSearch=bWindowsSearch;
296 pobj_OneExt->TabColor=TabColor;
297 }
298 else{
299 //追加
300 if(!pobj_nv->pobj_ExtLink->add(1,szExtension,szNote,bWindowsSearch,TabColor)){
301 char temporary[255];
302 sprintf(temporary,"拡張子 %s は既にリストに存在します。",szExtension);
303 MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
304
305 return 1;
306 }
307 }
308
309 EndDialog(hwnd,1);
310 return 1;
311 case IDCANCEL:
312 EndDialog(hwnd,0);
313 return 1;
314 case IDC_COLOR_BUTTON:
315 POINT pos;
316 GetCursorPos(&pos);
317 extern HMENU hTabColorMenu;
318 TrackPopupMenu(hTabColorMenu,TPM_LEFTALIGN,pos.x,pos.y,0,hwnd,0);
319 return 1;
320
321 case IDC_EXTENSION:
322 if(GetWindowTextLength(GetDlgItem(hwnd,IDC_EXTENSION)))
323 EnableWindow(GetDlgItem(hwnd,IDOK),1);
324 else
325 EnableWindow(GetDlgItem(hwnd,IDOK),0);
326 return 1;
327
328 case IDM_USER_COLOR:
329 COLORREF colorUser;
330 colorUser=TabColor;
331 {
332 CHOOSECOLOR cc;
333 COLORREF CusColors[16]={
334 RGB(255,255,255),
335 RGB(0,0,0),
336 RGB(128,128,128),
337 RGB(192,192,192),
338 RGB(128,0,0),
339 RGB(255,0,0),
340 RGB(128,128,0),
341 RGB(255,255,0),
342 RGB(0,128,0),
343 RGB(0,255,0),
344 RGB(0,128,128),
345 RGB(0,255,255),
346 RGB(0,0,128),
347 RGB(0,0,255),
348 RGB(128,0,128),
349 RGB(255,0,255)};
350 cc.lStructSize=sizeof(CHOOSECOLOR);
351 cc.hwndOwner=hwnd;
352 cc.rgbResult=colorUser;
353 cc.lpCustColors=CusColors;
354 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
355 if(!ChooseColor(&cc)){
356 return 0;
357 }
358 colorUser=cc.rgbResult;
359 }
360 case IDM_GRAY:
361 case IDM_WHITE:
362 case IDM_RED:
363 case IDM_GREEN:
364 case IDM_BLUE:
365 case IDM_YELLOW:
366 if(LOWORD(wParam)==IDM_GRAY) TabColor=TABCOLOR_GRAY;
367 if(LOWORD(wParam)==IDM_WHITE) TabColor=TABCOLOR_WHITE;
368 if(LOWORD(wParam)==IDM_RED) TabColor=TABCOLOR_RED;
369 if(LOWORD(wParam)==IDM_GREEN) TabColor=TABCOLOR_GREEN;
370 if(LOWORD(wParam)==IDM_BLUE) TabColor=TABCOLOR_BLUE;
371 if(LOWORD(wParam)==IDM_YELLOW) TabColor=TABCOLOR_YELLOW;
372 if(LOWORD(wParam)==IDM_USER_COLOR) TabColor=colorUser;
373 InvalidateRect(GetDlgItem(hwnd,IDC_COLOR_BUTTON),NULL,0);
374 return 1;
375 }
376 break;
377 }
378 return 0;
379}
380
381BOOL CALLBACK DlgLinkFile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
382 int i;
383 HWND hListView;
384 char temporary[255];
385 switch(message){
386 case WM_INITDIALOG:
387 SetPosCenter(hwnd);
388
389
390
391 ///////////////////////////
392 // カラムの設定
393 ///////////////////////////
394
395 //拡張スタイル
396 DWORD dwStyle;
397 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
398 dwStyle=ListView_GetExtendedListViewStyle(hListView);
399 dwStyle|=LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES;
400 ListView_SetExtendedListViewStyle(hListView,dwStyle);
401
402 LV_COLUMN ListView_Column;
403 ListView_Column.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
404 ListView_Column.fmt=LVCFMT_LEFT;
405
406 ListView_Column.cx=50;
407 ListView_Column.pszText="拡張子";
408 ListView_Column.iSubItem=0;
409 ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
410
411 ListView_Column.cx=150;
412 ListView_Column.pszText="説明";
413 ListView_Column.iSubItem++;
414 ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
415
416 ListView_Column.cx=90;
417 ListView_Column.pszText="Windows検索";
418 ListView_Column.iSubItem++;
419 ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
420
421 ListView_Column.cx=80;
422 ListView_Column.pszText="タブの色";
423 ListView_Column.iSubItem++;
424 ListView_InsertColumn(hListView,ListView_Column.iSubItem,&ListView_Column);
425
426
427 pobj_nv->pobj_ExtLink->ResetListView(hListView);
428 break;
429 case WM_COMMAND:
430 switch(LOWORD(wParam)){
431 case IDC_ADD_BUTTON:
432 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_ADD),hwnd,(DLGPROC)DlgFileLinkAdd,0)) return 1;
433
434 pobj_nv->pobj_ExtLink->ResetListView(GetDlgItem(hwnd,IDC_EXTENSION_LIST));
435
436 return 1;
437 case IDC_EDIT_BUTTON:
438 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
439
440 for(i=0;i<ListView_GetItemCount(hListView);i++){
441 if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
442 break;
443 }
444 }
445 if(i==ListView_GetItemCount(hListView)) return 1;
446
447 if(!DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_ADD),hwnd,(DLGPROC)DlgFileLinkAdd,(LPARAM)pobj_nv->pobj_ExtLink->ppobj_ExtItems[i])) return 1;
448
449 pobj_nv->pobj_ExtLink->ResetListView(GetDlgItem(hwnd,IDC_EXTENSION_LIST));
450
451 return 1;
452 case IDC_DELETE_BUTTON:
453 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
454
455 for(i=0;i<ListView_GetItemCount(hListView);i++){
456 if(ListView_GetItemState(hListView,i,LVIS_SELECTED)){
457 ListView_GetItemText(hListView,i,0,temporary,255);
458
459 char temp2[255];
460 sprintf(temp2,"%s をリストから削除します。",temporary);
461 if(MessageBox(hwnd,temp2,APPLICATION_NAME,MB_OKCANCEL)==IDCANCEL) return 1;
462
463 ListView_DeleteItem(hListView,i);
464
465 pobj_nv->pobj_ExtLink->del(temporary);
466 break;
467 }
468 }
469 return 1;
470 case IDOK:
471 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
472
473 for(i=0;i<ListView_GetItemCount(hListView);i++){
474 pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg=ListView_GetCheckState(hListView,i);
475 }
476
477 if(MessageBox(hwnd,"指定された内容で拡張子に関するレジストリキーを登録します。よろしいですか?",APPLICATION_NAME,MB_YESNO)==IDNO)
478 return 1;
479
480 EndDialog(hwnd,1);
481 return 1;
482 case IDCANCEL:
483 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
484
485 for(i=0;i<ListView_GetItemCount(hListView);i++){
486 pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg=ListView_GetCheckState(hListView,i);
487 }
488 EndDialog(hwnd,0);
489 return 1;
490 }
491 break;
492 case WM_NOTIFY:
493 hListView=GetDlgItem(hwnd,IDC_EXTENSION_LIST);
494
495 NMHDR *hdr;
496 hdr=(NMHDR *)lParam;
497 if(hdr->hwndFrom==hListView&&hdr->code==NM_DBLCLK){
498 SendMessage(hwnd,WM_COMMAND,IDC_EDIT_BUTTON,0);
499 }
500 break;
501 }
502 return 0;
503}
504
505HKEY ClassRoot_CreateKey(char *path,char *lpszData){
506 HKEY hKey;
507 RegCreateKeyEx(HKEY_CLASSES_ROOT,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
508 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)lpszData,lstrlen(lpszData));
509 return hKey;
510}
511void ExtensionLink(HWND hwnd){
512 int i;
513 HKEY hKey;
514
515 //初期状態の重複起動で関連付けを作動しないようにする
516 pobj_nv->save();
517
518 if(DialogBox(hResInst,MAKEINTRESOURCE(IDD_EXTENSION_LINK),hwnd,(DLGPROC)DlgLinkFile)==0) return;
519
520 char szApplicationPath[MAX_PATH];
521 GetModuleFileName(hInst,szApplicationPath,MAX_PATH);
522
523 char temporary[MAX_PATH],temp2[255],temp3[255];
524 for(i=0;i<pobj_nv->pobj_ExtLink->iExtItemNum;i++){
525 if(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bReg==0) continue;
526
527 //「.拡張子」キー
528 sprintf(temp2,".%s",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
529 sprintf(temp3,"%sfile",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
530 hKey=ClassRoot_CreateKey(temp2,temp3);
531
532 sprintf(temp2,"text/plain",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
533 RegSetValueEx(hKey,"Content Type",0,REG_SZ,(const unsigned char *)temp2,lstrlen(temp2));
534
535 RegCloseKey(hKey);
536
537
538 if(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_bWindowsSearch){
539 //検索対象に含める
540 sprintf(temporary,".%s\\PersistentHandler",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
541 hKey=ClassRoot_CreateKey(temporary,"{5e941d80-bf96-11cd-b579-08002b30bfeb}");
542 RegCloseKey(hKey);
543 }
544 else{
545 //検索対象に含めない
546 sprintf(temporary,".%s\\PersistentHandler",pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension);
547 RegDeleteKey(HKEY_CLASSES_ROOT,temporary);
548 }
549
550
551 //説明
552 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp3,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
553 RegSetValueEx(hKey,NULL,0,REG_SZ,
554 (const unsigned char *)pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szNote,
555 lstrlen(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szNote));
556 RegCloseKey(hKey);
557
558
559 //アプリケーションパス
560 sprintf(temporary,"\"%s\" \"%%1\"",szApplicationPath);
561 sprintf(temp2,"%s\\shell\\open\\command",temp3);
562 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
563 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
564 RegCloseKey(hKey);
565
566
567#ifndef THETEXT
568 /////////////////////
569 // アイコン設定
570 // ※ProjectEditorのみ
571 /////////////////////
572
573 sprintf(temp2,"%s\\DefaultIcon",temp3);
574 if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"bas")==0){
575 sprintf(temporary,"\"%s\",8",szApplicationPath);
576 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
577 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
578 RegCloseKey(hKey);
579 }
580 if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"ab")==0||
581 lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"abp")==0){
582 sprintf(temporary,"\"%s\",8",szApplicationPath);
583 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
584 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
585 RegCloseKey(hKey);
586 }
587 if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"sbp")==0){
588 sprintf(temporary,"\"%s\",9",szApplicationPath);
589 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
590 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
591 RegCloseKey(hKey);
592 }
593 if(lstrcmpi(pobj_nv->pobj_ExtLink->ppobj_ExtItems[i]->m_szExtension,"pj")==0){
594 sprintf(temporary,"\"%s\",7",szApplicationPath);
595 RegCreateKeyEx(HKEY_CLASSES_ROOT,temp2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
596 RegSetValueEx(hKey,NULL,0,REG_SZ,(const unsigned char *)temporary,lstrlen(temporary));
597 RegCloseKey(hKey);
598 }
599#endif
600 }
601
602 //アイコンの関連付けを瞬時に反映させる
603 SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL );
604}
Note: See TracBrowser for help on using the repository browser.