views:

78

answers:

3

how to find MyMusic Folder of other users ?

+3  A: 

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);
Ryan Brunner
please read my question completely : 'of other users'
pedram
Sorry, I wasn't sure if "other users" referred to "users other than myself" (i.e. whoever runs the application, or "users other than the user accessing the application".
Ryan Brunner
A: 

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
James
may be I do not use windows 7 or user hast changed MusicFolder path .
pedram
then, this is a trickier problem than this solution will allow, but that is the default path.
James
@pedram, try this new function
James
+1  A: 

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.

Anders