IRWERegTabFunction.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:9k
源码类别:

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. IRWERegTabFunction.cpp - ISee图像读写引擎系统注册表助手函数实现文件
  3.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  4.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证
  5. 条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你
  6. 的选择)用任何更新的版本。
  7.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  8. 目地的隐含的担保。更详细的情况请参阅GNU通用许可证。
  9.     你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有,
  10. 写信给:
  11.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  12.     MA02139,  USA
  13. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  14. 系:
  15. http://isee.126.com
  16. http://www.vchelp.net
  17. 或:
  18. iseesoft@china.com
  19. 作  者:YZ
  20.     e-mail:yzfree@sina.com
  21.     功能实现:图像读写引擎访问注册表的一个封装
  22. 文件版本:
  23. Build 00007
  24. Date  2000-12-4
  25. ********************************************************************/
  26. #include "stdafx.h"
  27. #include "IRWERegTabFunction.h"
  28. // HKEY_CURRENT_USER
  29. static BYTE _rtd_PluginsPathInRegTable[] = 
  30. "Software\VCHelp Software\coPathway\ISee Workgroup\IRWPlugins";
  31. static BYTE _rtd_PlugInsNumberName[] = "PluginsNumber";
  32. static BYTE _rtd_PlugInsNamesName[] = "PluginsNames";
  33. static BYTE _rtd_PlugInsPathName[] = "PluginsPath";
  34. static BYTE _rtd_FileName[] = "FileName";
  35. static BYTE _rtd_PRI[] = "PRI";
  36. static BYTE _rtd_Class[] = "ISeeIRWP";
  37. // 打开插件注册信息句柄(插件总句柄)
  38. HKEY _IRWERTF_OpenRegTab()
  39. {
  40. HKEY hKey = NULL;
  41. LONG result = ::RegOpenKeyEx(HKEY_CURRENT_USER, 
  42. (LPCTSTR)_rtd_PluginsPathInRegTable, 
  43. 0, 
  44. KEY_ALL_ACCESS, 
  45. (PHKEY)&hKey);
  46. return (result == ERROR_SUCCESS) ? hKey:NULL;
  47. }
  48. // 创建插件注册信息句柄(插件总句柄)
  49. HKEY _IRWERTF_CreateRegTab()
  50. {
  51. HKEY hKey = NULL;
  52. DWORD dwDisp = 0;
  53. LONG result = ::RegCreateKeyEx(HKEY_CURRENT_USER, 
  54. (LPCTSTR)_rtd_PluginsPathInRegTable, 
  55. NULL, 
  56. (LPTSTR)_rtd_Class, 
  57. REG_OPTION_NON_VOLATILE, 
  58. KEY_ALL_ACCESS, 
  59. NULL, 
  60. &hKey, 
  61. &dwDisp);
  62. return (result == ERROR_SUCCESS) ? hKey:NULL;
  63. }
  64. // 关闭指定关键字
  65. LONG _IRWERTF_CloseRegTab(HKEY hKey /*指定关键字*/)
  66. {
  67. return _IRWERTF_CloseKey(hKey);
  68. }
  69. // 获取插件个数值
  70. DWORD _IRWERTF_GetPluginNumber(HKEY hPlugKey /*插件总句柄*/)
  71. {
  72. ASSERT(hPlugKey);
  73. DWORD dwNumber = 0, dwSize = sizeof(DWORD);
  74. LONG result = ::RegQueryValueEx(hPlugKey, 
  75. (LPCTSTR)_rtd_PlugInsNumberName,  
  76. NULL, 
  77. NULL, 
  78. (LPBYTE)&dwNumber, 
  79. &dwSize);
  80. return (result == ERROR_SUCCESS) ? dwNumber:0;
  81. }
  82. // 设置插件个数值
  83. DWORD _IRWERTF_SetPluginNumber(HKEY hPlugKey /*插件总句柄*/, DWORD dwNewNum /*插件个数值*/)
  84. {
  85. ASSERT(hPlugKey);
  86. ASSERT(dwNewNum);
  87. DWORD dwNumber = dwNewNum, dwSize = sizeof(DWORD);
  88. LONG result = ::RegSetValueEx(hPlugKey, 
  89. (LPCTSTR)_rtd_PlugInsNumberName, 
  90. 0, 
  91. REG_DWORD, 
  92. (CONST BYTE *)&dwNumber, 
  93. dwSize);
  94. return (result == ERROR_SUCCESS) ? dwNumber:0;
  95. // 如果成功,返回值等于入口参数dwNewNum的值,否则
  96. // 为0。(dwNewNum的值不能是0)
  97. }
  98. // 获取插件的名称串
  99. LPTSTR _IRWERTF_GetPluginNames(HKEY hPlugKey /*插件总句柄*/)
  100. {
  101. ASSERT(hPlugKey);
  102. LPTSTR pNames;
  103. DWORD dwSize = 0;
  104. LONG result = ::RegQueryValueEx(hPlugKey, 
  105. (LPCTSTR)_rtd_PlugInsNamesName,  
  106. NULL, 
  107. NULL, 
  108. NULL, 
  109. &dwSize);
  110. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  111. return NULL;
  112. pNames = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  113. if (!pNames)
  114. return NULL;
  115. result = ::RegQueryValueEx(hPlugKey, 
  116. (LPCTSTR)_rtd_PlugInsNamesName,  
  117. NULL, 
  118. NULL, 
  119. (LPBYTE)pNames, 
  120. &dwSize);
  121. if (result != ERROR_SUCCESS)
  122. {
  123. ::GlobalFree(pNames);
  124. return NULL;
  125. }
  126. return pNames;
  127. }
  128. // 设置插件的名称串
  129. LPCTSTR _IRWERTF_SetPluginNames(HKEY hPlugKey /*插件总句柄*/, LPCTSTR lpNewNames /*名称串*/)
  130. {
  131. ASSERT(hPlugKey);
  132. ASSERT(lpNewNames);
  133. ASSERT(::lstrlen(lpNewNames));
  134. LONG result = ::RegSetValueEx(hPlugKey, 
  135. (LPCTSTR)_rtd_PlugInsNamesName, 
  136. 0, 
  137. REG_SZ, 
  138. (CONST BYTE *)lpNewNames, 
  139. ::lstrlen(lpNewNames)+1); // 包括尾部的NULL字节
  140. return (result == ERROR_SUCCESS) ? lpNewNames:NULL;
  141. // 如果成功,返回值等于入口参数lpNewNames的值,否则
  142. // 为NULL。(lpNewNames不能为空)
  143. }
  144. // 获取插件所在的路径
  145. LPTSTR _IRWERTF_GetPluginsPath(HKEY hPlugKey /*插件总句柄*/)
  146. {
  147. ASSERT(hPlugKey);
  148. LPTSTR pPath;
  149. DWORD dwSize = 0;
  150. LONG result = ::RegQueryValueEx(hPlugKey, 
  151. (LPCTSTR)_rtd_PlugInsPathName, 
  152. NULL, 
  153. NULL, 
  154. NULL, 
  155. &dwSize);
  156. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  157. return NULL;
  158. pPath = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  159. if (!pPath)
  160. return NULL;
  161. result = ::RegQueryValueEx(hPlugKey, 
  162. (LPCTSTR)_rtd_PlugInsPathName,  
  163. NULL, 
  164. NULL, 
  165. (LPBYTE)pPath, 
  166. &dwSize);
  167. if (result != ERROR_SUCCESS)
  168. {
  169. ::GlobalFree(pPath);
  170. return NULL;
  171. }
  172. return pPath;
  173. }
  174. // 设置插件所在的路径
  175. LPCTSTR _IRWERTF_SetPluginsPath(HKEY hPlugKey /*插件总句柄*/, LPCTSTR lpNewPath /*路径串*/)
  176. {
  177. ASSERT(hPlugKey);
  178. ASSERT(lpNewPath);
  179. ASSERT(::lstrlen(lpNewPath));
  180. LONG result = ::RegSetValueEx(hPlugKey, 
  181. (LPCTSTR)_rtd_PlugInsPathName, 
  182. 0, 
  183. REG_SZ, 
  184. (CONST BYTE *)lpNewPath, 
  185. ::lstrlen(lpNewPath)+1); // 包括尾部的NULL字节
  186. return (result == ERROR_SUCCESS) ? lpNewPath:NULL;
  187. // 如果成功,返回值等于入口参数lpNewPath的值,否则
  188. // 为NULL。(lpNewPath不能为空)
  189. }
  190. // 打开指定插件句柄
  191. HKEY _IRWERTF_OpenPlugins(HKEY hPlugKey /*插件总句柄*/, LPCTSTR PluginsName /*插件名子串*/)
  192. {
  193. ASSERT(hPlugKey);
  194. HKEY hKey = NULL;
  195. LONG result = ::RegOpenKeyEx(hPlugKey, 
  196. PluginsName, 
  197. 0, 
  198. KEY_ALL_ACCESS, 
  199. (PHKEY)&hKey);
  200. return (result == ERROR_SUCCESS) ? hKey:NULL;
  201. }
  202. // 创建指定插件句柄
  203. HKEY _IRWERTF_CreatePlugins(HKEY hPlugKey /*插件总句柄*/, LPCTSTR PluginsName /*插件名字串*/)
  204. {
  205. ASSERT(hPlugKey);
  206. HKEY hKey = NULL;
  207. DWORD dwDisp = 0;
  208. LONG result = ::RegCreateKeyEx(hPlugKey, 
  209. PluginsName, 
  210. NULL, 
  211. (LPTSTR)_rtd_Class, 
  212. REG_OPTION_NON_VOLATILE, 
  213. KEY_ALL_ACCESS, 
  214. NULL, 
  215. &hKey, 
  216. &dwDisp);
  217. return (result == ERROR_SUCCESS) ? hKey:NULL;
  218. }
  219. // 获取插件文件名
  220. LPTSTR _IRWERTF_GetPluginsFileName(HKEY hPlugKey /*指定插件句柄*/)
  221. {
  222. ASSERT(hPlugKey);
  223. LPTSTR pFileName;
  224. DWORD dwSize = 0;
  225. LONG result = ::RegQueryValueEx(hPlugKey, 
  226. (LPCTSTR)_rtd_FileName, 
  227. NULL, 
  228. NULL, 
  229. NULL, 
  230. &dwSize);
  231. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  232. return NULL;
  233. pFileName = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  234. if (!pFileName)
  235. return NULL;
  236. result = ::RegQueryValueEx(hPlugKey, 
  237. (LPCTSTR)_rtd_FileName, 
  238. NULL, 
  239. NULL, 
  240. (LPBYTE)pFileName, 
  241. &dwSize);
  242. if (result != ERROR_SUCCESS)
  243. {
  244. ::GlobalFree(pFileName);
  245. return NULL;
  246. }
  247. return pFileName;
  248. }
  249. // 设置插件文件名
  250. LPCTSTR _IRWERTF_SetPluginsFileName(HKEY hPlugKey /*指定插件句柄*/, LPCTSTR lpNewFileName /*插件文件名*/)
  251. {
  252. ASSERT(hPlugKey);
  253. ASSERT(lpNewFileName);
  254. ASSERT(::lstrlen(lpNewFileName));
  255. LONG result = ::RegSetValueEx(hPlugKey, 
  256. (LPCTSTR)_rtd_FileName, 
  257. 0, 
  258. REG_SZ, 
  259. (CONST BYTE *)lpNewFileName, 
  260. ::lstrlen(lpNewFileName)+1);// 包括尾部的NULL字节
  261. return (result == ERROR_SUCCESS) ? lpNewFileName:NULL;
  262. // 如果成功,返回值等于入口参数lpNewFileName的值,否则
  263. // 为NULL。(lpNewFileName不能为空)
  264. }
  265. // 获取插件优先级
  266. DWORD _IRWERTF_GetPluginPRI(HKEY hPlugKey /*指定插件句柄*/)
  267. {
  268. ASSERT(hPlugKey);
  269. DWORD dwPRI = 0, dwSize = sizeof(DWORD);
  270. LONG result = ::RegQueryValueEx(hPlugKey, 
  271. (LPCTSTR)_rtd_PRI, 
  272. NULL, 
  273. NULL, 
  274. (LPBYTE)&dwPRI, 
  275. &dwSize);
  276. return (result == ERROR_SUCCESS) ? dwPRI:0; // 此时,优先级数就不能
  277. // 再是0了,否则将分不
  278. // 清是优先级数为0,还
  279. // 是函数执行失败。
  280. }
  281. // 设置插件优先级
  282. DWORD _IRWERTF_SetPluginPRI(HKEY hPlugKey /*指定插件句柄*/, DWORD dwNewPRI /*优先级数*/)
  283. {
  284. ASSERT(hPlugKey);
  285. DWORD dwPRI = dwNewPRI, dwSize = sizeof(DWORD);
  286. LONG result = ::RegSetValueEx(hPlugKey, 
  287. (LPCTSTR)_rtd_PRI, 
  288. 0, 
  289. REG_DWORD, 
  290. (CONST BYTE *)&dwPRI, 
  291. dwSize);
  292. return (result == ERROR_SUCCESS) ? dwPRI:0;
  293. // 如果成功,返回值等于入口参数dwNewPRI的值,否则
  294. // 为0。(dwNewPRI的值不能是0)
  295. }
  296. // 关闭指定关键字
  297. LONG _IRWERTF_CloseKey(HKEY hKey)
  298. {
  299. ASSERT(hKey);
  300. return ::RegCloseKey(hKey);
  301. }