Delphi 德尔菲:DragQueryFile和ThunderBird
我们将此代码用于获取拖动的文件:Delphi 德尔菲:DragQueryFile和ThunderBird,delphi,drag-and-drop,temporary-files,thunderbird,Delphi,Drag And Drop,Temporary Files,Thunderbird,我们将此代码用于获取拖动的文件: if Msg.Message = WM_DROPFILES then begin for fnum := 0 to DragQueryFile(Msg.WParam, FileIndex, NIL, 255) - 1 do begin DragQueryFile(Msg.WParam, fnum, buffer, 255); fname := StrPas(buffer); ... end;
if Msg.Message = WM_DROPFILES then
begin
for fnum := 0 to DragQueryFile(Msg.WParam, FileIndex, NIL, 255) - 1 do
begin
DragQueryFile(Msg.WParam, fnum, buffer, 255);
fname := StrPas(buffer);
...
end;
...
DragFinish(Msg.WParam);
Handled := true;
我们将这些文件名用作数据库中的链接(只是路径,而不是内容)
它使用的是真实的文件名,拖动正常
但现在我们需要处理从雷鸟那里拖来的电子邮件。
这很有趣,因为如果有人从ThunderBird中拖出一封电子邮件并将其放入我们的表单中,eml文件将变成“临时的”。
该文件由Thunderbird创建为“User\Local Settings\Temp”,包含电子邮件主题和eml内容
在很短的时间内,文件是可访问的、存在的。
我可以在本程序中阅读,也可以在本程序结束时(在DragFinish之后)阅读
该文件不是真正的临时文件,Attrs=32(而不是256)
我试图启动一个毫秒长的计时器来检查何时删除,但它在消息处理后仍然存在
但当我试着调试这段代码时,或者我按下一个按钮检查文件是否存在——它已经不存在了。所以它被雷鸟暂时保存了下来
所以我不能确定它是一个永久文件,否则它会被真正的所有者删除,我需要复制到某个地方来保存它
我可能有两点:eml扩展和本地临时目录
另一种解决方案可能是OLE拖动,但我不知道扩展名,只知道文件内容
如果我能从源应用程序中获取源应用程序的句柄或信息,以便我能决定该做什么,那就更好了
这个问题有什么解决办法吗?
你知道我可以从拖动的文件中获取信息的函数吗
谢谢你的帮助
dd