cgfiltyp.cpp
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:7k
源码类别:

CA认证

开发平台:

Visual C++

  1. //- -----------------------------------------------------------------
  2. //- (C) Copyright 2000 Blake V. Miller
  3. //- All Rights Reserved.
  4. //- -----------------------------------------------------------------
  5. //- File : CGFILTYP.CPP
  6. //- Author : Blake Miller
  7. //- Version : June 16, 2000
  8. //- Purpose : File Type Access
  9. //- -----------------------------------------------------------------
  10. #include "stdafx.h"
  11. #include "winerror.h"
  12. #ifndef __CGFILTYP_H__
  13. #include "CGFILTYP.H" // CGCFileTypeAccess
  14. #endif
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = "CGFILTYP.CPP";
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #endif
  20. IMPLEMENT_DYNAMIC(CGCFileTypeAccess, CObject)
  21. CGCFileTypeAccess::CGCFileTypeAccess()
  22. {
  23. }
  24. // virtual 
  25. CGCFileTypeAccess::~CGCFileTypeAccess()
  26. {
  27. }
  28. //- *****************************************************************
  29. //- Functions Affecting Registry
  30. //- *****************************************************************
  31. // virtual
  32. BOOL CGCFileTypeAccess::RegSetAllInfo(void)
  33. {
  34. RegSetExtension();
  35. RegSetDocumentType();
  36. RegSetCLSID();
  37. RegSetShellInfo();
  38. return TRUE;
  39. }
  40. // HKEY_CLASSES_ROOT.<Extension>
  41. // virtual
  42. BOOL CGCFileTypeAccess::RegSetExtension(void)
  43. {
  44. if( m_csExtension.IsEmpty() ){
  45. return TRUE;
  46. }
  47. CString csKey = "." + m_csExtension;
  48. SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentClassName);
  49. if( !m_csShellOpenCommand.IsEmpty() ){
  50. csKey += "\shell\open\command";
  51. SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand);
  52. }
  53. return TRUE;
  54. }
  55. // HKEY_CLASSES_ROOT.<Document Type>
  56. // virtual
  57. BOOL CGCFileTypeAccess::RegSetDocumentType(void)
  58. {
  59. if( m_csDocumentClassName.IsEmpty()){
  60. return TRUE;
  61. }
  62. CString csKey = m_csDocumentClassName;
  63. SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDescription);
  64. // DefaultIcon
  65. if( !m_csDocumentDefaultIcon.IsEmpty() ){
  66. csKey  = m_csDocumentClassName;
  67. csKey += "\DefaultIcon";
  68. SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csDocumentDefaultIcon);
  69. }
  70. // shellopencommand
  71. if( !m_csShellOpenCommand.IsEmpty() ){
  72. csKey  = m_csDocumentClassName;
  73. csKey += "\shell\open\command";
  74. SetRegistryValue(HKEY_CLASSES_ROOT, csKey, "", m_csShellOpenCommand);
  75. }
  76. return TRUE;
  77. }
  78. // HKEY_CLASSES_ROOTCLSID<GUID>
  79. // virtual
  80. BOOL CGCFileTypeAccess::RegSetCLSID(void)
  81. {
  82. return TRUE;
  83. }
  84. // 
  85. // virtual
  86. BOOL CGCFileTypeAccess::RegSetShellInfo(void)
  87. {
  88. return TRUE;
  89. }
  90. //- *****************************************************************
  91. //- Member Variable Get/Set Methods
  92. //- *****************************************************************
  93. void CGCFileTypeAccess::SetExtension(
  94. LPCTSTR szExtension
  95. ){
  96. m_csExtension = szExtension;
  97. }
  98. void CGCFileTypeAccess::GetExtension(
  99. CString& csExtension
  100. ) const {
  101. csExtension = m_csExtension;
  102. }
  103. void CGCFileTypeAccess::SetContentType(
  104. LPCTSTR szContentType
  105. ){
  106. m_csContentType = szContentType;
  107. }
  108. void CGCFileTypeAccess::GetContentType(
  109. CString& csContentType
  110. ) const {
  111. csContentType = m_csContentType;
  112. }
  113. void CGCFileTypeAccess::SetShellOpenCommand(
  114. LPCTSTR szShellOpenCommand
  115. ){
  116. m_csShellOpenCommand = szShellOpenCommand;
  117. }
  118. void CGCFileTypeAccess::GetShellOpenCommand(
  119. CString& csShellOpenCommand
  120. ) const {
  121. csShellOpenCommand = m_csShellOpenCommand;
  122. }
  123. void CGCFileTypeAccess::SetShellNewCommand(
  124. LPCTSTR szShellNewCommand
  125. ){
  126. m_csShellNewCommand = szShellNewCommand;
  127. }
  128. void CGCFileTypeAccess::GetShellNewCommand(
  129. CString& csShellNewCommand
  130. ) const {
  131. csShellNewCommand = m_csShellNewCommand;
  132. }
  133. void CGCFileTypeAccess::SetShellNewFileName(
  134. LPCTSTR szShellNewFileName
  135. ){
  136. m_csShellNewFileName = szShellNewFileName;
  137. }
  138. void CGCFileTypeAccess::GetShellNewFileName(
  139. CString& csShellNewFileName
  140. ) const {
  141. csShellNewFileName = m_csShellNewFileName;
  142. }
  143. void CGCFileTypeAccess::SetDocumentClassName(
  144. LPCTSTR szDocumentClassName
  145. ){
  146. m_csDocumentClassName = szDocumentClassName;
  147. }
  148. void CGCFileTypeAccess::GetDocumentClassName(
  149. CString& csDocumentClassName
  150. ) const {
  151. csDocumentClassName = m_csDocumentClassName;
  152. }
  153. void CGCFileTypeAccess::SetDocumentDescription(
  154. LPCTSTR szDocumentDescription
  155. ){
  156. m_csDocumentDescription = szDocumentDescription;
  157. }
  158. void CGCFileTypeAccess::GetDocumentDescription(
  159. CString& csDocumentDescription
  160. ) const {
  161. csDocumentDescription = m_csDocumentDescription;
  162. }
  163. void CGCFileTypeAccess::SetDocumentCLSID(
  164. LPCTSTR szDocumentCLSID
  165. ){
  166. m_csDocumentCLSID = szDocumentCLSID;
  167. }
  168. void CGCFileTypeAccess::GetDocumentCLSID(
  169. CString& csDocumentCLSID
  170. ) const {
  171. csDocumentCLSID = m_csDocumentCLSID;
  172. }
  173. void CGCFileTypeAccess::SetDocumentCurrentVersion(
  174. LPCTSTR szDocumentCurrentVersion
  175. ){
  176. m_csDocumentCurrentVersion = szDocumentCurrentVersion;
  177. }
  178. void CGCFileTypeAccess::GetDocumentCurrentVersion(
  179. CString& csDocumentCurrentVersion
  180. ) const {
  181. csDocumentCurrentVersion = m_csDocumentCurrentVersion;
  182. }
  183. void CGCFileTypeAccess::SetDocumentDefaultIcon(
  184. LPCTSTR szDocumentDefaultIcon
  185. ){
  186. m_csDocumentDefaultIcon = szDocumentDefaultIcon;
  187. }
  188. void CGCFileTypeAccess::GetDocumentDefaultIcon(
  189. CString& csDocumentDefaultIcon
  190. ) const {
  191. csDocumentDefaultIcon = m_csDocumentDefaultIcon;
  192. }
  193. void CGCFileTypeAccess::SetDocumentShellOpenCommand(
  194. LPCTSTR szDocumentShellOpenCommand
  195. ){
  196. m_csDocumentShellOpenCommand = szDocumentShellOpenCommand;
  197. }
  198. void CGCFileTypeAccess::GetDocumentShellOpenCommand(
  199. CString& csDocumentShellOpenCommand
  200. ) const {
  201. csDocumentShellOpenCommand = m_csDocumentShellOpenCommand;
  202. }
  203. // virtual 
  204. void CGCFileTypeAccess::ClearAllData(void)
  205. {
  206. m_csExtension.Empty();
  207. m_csContentType.Empty();
  208. m_csShellOpenCommand.Empty();
  209. m_csShellNewCommand.Empty();
  210. m_csShellNewFileName.Empty();
  211. m_csDocumentClassName.Empty();
  212. m_csDocumentDescription.Empty();
  213. m_csDocumentCLSID.Empty();
  214. m_csDocumentCurrentVersion.Empty();
  215. m_csDocumentDefaultIcon.Empty();
  216. m_csDocumentShellOpenCommand.Empty();
  217. }
  218. //- -----------------------------------------------------------------
  219. //- set string value into registry
  220. BOOL CGCFileTypeAccess::SetRegistryValue(
  221. HKEY hOpenKey,
  222. LPCTSTR szKey,
  223. LPCTSTR szValue,
  224. LPCTSTR szData
  225. ){
  226. // validate input
  227. if( !hOpenKey || !szKey || !szKey[0] || 
  228. !szValue || !szData ){
  229. ::SetLastError(E_INVALIDARG);
  230. return FALSE;
  231. }
  232. BOOL  bRetVal = FALSE;
  233. DWORD dwDisposition;
  234. DWORD dwReserved = 0;
  235. HKEY   hTempKey = (HKEY)0;
  236. // length specifier is in bytes, and some TCHAR 
  237. // are more than 1 byte each
  238. DWORD dwBufferLength = lstrlen(szData) * sizeof(TCHAR);
  239. // Open key of interest
  240. // Assume all access is okay and that all keys will be stored to file
  241. // Utilize the default security attributes
  242. if( ERROR_SUCCESS == ::RegCreateKeyEx(hOpenKey, szKey, dwReserved,
  243. (LPTSTR)0, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, 0,
  244. &hTempKey, &dwDisposition) ){
  245. // dwBufferLength must include size of terminating nul 
  246. // character when using REG_SZ with RegSetValueEx function
  247. dwBufferLength += sizeof(TCHAR);
  248. if( ERROR_SUCCESS == ::RegSetValueEx(hTempKey, (LPTSTR)szValue,
  249. dwReserved, REG_SZ, (LPBYTE)szData, dwBufferLength) ){
  250. bRetVal = TRUE;
  251. }
  252. }
  253. // close opened key
  254. if( hTempKey ){
  255. ::RegCloseKey(hTempKey);
  256. }
  257. return bRetVal;
  258. }
  259. //- -----------------------------------------------------------------
  260. //- END CGFILTYP.CPP Source File
  261. //- -----------------------------------------------------------------