如何使用在 Windows 剪贴板中复制的文件加载流
How to load a stream with a file copied in Windows clipboard
我已将文件复制到 Windows 剪贴板(只需单击右键,复制)。
我想用当前存储在剪贴板中的文件加载 TStream
后代。
uses
Classes, Clipbrd;
MyStream := TMemoryStream.Create;
try
//here I would like to load the clipboard file into MyStream
finally
MyStream.Free;
end;
当您将文件从硬盘复制到剪贴板时,它只是在CF_HDROP
format. You can use the DragQueryFile()
函数中复制文件的完整路径和文件名以读取文件名,例如:
uses
Classes, Clipbrd, ShellAPI;
var
hDrop: THandle
MyStream: TMemoryStream;
Files: TStringList;
NumFiles, FileIdx: DWORD;
FileName: array[0..MAX_PATH] of Char;
I: Integer;
begin
Files := TStringList.Create;
try
Clipboard.Open;
try
if Clipboard.HasFormat(CF_HDROP) then
begin
// DO NOT free this handle, the clipboard owns it!
hDrop := Clipboard.GetAsHandle(CF_HDROP);
NumFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
if NumFiles <> 0 then
begin
for FileIdx := 0 to NumFiles-1 do
begin
if DragQueryFile(hDrop, FileIdx, FileName, MAX_PATH) <> 0 then
Files.Add(FileName);
end;
end;
end;
finally
Clipboard.Close;
end;
for I := 0 to Files.Count-1 do
begin
MyStream := TMemoryStream.Create;
try
MyStream.LoadFromFile(Files[I]);
MyStream.Position := 0;
// use MyStream as needed...
finally
MyStream.Free;
end;
end;
finally
Files.Free;
end;
end;
我已将文件复制到 Windows 剪贴板(只需单击右键,复制)。
我想用当前存储在剪贴板中的文件加载 TStream
后代。
uses
Classes, Clipbrd;
MyStream := TMemoryStream.Create;
try
//here I would like to load the clipboard file into MyStream
finally
MyStream.Free;
end;
当您将文件从硬盘复制到剪贴板时,它只是在CF_HDROP
format. You can use the DragQueryFile()
函数中复制文件的完整路径和文件名以读取文件名,例如:
uses
Classes, Clipbrd, ShellAPI;
var
hDrop: THandle
MyStream: TMemoryStream;
Files: TStringList;
NumFiles, FileIdx: DWORD;
FileName: array[0..MAX_PATH] of Char;
I: Integer;
begin
Files := TStringList.Create;
try
Clipboard.Open;
try
if Clipboard.HasFormat(CF_HDROP) then
begin
// DO NOT free this handle, the clipboard owns it!
hDrop := Clipboard.GetAsHandle(CF_HDROP);
NumFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
if NumFiles <> 0 then
begin
for FileIdx := 0 to NumFiles-1 do
begin
if DragQueryFile(hDrop, FileIdx, FileName, MAX_PATH) <> 0 then
Files.Add(FileName);
end;
end;
end;
finally
Clipboard.Close;
end;
for I := 0 to Files.Count-1 do
begin
MyStream := TMemoryStream.Create;
try
MyStream.LoadFromFile(Files[I]);
MyStream.Position := 0;
// use MyStream as needed...
finally
MyStream.Free;
end;
end;
finally
Files.Free;
end;
end;