请教WINAPI中注册表操作带Ex和不带Ex的API有什么差异嘛

卡文特 2016-08-03 04:34:10
RegOpenKeyW (
__in HKEY hKey,
__in_opt LPCWSTR lpSubKey,
__out PHKEY phkResult
);



RegOpenKeyExW (
__in HKEY hKey,
__in_opt LPCWSTR lpSubKey,
__in_opt DWORD ulOptions,
__in REGSAM samDesired,
__out PHKEY phkResult
);


这是我在API声明里看到的 请教一下 多出了来的这些参数 到底实用嘛, 实际应用中,使用带Ex的情况多,还是不带的多
...全文
274 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-08-05
  • 打赏
  • 举报
回复
GetCurrentDirectory 获取的是工作路径,工作路径不一定是 exe 所在目录。如果你直接执行 exe,该函数获取到的都是 exe 所在目录。但是如果你通过 lnk 启动,则该目录将是 lnk 属性中的起始位置——这个概念准确来说应该翻译为:启动路径,而且这个路径可以通过 SetCurrentDirectory 来更改。对于位于工作路径的文件、dll 等,都可以使用相对路径,例如名称,来打开或者调起等。如果工作路径被改变了,如通过 SetCurrentDirectory 或 lnk 的起始位置等设置,那么你依旧使用 exe 相对路径来加载文件之类的,肯定是找不到路径的。反正我一般是绝对不会使用 GetCurrentDirectory、SetCurrentDirectory 的,我都是用 GetModuleFileName 获取 exe 的路径,然后用 PathRemoveFileSpec 移除末尾的文件名后拿来使用。
yi_yoo_ 2016-08-05
  • 打赏
  • 举报
回复
当你把程序设置为自启动之类的时候GetCurrentDirectory获取的就不是你程序原来所在的目录了。
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
卡文特 2016-08-04
  • 打赏
  • 举报
回复
引用 7 楼 VisualEleven 的回复:
[quote=引用 6 楼 Hackxiaoyue 的回复:] [quote=引用 4 楼 SXJIAKE 的回复:] 由于早期 API 参数已经定死,或者难以进行扩展,微软就会开发一个类似的新 API,大多都是以 Ex 结尾,参数会比之前的多一些,功能也更强一些。当然,少数 API 则会使用全新的名称,如: OpenFile -> CreateFile SHGetFolderPath -> SHGetKnownFolderPath 这类通常是因为不仅仅是参数增多,很多概念也跟着改变了。
谢谢 也就是说可以简单理解为Ex是不带Ex的升级版 可以这样理解嘛 然后还有一个小问题想问一下您 在书上看到 取程序运行目录用的是GetModuleFileName,可是我查MSDN后,发现这个命令是获取当前模块全路径,跟GetCurrentDirectory这个命令有什么区别那 为什么不用GetCurrentDirectory这个命令那 [/quote] The directory at the end of the active path is called the current directory; it is the directory in which the active application started, unless explicitly changed. An application can determine which directory is current by calling the GetCurrentDirectory function. An application can change the current directory by calling the SetCurrentDirectory function. [/quote] 英语半瓶水, 您的意思是不是GetCurrentDirectory获取到的是目录名 例如程序工作在C:\test\123.exe 使用GetCurrentDirect函数获取到的是C:\test 而使用GetMoudleFileName获取到的是C:\test\123.exe 可以这么理解吧 我去实验看一下
Eleven 2016-08-04
  • 打赏
  • 举报
回复
引用 6 楼 Hackxiaoyue 的回复:
[quote=引用 4 楼 SXJIAKE 的回复:] 由于早期 API 参数已经定死,或者难以进行扩展,微软就会开发一个类似的新 API,大多都是以 Ex 结尾,参数会比之前的多一些,功能也更强一些。当然,少数 API 则会使用全新的名称,如: OpenFile -> CreateFile SHGetFolderPath -> SHGetKnownFolderPath 这类通常是因为不仅仅是参数增多,很多概念也跟着改变了。
谢谢 也就是说可以简单理解为Ex是不带Ex的升级版 可以这样理解嘛 然后还有一个小问题想问一下您 在书上看到 取程序运行目录用的是GetModuleFileName,可是我查MSDN后,发现这个命令是获取当前模块全路径,跟GetCurrentDirectory这个命令有什么区别那 为什么不用GetCurrentDirectory这个命令那 [/quote] The directory at the end of the active path is called the current directory; it is the directory in which the active application started, unless explicitly changed. An application can determine which directory is current by calling the GetCurrentDirectory function. An application can change the current directory by calling the SetCurrentDirectory function.
卡文特 2016-08-04
  • 打赏
  • 举报
回复
引用 4 楼 SXJIAKE 的回复:
由于早期 API 参数已经定死,或者难以进行扩展,微软就会开发一个类似的新 API,大多都是以 Ex 结尾,参数会比之前的多一些,功能也更强一些。当然,少数 API 则会使用全新的名称,如: OpenFile -> CreateFile SHGetFolderPath -> SHGetKnownFolderPath 这类通常是因为不仅仅是参数增多,很多概念也跟着改变了。
谢谢 也就是说可以简单理解为Ex是不带Ex的升级版 可以这样理解嘛 然后还有一个小问题想问一下您 在书上看到 取程序运行目录用的是GetModuleFileName,可是我查MSDN后,发现这个命令是获取当前模块全路径,跟GetCurrentDirectory这个命令有什么区别那 为什么不用GetCurrentDirectory这个命令那
卡文特 2016-08-04
  • 打赏
  • 举报
回复
谢谢 也就是说可以简单理解为Ex是不带Ex的升级版 可以这样理解嘛 然后还有一个小问题想问一下您 在书上看到 取程序运行目录用的是GetModuleFileName,可是我查MSDN后,发现这个命令是获取当前模块全路径,跟GetCurrentDirectory这个命令有什么区别那 为什么不用GetCurrentDirectory这个命令那
「已注销」 2016-08-03
  • 打赏
  • 举报
回复
由于早期 API 参数已经定死,或者难以进行扩展,微软就会开发一个类似的新 API,大多都是以 Ex 结尾,参数会比之前的多一些,功能也更强一些。当然,少数 API 则会使用全新的名称,如: OpenFile -> CreateFile SHGetFolderPath -> SHGetKnownFolderPath 这类通常是因为不仅仅是参数增多,很多概念也跟着改变了。
  • 打赏
  • 举报
回复
一般情况都是 没有EX的版本内部会加上一些的参数调用Ex版的API
赵4老师 2016-08-03
  • 打赏
  • 举报
回复
RegOpenKeyEx The RegOpenKeyEx function opens the specified key. LONG RegOpenKeyEx( HKEY hKey, // handle to open key LPCTSTR lpSubKey, // address of name of subkey to open DWORD ulOptions, // reserved REGSAM samDesired, // security access mask PHKEY phkResult // address of handle to open key ); Parameters hKey Handle to a currently open key or any of the following predefined reserved handle values: HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS Windows NT: HKEY_PERFORMANCE_DATA Windows 95 and Windows 98: HKEY_DYN_DATA lpSubKey Pointer to a null-terminated string containing the name of the subkey to open. If this parameter is NULL or a pointer to an empty string, the function will open a new handle to the key identified by the hKey parameter. In this case, the function will not close the handles previously opened. ulOptions Reserved; must be zero. samDesired Specifies an access mask that describes the desired security access for the new key. This parameter can be a combination of the following values: Value Meaning KEY_ALL_ACCESS Combination of KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, and KEY_SET_VALUE access. KEY_CREATE_LINK Permission to create a symbolic link. KEY_CREATE_SUB_KEY Permission to create subkeys. KEY_ENUMERATE_SUB_KEYS Permission to enumerate subkeys. KEY_EXECUTE Permission for read access. KEY_NOTIFY Permission for change notification. KEY_QUERY_VALUE Permission to query subkey data. KEY_READ Combination of KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY access. KEY_SET_VALUE Permission to set subkey data. KEY_WRITE Combination of KEY_SET_VALUE and KEY_CREATE_SUB_KEY access. phkResult Pointer to a variable that receives a handle to the opened key. When you no longer need the returned handle, call the RegCloseKey function to close it. Return Values If the function succeeds, the return value is ERROR_SUCCESS. If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error. Remarks Unlike the RegCreateKeyEx function, the RegOpenKeyEx function does not create the specified key if the key does not exist in the registry. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winreg.h. Import Library: Use advapi32.lib. Unicode: Implemented as Unicode and ANSI versions on Windows NT. See Also Registry Overview, Registry Functions, RegCloseKey, RegCreateKeyEx, RegDeleteKey, RegOpenKey
赵4老师 2016-08-03
  • 打赏
  • 举报
回复
查MSDN是Windows程序员必须掌握的技能之一。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧