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

图形图象

开发平台:

Visual C++

  1. // IRWERegTabFunction.cpp - 图像读写引擎系统注册表助手函数
  2. //
  3. #include "stdafx.h"
  4. #include "IRWERegTabFunction.h"
  5. // HKEY_CURRENT_USER
  6. static BYTE _rtd_PluginsPathInRegTable[] = 
  7. "Software\VCHelp Software\coPathway\ISee Workgroup\IRWPlugins";
  8. static BYTE _rtd_PlugInsNumberName[] = "PluginsNumber";
  9. static BYTE _rtd_PlugInsNamesName[] = "PluginsNames";
  10. static BYTE _rtd_PlugInsPathName[] = "PluginsPath";
  11. static BYTE _rtd_FileName[] = "FileName";
  12. static BYTE _rtd_PRI[] = "PRI";
  13. static BYTE _rtd_Class[] = "ISeeIRWP";
  14. // 打开插件注册信息句柄(插件总句柄)
  15. HKEY _IRWERTF_OpenRegTab()
  16. {
  17. HKEY hKey = NULL;
  18. LONG result = ::RegOpenKeyEx(HKEY_CURRENT_USER, 
  19. (LPCTSTR)_rtd_PluginsPathInRegTable, 
  20. 0, 
  21. KEY_ALL_ACCESS, 
  22. (PHKEY)&hKey);
  23. return (result == ERROR_SUCCESS) ? hKey:NULL;
  24. }
  25. // 创建插件注册信息句柄(插件总句柄)
  26. HKEY _IRWERTF_CreateRegTab()
  27. {
  28. HKEY hKey = NULL;
  29. DWORD dwDisp = 0;
  30. LONG result = ::RegCreateKeyEx(HKEY_CURRENT_USER, 
  31. (LPCTSTR)_rtd_PluginsPathInRegTable, 
  32. NULL, 
  33. (LPTSTR)_rtd_Class, 
  34. REG_OPTION_NON_VOLATILE, 
  35. KEY_ALL_ACCESS, 
  36. NULL, 
  37. &hKey, 
  38. &dwDisp);
  39. return (result == ERROR_SUCCESS) ? hKey:NULL;
  40. }
  41. // 关闭指定关键字
  42. LONG _IRWERTF_CloseRegTab(HKEY hKey /*指定关键字*/)
  43. {
  44. ASSERT(hKey);
  45. return ::RegCloseKey(hKey);
  46. }
  47. // 获取插件个数值
  48. DWORD _IRWERTF_GetPluginNumber(HKEY hPlugKey /*插件总句柄*/)
  49. {
  50. ASSERT(hPlugKey);
  51. DWORD dwNumber = 0, dwSize = sizeof(DWORD);
  52. LONG result = ::RegQueryValueEx(hPlugKey, 
  53. (LPCTSTR)_rtd_PlugInsNumberName,  
  54. NULL, 
  55. NULL, 
  56. (LPBYTE)&dwNumber, 
  57. &dwSize);
  58. return (result == ERROR_SUCCESS) ? dwNumber:0;
  59. }
  60. // 设置插件个数值
  61. DWORD _IRWERTF_SetPluginNumber(HKEY hPlugKey /*插件总句柄*/, DWORD dwNewNum /*插件个数值*/)
  62. {
  63. ASSERT(hPlugKey);
  64. ASSERT(dwNewNum);
  65. DWORD dwNumber = dwNewNum, dwSize = sizeof(DWORD);
  66. LONG result = ::RegSetValueEx(hPlugKey, 
  67. (LPCTSTR)_rtd_PlugInsNumberName, 
  68. 0, 
  69. REG_DWORD, 
  70. (CONST BYTE *)&dwNumber, 
  71. dwSize);
  72. return (result == ERROR_SUCCESS) ? dwNumber:0;
  73. // 如果成功,返回值等于入口参数dwNewNum的值,否则
  74. // 为0。(dwNewNum的值不能是0)
  75. }
  76. // 获取插件的名称串
  77. LPTSTR _IRWERTF_GetPluginNames(HKEY hPlugKey /*插件总句柄*/)
  78. {
  79. ASSERT(hPlugKey);
  80. LPTSTR pNames;
  81. DWORD dwSize = 0;
  82. LONG result = ::RegQueryValueEx(hPlugKey, 
  83. (LPCTSTR)_rtd_PlugInsNamesName,  
  84. NULL, 
  85. NULL, 
  86. NULL, 
  87. &dwSize);
  88. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  89. return NULL;
  90. pNames = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  91. if (!pNames)
  92. return NULL;
  93. result = ::RegQueryValueEx(hPlugKey, 
  94. (LPCTSTR)_rtd_PlugInsNamesName,  
  95. NULL, 
  96. NULL, 
  97. (LPBYTE)pNames, 
  98. &dwSize);
  99. if (result != ERROR_SUCCESS)
  100. {
  101. ::GlobalFree(pNames);
  102. return NULL;
  103. }
  104. return pNames;
  105. }
  106. // 设置插件的名称串
  107. LPCTSTR _IRWERTF_SetPluginNames(HKEY hPlugKey /*插件总句柄*/, LPCTSTR lpNewNames /*名称串*/)
  108. {
  109. ASSERT(hPlugKey);
  110. ASSERT(lpNewNames);
  111. ASSERT(::lstrlen(lpNewNames));
  112. LONG result = ::RegSetValueEx(hPlugKey, 
  113. (LPCTSTR)_rtd_PlugInsNamesName, 
  114. 0, 
  115. REG_SZ, 
  116. (CONST BYTE *)lpNewNames, 
  117. ::lstrlen(lpNewNames)+1); // 包括尾部的NULL字节
  118. return (result == ERROR_SUCCESS) ? lpNewNames:NULL;
  119. // 如果成功,返回值等于入口参数lpNewNames的值,否则
  120. // 为NULL。(lpNewNames不能为空)
  121. }
  122. // 获取插件所在的路径
  123. LPTSTR _IRWERTF_GetPluginsPath(HKEY hPlugKey /*插件总句柄*/)
  124. {
  125. ASSERT(hPlugKey);
  126. LPTSTR pPath;
  127. DWORD dwSize = 0;
  128. LONG result = ::RegQueryValueEx(hPlugKey, 
  129. (LPCTSTR)_rtd_PlugInsPathName, 
  130. NULL, 
  131. NULL, 
  132. NULL, 
  133. &dwSize);
  134. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  135. return NULL;
  136. pPath = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  137. if (!pPath)
  138. return NULL;
  139. result = ::RegQueryValueEx(hPlugKey, 
  140. (LPCTSTR)_rtd_PlugInsPathName,  
  141. NULL, 
  142. NULL, 
  143. (LPBYTE)pPath, 
  144. &dwSize);
  145. if (result != ERROR_SUCCESS)
  146. {
  147. ::GlobalFree(pPath);
  148. return NULL;
  149. }
  150. return pPath;
  151. }
  152. // 设置插件所在的路径
  153. LPCTSTR _IRWERTF_SetPluginsPath(HKEY hPlugKey /*插件总句柄*/, LPCTSTR lpNewPath /*路径串*/)
  154. {
  155. ASSERT(hPlugKey);
  156. ASSERT(lpNewPath);
  157. ASSERT(::lstrlen(lpNewPath));
  158. LONG result = ::RegSetValueEx(hPlugKey, 
  159. (LPCTSTR)_rtd_PlugInsPathName, 
  160. 0, 
  161. REG_SZ, 
  162. (CONST BYTE *)lpNewPath, 
  163. ::lstrlen(lpNewPath)+1); // 包括尾部的NULL字节
  164. return (result == ERROR_SUCCESS) ? lpNewPath:NULL;
  165. // 如果成功,返回值等于入口参数lpNewPath的值,否则
  166. // 为NULL。(lpNewPath不能为空)
  167. }
  168. // 打开指定插件句柄
  169. HKEY _IRWERTF_OpenPlugins(HKEY hPlugKey /*插件总句柄*/, LPCTSTR PluginsName /*插件名子串*/)
  170. {
  171. ASSERT(hPlugKey);
  172. HKEY hKey = NULL;
  173. LONG result = ::RegOpenKeyEx(hPlugKey, 
  174. PluginsName, 
  175. 0, 
  176. KEY_ALL_ACCESS, 
  177. (PHKEY)&hKey);
  178. return (result == ERROR_SUCCESS) ? hKey:NULL;
  179. }
  180. // 创建指定插件句柄
  181. HKEY _IRWERTF_CreatePlugins(HKEY hPlugKey /*插件总句柄*/, LPCTSTR PluginsName /*插件名字串*/)
  182. {
  183. ASSERT(hPlugKey);
  184. HKEY hKey = NULL;
  185. DWORD dwDisp = 0;
  186. LONG result = ::RegCreateKeyEx(hPlugKey, 
  187. PluginsName, 
  188. NULL, 
  189. (LPTSTR)_rtd_Class, 
  190. REG_OPTION_NON_VOLATILE, 
  191. KEY_ALL_ACCESS, 
  192. NULL, 
  193. &hKey, 
  194. &dwDisp);
  195. return (result == ERROR_SUCCESS) ? hKey:NULL;
  196. }
  197. // 获取插件文件名
  198. LPTSTR _IRWERTF_GetPluginsFileName(HKEY hPlugKey /*指定插件句柄*/)
  199. {
  200. ASSERT(hPlugKey);
  201. LPTSTR pFileName;
  202. DWORD dwSize = 0;
  203. LONG result = ::RegQueryValueEx(hPlugKey, 
  204. (LPCTSTR)_rtd_FileName, 
  205. NULL, 
  206. NULL, 
  207. NULL, 
  208. &dwSize);
  209. if ((result != ERROR_SUCCESS)||(dwSize == 0))
  210. return NULL;
  211. pFileName = (LPTSTR)::GlobalAlloc(GPTR, dwSize);
  212. if (!pFileName)
  213. return NULL;
  214. result = ::RegQueryValueEx(hPlugKey, 
  215. (LPCTSTR)_rtd_FileName, 
  216. NULL, 
  217. NULL, 
  218. (LPBYTE)pFileName, 
  219. &dwSize);
  220. if (result != ERROR_SUCCESS)
  221. {
  222. ::GlobalFree(pFileName);
  223. return NULL;
  224. }
  225. return pFileName;
  226. }
  227. // 设置插件文件名
  228. LPCTSTR _IRWERTF_SetPluginsFileName(HKEY hPlugKey /*指定插件句柄*/, LPCTSTR lpNewFileName /*插件文件名*/)
  229. {
  230. ASSERT(hPlugKey);
  231. ASSERT(lpNewFileName);
  232. ASSERT(::lstrlen(lpNewFileName));
  233. LONG result = ::RegSetValueEx(hPlugKey, 
  234. (LPCTSTR)_rtd_FileName, 
  235. 0, 
  236. REG_SZ, 
  237. (CONST BYTE *)lpNewFileName, 
  238. ::lstrlen(lpNewFileName)+1);// 包括尾部的NULL字节
  239. return (result == ERROR_SUCCESS) ? lpNewFileName:NULL;
  240. // 如果成功,返回值等于入口参数lpNewFileName的值,否则
  241. // 为NULL。(lpNewFileName不能为空)
  242. }
  243. // 获取插件优先级
  244. DWORD _IRWERTF_GetPluginPRI(HKEY hPlugKey /*指定插件句柄*/)
  245. {
  246. ASSERT(hPlugKey);
  247. DWORD dwPRI = 0, dwSize = sizeof(DWORD);
  248. LONG result = ::RegQueryValueEx(hPlugKey, 
  249. (LPCTSTR)_rtd_PRI, 
  250. NULL, 
  251. NULL, 
  252. (LPBYTE)&dwPRI, 
  253. &dwSize);
  254. return (result == ERROR_SUCCESS) ? dwPRI:0; // 此时,优先级数就不能
  255. // 再是0了,否则将分不
  256. // 清是优先级数为0,还
  257. // 是函数执行失败。
  258. }
  259. // 设置插件优先级
  260. DWORD _IRWERTF_SetPluginPRI(HKEY hPlugKey /*指定插件句柄*/, DWORD dwNewPRI /*优先级数*/)
  261. {
  262. ASSERT(hPlugKey);
  263. DWORD dwPRI = dwNewPRI, dwSize = sizeof(DWORD);
  264. LONG result = ::RegSetValueEx(hPlugKey, 
  265. (LPCTSTR)_rtd_PRI, 
  266. 0, 
  267. REG_DWORD, 
  268. (CONST BYTE *)&dwPRI, 
  269. dwSize);
  270. return (result == ERROR_SUCCESS) ? dwPRI:0;
  271. // 如果成功,返回值等于入口参数dwNewPRI的值,否则
  272. // 为0。(dwNewPRI的值不能是0)
  273. }
  274. LONG _IRWERTF_CloseKey(HKEY hKey)
  275. {
  276. return ::RegCloseKey(hKey);
  277. }