コード: 全て選択
Sub MainWnd_IDM_SETEXT_MenuClick()
Dim hKey As Long,hExtKey As Long,Ret As DWord,AppFile As String,AppFile2 As String
Dim FileType As String,FileTypeLen As DWord
Dim hSubKey[2] As Long
'関連付けはされているか?
RegCreateKeyEx(HKEY_CLASSES_ROOT,"OrangeArchiverFile",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY,ByVal NULL,hKey,VarPtr(Ret))
If Ret=REG_CREATED_NEW_KEY Then
'関連付けはされていない
'OrangeArchiverFile[既定]
RegSetValueEx(hKey,"",0,REG_SZ,"OrangeArchiver 書庫ファイル",28)
'OrangeArchiverFile\DefaultIcon[既定]
RegCreateKeyEx(hKey,"DefaultIcon",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hSubKey[0],NULL)
AppFile=ZeroString(MAX_PATH)
GetModuleFileName(0,AppFile,MAX_PATH)
'長いファイル名に戻す
AppFile2=ZeroString(MAX_PATH)
GetLongPathName(AppFile,AppFile2,MAX_PATH)
AppFile=MakeStr(AppFile2)
RegSetValueEx(hSubKey[0],"",0,REG_SZ,AppFile & ",4",Len(AppFile)+3)
RegCloseKey(hSubKey[0])
'OrangeArchiverFile\shell
RegCreateKeyEx(hKey,"shell",0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY,ByVal NULL,hSubKey[0],NULL)
'OrangeArchiverFile\shell\open
RegCreateKeyEx(hSubKey[0],"open",0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY,ByVal NULL,hSubKey[1],NULL)
'OrangeArchiverFile\shell\open\command[既定]
RegCreateKeyEx(hSubKey[1],"command",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hSubKey[2],NULL)
RegSetValueEx(hSubKey[2],"",0,REG_SZ,AppFile & Ex" \q%1\q",Len(AppFile)+6)
RegCloseKey(hSubKey[2])
RegCloseKey(hSubKey[1])
RegCloseKey(hSubKey[0])
RegCreateKeyEx(HKEY_CLASSES_ROOT,".oar",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE,ByVal NULL,hExtKey,VarPtr(Ret))
If Ret=REG_CREATED_NEW_KEY Then
'.oarに何も関連付けられていない
RegSetValueEx(hExtKey,"",0,REG_SZ,"OrangeArchiverFile",28)
RegCloseKey(hExtKey)
Else
'.oarに関連付けられたアプリケーションがある
RegQueryValueEx(hExtKey,"",0,NULL,NULL,VarPtr(FileTypeLen))
FileType=ZeroString(FileTypeLen)
RegQueryValueEx(hExtKey,"",0,NULL,FileType,VarPtr(FileTypeLen))
RegSetValueEx(hExtKey,"",0,REG_SZ,"OrangeArchiverFile",28)
RegCloseKey(hExtKey)
RegSetValueEx(hKey,"",0,REG_SZ,"OrangeArchiver 書庫ファイル",28)
RegSetValueEx(hKey,"OldExt",0,REG_SZ,FileType,lstrlen(FileType)+1)
RegCloseKey(hKey)
End If
MsgBox hMainWnd,Ex"[.oar]をOrangeArchiverに関連付けました。\r\nもし[.oar]ファイルを直接開けない場合は、Windowsを再起動してください。","関連付けの設定",MB_ICONINFORMATION
Else
RegCreateKeyEx(HKEY_CLASSES_ROOT,".oar",0,NULL,REG_OPTION_NON_VOLATILE,KEY_QUERY_VALUE Or KEY_SET_VALUE,ByVal NULL,hExtKey,NULL)
'関連付けがされている
If RegQueryValueEx(hKey,"OldExt",0,NULL,NULL,VarPtr(FileTypeLen))=ERROR_SUCCESS Then
FileType=ZeroString(FileTypeLen)
RegQueryValueEx(hKey,"OldExt",0,NULL,FileType,VarPtr(FileTypeLen))
RegCreateKeyEx(HKEY_CLASSES_ROOT,".oar",0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE,ByVal NULL,hExtKey,NULL)
RegSetValueEx(hExtKey,"",0,REG_SZ,FileType,lstrlen(FileType)+1)
RegCloseKey(hExtKey)
Else
'元々関連付けられたアプリケーションはない。
RegCloseKey(hExtKey)
RegDeleteKey(HKEY_CLASSES_ROOT,".oar")
End If
RegDeleteKey(hKey,"shell\open\command")
RegDeleteKey(hKey,"shell\open")
RegDeleteKey(hKey,"shell")
RegDeleteKey(hKey,"DefaultIcon")
RegCloseKey(hKey)
RegDeleteKey(HKEY_CLASSES_ROOT,"OrangeArchiverFile")
MsgBox hMainWnd,Ex"[.oar]への関連付けを解除しました。","関連付けの解除",MB_ICONINFORMATION
End If
RefreshExt()
End Sub