C# ShSetFolderPath在win7上工作,不';XP上的t
我试图在C#中使用ShSetFolderPath函数。我在Win7上工作,我已经设法使用了ShSetKnownFolderPath,它工作得很好。C# ShSetFolderPath在win7上工作,不';XP上的t,c#,.net,pinvoke,C#,.net,Pinvoke,我试图在C#中使用ShSetFolderPath函数。我在Win7上工作,我已经设法使用了ShSetKnownFolderPath,它工作得很好。 因为这个函数在WinXP中不可用,所以我尝试调用ShSetFolderPath。因为我不熟悉调用,所以我做了一些搜索,在一些法语论坛上找到了一些东西。我不会说法语,但这一声明是有意义的(如在的备注中所述): 我这样称呼它: private static int CSIDL_DESKTOP = 0x0000; public static void
因为这个函数在WinXP中不可用,所以我尝试调用ShSetFolderPath。因为我不熟悉调用,所以我做了一些搜索,在一些法语论坛上找到了一些东西。我不会说法语,但这一声明是有意义的(如在的备注中所述): 我这样称呼它:
private static int CSIDL_DESKTOP = 0x0000;
public static void SetDesktopPath(string path)
{
int ret;
ret = SHSetFolderPath(CSIDL_DESKTOP, IntPtr.Zero, 0, path);
if (ret != 0)
{
Console.WriteLine(ret);
Console.WriteLine(Marshal.GetExceptionForHR(ret));
}
}
私有静态int CSIDL_DESKTOP=0x0000
公共静态void setdesktopath(字符串路径)
{
int ret;
ret=SHSetFolderPath(CSIDL_桌面,IntPtr.Zero,0,path);
如果(ret!=0)
{
控制台写入线(ret);
Console.WriteLine(Marshal.GetExceptionForHR(ret));
}
}
它在Win7中工作,但在XP中,函数返回-2147024809,这意味着“值不在预期范围内”。
我猜是Dll导入有问题。有什么想法吗 不,不是这样的。转换为十六进制的错误代码为0x80070057。7表示Windows错误,57表示错误代码87,错误参数无效,“参数不正确”
有几个可能的原因。首先,入口点#232实际上不是SHSetFolderPath()的入口点。您可能正在调用另一个函数,它不知道如何处理您传递的参数值。很难说,它是XP版本shell32.dll上一个未命名的入口点。或者可能是XP对您更改桌面文件夹路径不满意。不足为奇,要真正实现这一点,它需要做很多事情,刷新所有Explorer.exe视图,重建桌面内容等等
查看可能的帮助。有趣的事情。
我又看了一眼。我意识到我在尝试将一些“低级”参考(我猜)更改为桌面:
CSIDL\u DESKTOP=0x0000,//
虽然我实际上只想更改文件夹位置,但我应该使用这个:
CSIDL\u DESKTOPDIRECTORY=0x0010,//\Desktop
这是有效的
它解释了一切。我真丢脸 谢谢你的回答。我认为入口点应该是正确的,因为它是在MSDN库中给出的。我很熟悉你链接的帖子,它帮助我使用了ShSetKnownFolderPath,但是关于ShSetFolderPath的帖子似乎是错误的。我尝试了许多与论点相结合的方法,但没有人为我工作。因此,问题仍然悬而未决。该死,Windows太神秘了:)。哦,关于更改桌面位置的观点很好。也许在WinXP上更改桌面是不可能的。我想换个文件夹。
private static int CSIDL_DESKTOP = 0x0000;
public static void SetDesktopPath(string path)
{
int ret;
ret = SHSetFolderPath(CSIDL_DESKTOP, IntPtr.Zero, 0, path);
if (ret != 0)
{
Console.WriteLine(ret);
Console.WriteLine(Marshal.GetExceptionForHR(ret));
}
}