urywek z LINQPad (język C# Program), który wyświetla 'C: \ Users \ default \ Pulpit':
void Main()
{
GetFolderPath(Environment.SpecialFolder.Desktop).Dump();
}
// Define other methods and classes here
[DllImport("shfolder.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, int hToken, int dwFlags, StringBuilder lpszPath);
public static string GetFolderPath(Environment.SpecialFolder folder)
{
if (!Enum.IsDefined(typeof(Environment.SpecialFolder), folder))
{
throw new Exception("Crap");
}
StringBuilder lpszPath = new StringBuilder(260);
SHGetFolderPath(IntPtr.Zero, (int) folder, -1, 0, lpszPath);
string path = lpszPath.ToString();
new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
return path;
}
EDIT: Miałem następujące importu w LINQPad
System.Runtime.InteropServices
System.Globalization
System.Security.Permissions
użyłem reflektor patrzeć Environment.GetFolderPath
a potem przyjrzał się SHGetFolderPath
że specifies przekazując -1 jako hToken masz defaul t Użytkownik zamiast tego.
SHGetFolderPath - „Przypisywanie hToken parametru Wartość -1 wskazuje domyślnego użytkownika Umożliwia to klientom SHGetFolderPath znaleźć lokalizacje folderu (na przykład folderu Pulpit) dla domyślnego użytkownika domyślnego profilu podręcznik użytkownika.. jest duplikowany po utworzeniu nowego konta użytkownika i zawiera specjalne foldery, takie jak Moje dokumenty i komputer. Wszelkie elementy dodane do folderu Domyślny użytkownik pojawiają się również na każdym nowym koncie użytkownika. " - http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v=vs.85).aspx –
Nie polecałbym teraz używania p/Invoke. – JoanComasFdz
@JoanComasFdz, więc jak poleciłbyś je zamiast tego? –