开发者

how to find MyMusic Folder from other users?

how to find MyMu开发者_如何转开发sic 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);


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜