如何从服务获取用户桌面的路径
How to get paths to user desktops from a service?
我需要从服务应用程序为本地Windows系统上的所有用户枚举桌面文件夹的路径。问题是有些用户可能当时没有登录。那么,有没有API或其他方法可以做到这一点?
第1版:对于那些没有阅读第一段的人,让我重复一遍——我没有用户帐户的令牌,用户当时可能无法登录。
EDIT2:在关闭应用程序支持的功能或卸载应用程序之前,我需要从用户桌面上删除快捷方式。
这是迄今为止我能想到的最好的方法。所以,如果有非英语安装Windows的人能帮我检查一下,我会很感激吗?
(为了简洁起见,我只是发布了一个伪代码。)
1-以下所有步骤都是通过本地服务应用程序完成的。
2-要获取所有用户配置文件的路径,请枚举HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
键中的子文件夹,并从中读取ProfileImagePath
值。它将为每个用户帐户提供配置文件路径。
3-要获取桌面的文件夹名称,请从服务应用程序的HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders
键中读取Desktop
值(是的,我知道HKCU听起来很奇怪,但它对我有效。)然后使用环境变量API获取%USERPROFILE%
环境变量的路径。所以你会得到两条路径,像这样:
C:Windowssystem32configsystemprofileDesktop
和
C:Windowssystem32configsystemprofile
然后简单地将第二个字符串与第一个字符串隔离开来,使用不区分大小写的比较,您将获得桌面的文件夹名称(即,在这种情况下为"\Datadesk")
4-将桌面文件夹添加到步骤2中获得的路径,以生成该用户桌面文件夹的完整路径。
来自userenv.h:GetProfilesDirectory(win2k+,iirc)
msdn.microsoft.com/en-us/library/windows/desktop/bb762278(v=vs.85).aspx
使用此选项可以查找包含所有本地用户帐户配置文件目录的目录。
查找桌面文件夹:
Shlobj.h:SHGetKnownFolderPath(vista+)
msdn.microsoft.com/en-us/library/windows/desktop/bb762188(v=vs.85).aspx
您需要FOLDRID_Desktop作为已知的文件夹id。此符号在Knownfolders.h 中声明
msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx
使用这些,您可以在不直接读取注册表的情况下更接近您想要的内容。当然,除了从GetProfilesDirectory。也许有一种更适合api的方式来枚举本地用户。
其次,这取决于你的服务目的,但也许通过使用"allusers"配置文件,而不是每个用户,你就不需要知道当前的本地用户列表。
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何在桌面C++上使用 WinApi 画线
- 如何从服务获取用户桌面的路径
- 如何获取哪些快捷方式和文件在桌面等文件夹路径中突出显示
- 获取当前桌面壁纸的路径
- fstream指向一个特定的路径(到桌面ex.)
- visual如何在C++中找到桌面路径
- 如何在Windows环境下获取主叫用户桌面的绝对路径
- C++-如何获取特定用户的桌面路径