我正在使用带有FO_DELETE参数的SHFileOperationW函数将文件移动到回收站(如果未禁用回收站)。
问题是当我以非管理员用户身份登录并以管理员身份运行我的应用程序时。文件将移至管理员回收站。
是否可以将文件移动到当前记录的非管理员用户的回收站?
我的想法是运行单独的非升级过程并将其从那里移动到回收站。但我不确定是否存在更好的解决方案。我试图在互联网上找到答案,但没有成功。
答案 0 :(得分:0)
我建议使用以下例程 - 在Delphi XE 10上测试。
function File2Trash(const FileName: string): boolean;
var
fos: TSHFileOpStruct;
begin
FillChar(fos, SizeOf(fos), 0);
with fos do
begin
wFunc := FO_DELETE;
pFrom := PChar(ExpandFileName(FileName)+#0#0);
fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT or FOF_NOERRORUI;
end;
Result := (0 = ShFileOperation(fos));
end;
一些细节很重要:
答案 1 :(得分:-1)
当我需要使用此例程时,我使用了以下命令。 我希望它很有用。
使用Delphi 2010和Windows 8进行测试。
procedure TForm2.Button1Click(Sender: TObject);
var
vMsg : string;
begin
// If want permanently delete
//deletefile(edit1.text);
SendFileToTrash(edit1.Text, vMsg);
if (vMsg = '') then
begin
ShowMessage('File sent to the trash.');
end else begin
ShowMessage(vMsg);
end;
end;
procedure TForm2.SendFileToTrash(const aFileName: TFileName; var MsgError: string);
var
Op: TSHFileOpStruct;
begin
{Very importante
Include in Uses SysUtils and ShellAPI;
}
MsgError := '';
if not (FileExists(aFileName)) then
begin
MsgError := 'File not found.';
Exit;
end;
FillChar(Op, SizeOf(Op), 0);
Op.wFunc := FO_DELETE;
Op.pFrom := PChar(aFileName+#0);
Op.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
if (ShFileOperation(Op) <> 0) then
begin
MsgError := 'Could not send the file to the trash.';
end;
end;