00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "vmsFileExtensionInOs.h"
00009
00010 #ifdef _DEBUG
00011 #undef THIS_FILE
00012 static char THIS_FILE[]=__FILE__;
00013 #define new DEBUG_NEW
00014 #endif
00015
00016 vmsFileExtensionInOs::vmsFileExtensionInOs()
00017 {
00018
00019 }
00020
00021 vmsFileExtensionInOs::~vmsFileExtensionInOs()
00022 {
00023
00024 }
00025
00026 fsString vmsFileExtensionInOs::GetAssociation(LPCSTR pszExt, LPCSTR pszVerb)
00027 {
00028 fsString strExt; strExt = "."; strExt += pszExt;
00029
00030 CRegKey key;
00031 if (ERROR_SUCCESS != key.Open (HKEY_CLASSES_ROOT, strExt, KEY_READ))
00032 return "";
00033
00034 char sz [1000];
00035 DWORD dw = sizeof (sz);
00036 if (ERROR_SUCCESS == key.QueryValue (sz, NULL, &dw))
00037 return GetAssociation_2 (sz, pszVerb);
00038 else
00039 return GetAssociation_2 (strExt, pszVerb);
00040 }
00041
00042 fsString vmsFileExtensionInOs::GetAssociation_2(LPCSTR pszProgId, LPCSTR pszVerb)
00043 {
00044 fsString str = pszProgId;
00045 str += "\\shell\\"; str += pszVerb; str += "\\command";
00046
00047 CRegKey key;
00048
00049 if (ERROR_SUCCESS != key.Open (HKEY_CLASSES_ROOT, str, KEY_READ))
00050 return "";
00051
00052 char sz [MY_MAX_PATH];
00053 DWORD dw = sizeof (sz);
00054 if (ERROR_SUCCESS != key.QueryValue (sz, NULL, &dw))
00055 return "";
00056
00057 return sz;
00058 }
00059
00060 BOOL vmsFileExtensionInOs::SetAssociation(LPCSTR pszExt, LPCSTR pszVerb, LPCSTR pszValue)
00061 {
00062 fsString strExt; strExt = "."; strExt += pszExt;
00063
00064 CRegKey key;
00065 if (ERROR_SUCCESS != key.Open (HKEY_CLASSES_ROOT, strExt, KEY_READ | KEY_WRITE))
00066 {
00067 if (ERROR_SUCCESS != key.Create (HKEY_CLASSES_ROOT, strExt))
00068 return FALSE;
00069 }
00070
00071 char sz [1000];
00072 DWORD dw = sizeof (sz);
00073 if (ERROR_SUCCESS == key.QueryValue (sz, NULL, &dw))
00074 return SetAssociation_2 (sz, pszVerb, pszValue);
00075 else
00076 return SetAssociation_2 (strExt, pszVerb, pszValue);
00077 }
00078
00079 BOOL vmsFileExtensionInOs::SetAssociation_2(LPCSTR pszProgId, LPCSTR pszVerb, LPCSTR pszValue)
00080 {
00081 fsString str = pszProgId;
00082 str += "\\shell\\"; str += pszVerb; str += "\\command";
00083
00084 CRegKey key;
00085
00086 if (ERROR_SUCCESS != key.Open (HKEY_CLASSES_ROOT, str, KEY_WRITE))
00087 {
00088 if (ERROR_SUCCESS != key.Create (HKEY_CLASSES_ROOT, str))
00089 return FALSE;
00090 }
00091
00092 return ERROR_SUCCESS == key.SetValue (pszValue, NULL);
00093 }
00094
00095 BOOL vmsFileExtensionInOs::CreateAssociation(LPCSTR pszExt, LPCSTR pszProgId)
00096 {
00097 fsString strExt; strExt = "."; strExt += pszExt;
00098
00099 CRegKey key;
00100
00101 if (ERROR_SUCCESS != key.Create (HKEY_CLASSES_ROOT, strExt))
00102 return FALSE;
00103
00104 if (ERROR_SUCCESS != key.SetValue (pszProgId, NULL))
00105 return FALSE;
00106
00107 key.Close ();
00108
00109 if (ERROR_SUCCESS != key.Create (HKEY_CLASSES_ROOT, pszProgId))
00110 {
00111 if (GetLastError () != ERROR_ALREADY_EXISTS)
00112 return FALSE;
00113 }
00114
00115 return TRUE;
00116 }