how to find MyMusic Folder of other users ?
You can use the Environment.SpecialFolder
enum along with Environment.GetFolderPath
to get access to "special" user folders, like so:
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
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 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:
- Find the profile:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
(%windir%\Profiles on Win9x) - AdjustTokenPrivileges for
SE_RESTORE_NAME
- RegLoadKey NTUSER.DAT (USER.DAT on 9x)
- 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.