Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ShSetFolderPath在win7上工作,不';XP上的t_C#_.net_Pinvoke - Fatal编程技术网

C# ShSetFolderPath在win7上工作,不';XP上的t

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

我试图在C#中使用ShSetFolderPath函数。我在Win7上工作,我已经设法使用了ShSetKnownFolderPath,它工作得很好。
因为这个函数在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)); } }