简体   繁体   中英

how to find MyMusic Folder from other users?

如何找到其他用户的MyMusic文件夹?

您可以将Environment.SpecialFolder枚举与Environment.GetFolderPath一起使用,以访问“特殊”用户文件夹,如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);

The documented way to do this is to use SHGetFolderLocation and the hToken parameter, the problem is that you need the username and password to call LogonUser (You could also call WTSQueryUserToken if you are running as a service, but that limits you to the currently active sessions)

Now you are left with using undocumented stuff :

  1. Find the profile: HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList (%windir%\\Profiles on Win9x)
  2. AdjustTokenPrivileges for SE_RESTORE_NAME
  3. RegLoadKey NTUSER.DAT (USER.DAT on 9x)
  4. Query HKEY_USERS\\{SIDYOUGOTFROMPROFILELIST}\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders

Note: You need to be admin to do this and it only works for local accounts.

If the account you are running the program on has administrative privlieges, can't you just navigate to c:\\Users\\<UserName>\\Music (which is the path on Windows7).
If you're looking for folders of users on another machine, then that is more difficult.

EDIT: It appears that there is a way to do this, from MSDN :

HRESULT SHGetKnownFolderPath(
  __in   REFKNOWNFOLDERID rfid,
  __in   DWORD dwFlags,
  __in   HANDLE hToken,
  __out  PWSTR *ppszPath
);

With the rfid being the KNOWNFOLDERID of the folder you are looking for in the case of My Music:

GUID{2112AB0A-C86A-4FFE-A368-0DE96E47012E}
Display NameMusicFolder 
Type PERUSER
Default Path: %APPDATA%\Microsoft\Windows\Libraries\Music.library-msCSIDL 
Equivalent None, new in Windows 7
Legacy Display Name Not applicable
Legacy Default Path Not applicable

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM