我正在尝试在 C# 中使用 ShSetFolderPath 函数。我在 Win7 上工作,我已经设法使用 ShSetKnownFolderPath 并且它工作正常。
由于此功能在WinXP中不可用,因此我尝试调用ShSetFolderPath。因为我对调用不熟悉,所以我做了一些搜索并在一些法国论坛上找到了一些东西。我不会说法语,但这个声明是有道理的(如function documentation in MSDN library的备注中所写):
[DllImport( "Shell32.dll", CharSet = CharSet.Unicode, EntryPoint = "#232" ) ]
private static extern int SHSetFolderPath( int csidl, IntPtr hToken, uint flags, string path );
我这样调用它:
private static int CSIDL_DESKTOP = 0x0000;<p></p>
<p>public static void SetDesktopPath(string path)
{
int ret;
ret = SHSetFolderPath(CSIDL_DESKTOP, IntPtr.Zero, 0, path);<br/>
if (ret != 0)
{
Console.WriteLine(ret);
Console.WriteLine(Marshal.GetExceptionForHR(ret));
}
}
</p>
它在Win7中有效,但在XP中函数返回-2147024809,这意味着“值不在预期范围内”。
我的猜测是,Dll 导入有问题。任何想法?
最佳答案
有趣的事情。
我又看了一遍CSIDL list 。我意识到我正在尝试将一些“低级”引用(我猜)更改为桌面:
CSIDL_DESKTOP = 0x0000, // <desktop>
虽然我实际上只想更改文件夹位置,但我应该使用这个:
CSIDL_DESKTOPDIRECTORY = 0x0010, // <user name>\Desktop
.
这有效。
它解释了一切。我真丢脸。
关于c# - ShSetFolderPath适用于win7,不适用于XP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486943/