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

Last change on this file since 717 was 717, checked in by dai, 15 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.