9

Windowsの一般的なデスクトップにファイルを保存する必要があります。このアプリケーションは、1台の特別なPC(デバイスの準備)用の非常に特別なアプリケーションであるため、技術者以外のユーザーが構成ファイルを簡単に見つけて変更できる必要がありました。ここでドメインに切り替えました。さまざまな人(さまざまなアカウントを持つ)がソフトウェアを使用する必要があるため、すべてのユーザーが見ることができる共通の場所にある必要があります。だから、なぜそれがデスクトップにあるのか尋ねないでください;)

以前は、を使用していEnvironment.GetFolderPath(Environment.SpecialFolder.Desktop)ました。列挙にはいくつかの共通フォルダーがありますSpecialFolderが、共通デスクトップはそこにないようです。私は何かが足りないのですか、それともp / invokeSHGetSpecialFolderPathする必要がありCSIDL_COMMON_DESKTOPDIRECTORYますか?

4

5 に答える 5

2

SHGetSpecialFolderPath「CommonDesktopDirectory」には列挙値がないため、APIを使用する必要があると思います。メソッドは値が列挙型で定義されていることを確認するため、の値を明示的に使用してにCSIDL_COMMON_DESKTOPDIRECTORYキャストすることはできません。これが(Reflectorからの)メソッドのコードです:Environment.SpecialFolderGetFolderPathGetFolderPath

public static string GetFolderPath(SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(SpecialFolder), folder))
    {
        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
    }
    StringBuilder lpszPath = new StringBuilder(260);
    Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}

したがって、必要な部分を簡単にコピーして適合させることができます...

于 2009-08-11T08:55:14.373 に答える
0

明確にするために-一般的なデスクトップとは、C:\ Documents and Settings \ All Users \ Desktopを意味しますか?

はいの場合、これは醜いハックです-

Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim comDesktop As String = c.Substring(0, c.LastIndexOf("\")) + "\Desktop"
于 2009-08-11T09:01:01.990 に答える
0

WindowsScriptHostを使用できます-WshShell.SpecialFolders

http://msdn.microsoft.com/en-us/library/0ea7b5xe(VS.85).aspx

于 2009-08-11T09:02:04.810 に答える
0

まず、「Windows ScriptHostObjectModel」への参照を追加します。これは、[参照の追加]ダイアログの[COM]タブにあります。

using IWshRuntimeLibrary;

object commonUserDesktop = "AllUsersDesktop";
WshShell shell = new WshShellClass();
string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();
于 2009-08-11T09:07:32.163 に答える
0

別の方法(はい、それも醜く、おそらくWindows XPでのみ機能し、Vistaでは機能しません)は、レジストリから値を読み取ることです。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders、Common Desktop

于 2009-08-11T09:11:10.207 に答える