Delphi:DragQueryFile和ThunderBird

时间:2017-11-09 09:59:03

标签: 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;
    ...
    DragFinish(Msg.WParam);
    Handled := true;

我们将这些文件名用作数据库中的链接(只是路径,而不是内容)。

它正在使用真实的文件名,拖动就可以了。

但现在我们需要处理来自ThunderBird的拖动电子邮件。 这很有趣,因为如果有人从ThunderBird拖出一封电子邮件并将其放入我们的表单中,那么eml文件将成为临时的"。 该文件由Thunderbird创建为" User \ Local Settings \ Temp"电子邮件主题和eml内容。

在很短的时间内,文件可以访问,现有。 我可以在这个程序中,或在程序结束时(DragFinish之后)阅读它。

该文件不是临时的,Attrs = 32(而不是256)。

我尝试启动一个毫秒级的计时器以检查何时删除,但在处理完邮件后它仍然存在。

但是当我尝试调试此代码时,或者我按下按钮以检查文件是否存在 - 它不再存在。所以它由ThunderBird保留了很短的时间。

所以我无法确定它的持久性文件,或者以后它会被真正的所有者删除,我需要复制到某处以保存它。

我可能有两点:eml扩展名和本地临时目录。

另一个解决方案可能是OLE拖动,但后来我不知道扩展名 - 只有文件内容。

如果我能从源应用程序获取源应用程序的句柄或信息,我会确定该做什么会更好。

这个问题有解决办法吗? 你知道我可以从Dragged文件中获取信息的任何函数吗?

感谢您的帮助!

DD

0 个答案:

没有答案