Delphi 从字符串打开资源管理器

Delphi 从字符串打开资源管理器,delphi,Delphi,我正在尝试使用从用户处获得的目录从Delphi中打开Windows资源管理器。此目录保存为字符串。 当我使用以下代码时,它将不接受它。我必须亲自打进去 sDir : string; procedure OpenDirectoryClick(Sender: TObject); begin ShellExecute(Handle,nil,sDir,nil,nil,sw_Show); end; 上述代码不起作用 sDir : string; procedure OpenDirectoryCli

我正在尝试使用从用户处获得的目录从Delphi中打开Windows资源管理器。此目录保存为字符串。 当我使用以下代码时,它将不接受它。我必须亲自打进去

sDir : string;

procedure OpenDirectoryClick(Sender: TObject);
begin
 ShellExecute(Handle,nil,sDir,nil,nil,sw_Show);
end;
上述代码不起作用

sDir : string;

procedure OpenDirectoryClick(Sender: TObject);
begin
 ShellExecute(Handle,nil,'C:\Windows',nil,nil,sw_Show);
end;
上述代码确实有效


如何解决此问题?

第三个参数应强制转换到PChar中,因此请尝试以下操作:

ShellExecute(Handle,nil,PChar(sDir),nil,nil,sw_Show);
希望这有帮助:)


顺便说一句:不要指望默认的Windows API行为,而是将第二个参数指定为“open”,而不是nil(以防万一;)

第三个参数应强制转换到PChar中,因此请尝试以下操作:

ShellExecute(Handle,nil,PChar(sDir),nil,nil,sw_Show);
希望这有帮助:)


顺便说一句:不要指望默认的Windows API行为,而是将第二个参数指定为“open”,而不是nil(以防万一;)

不,我的德尔菲连这个都不会用。可能是我的delphi是2006版吗?实际上,最好不要提供
open
,并允许Windows在需要时决定默认行为。这里已经讨论过很多次了。如果需要默认行为,请保留第二个参数nil并获取默认行为。许多类型的软件都不会默认注册为
open
。作者写道:“我正在尝试打开windows资源管理器…”-所以“open”似乎是预期的行为,不是吗?:)嗯,不是。如果默认值是
explore
?正如我所说,如果你想要默认的行为,不要告诉Windows做任何事情,你会得到它。为什么要猜测违约可能是什么?但我会让微软来解释-请自己阅读MSDN上的ShellExecute文档。:-)要打开资源管理器窗口,应该使用
'explore'
动词,而不是
'open'
动词,尤其是当
'explore'
不是默认值时。如果您知道要调用的确切行为,那么不要依赖于默认行为。不,我的delphi甚至不会运行这个。可能是我的delphi是2006版吗?实际上,最好不要提供
open
,并允许Windows在需要时决定默认行为。这里已经讨论过很多次了。如果需要默认行为,请保留第二个参数nil并获取默认行为。许多类型的软件都不会默认注册为
open
。作者写道:“我正在尝试打开windows资源管理器…”-所以“open”似乎是预期的行为,不是吗?:)嗯,不是。如果默认值是
explore
?正如我所说,如果你想要默认的行为,不要告诉Windows做任何事情,你会得到它。为什么要猜测违约可能是什么?但我会让微软来解释-请自己阅读MSDN上的ShellExecute文档。:-)要打开资源管理器窗口,应该使用
'explore'
动词,而不是
'open'
动词,尤其是当
'explore'
不是默认值时。如果您知道要调用的确切行为,那么不要依赖默认行为。