Powershell GUI从电子邮件附件拖放空参数

Powershell GUI从电子邮件附件拖放空参数,powershell,outlook,drag-and-drop,Powershell,Outlook,Drag And Drop,我有一个GUI,其中有一个只读文本框,我可以将文件拖到该文本框中,然后有一个函数与该文件一起运行。这在我的机器上适用于本地下载文件夹中的文件、所有文件扩展名、outlook电子邮件附件等。我没有问题 一位同事已开始使用它,他无法成功地将电子邮件附件从outlook拖到该框中。arg为空。这一切都在我的机器上运行,但不是他的。我对另一个人进行了测试,他们也有同样的问题 $filebox.Add_DragEnter({ if ($_.Data.GetDataPresent([Windows.

我有一个GUI,其中有一个只读文本框,我可以将文件拖到该文本框中,然后有一个函数与该文件一起运行。这在我的机器上适用于本地下载文件夹中的文件、所有文件扩展名、outlook电子邮件附件等。我没有问题

一位同事已开始使用它,他无法成功地将电子邮件附件从outlook拖到该框中。arg为空。这一切都在我的机器上运行,但不是他的。我对另一个人进行了测试,他们也有同样的问题

$filebox.Add_DragEnter({
    if ($_.Data.GetDataPresent([Windows.Forms.DataFormats]::FileDrop)) {
        $_.Effect = [Windows.Forms.DragDropEffects]::Copy
    }
})
$filebox.Add_DragDrop({
    foreach ($file in $_.Data.GetData([Windows.Forms.DataFormats]::FileDrop)) {
        create_dir $file # Function doesn't even trigger here with outlook email attachments because no arg
    }
})
我们都从一个共享的收件箱中获取信息。没有硬编码来识别用户,或者定义一个设置的路径,它应该只抓取放在框中的参数的路径,对吗? 我只是不明白拖放是如何工作的一些文件,但不是电子邮件附件,然后还完全在我的机器上工作


我认为自己是个新手程序员,第一次与PosiS壳混淆。(在这种情况下,我无法访问任何其他内容。无法编译c#,powershell就是它。)。也许我错过了一些基本的东西。有人对此有什么想法吗?

由于文件系统中没有物理文件,因此文件格式将不存在。请参见

由于文件系统上没有物理文件,因此文件格式将不存在。看

正如Dmitry所指出的,这些文件实际上并没有保存在机器上,所以我不能只是复制项目。在这里,保存文件,然后调用create_dir函数,它可以从新的下载路径复制项目


正如Dmitry所指出的,这些文件实际上并没有保存在机器上,所以我不能只是复制项目。在这里,文件被保存,然后调用create_dir函数,它可以从新的下载路径复制项目。

在我的机器上,如果我输出$file arg而不是运行create_dir函数,我将在appData/local/temp文件夹中获得一个文件路径,create_dir函数将运行。该函数基于文件名创建一个目录,并将文件复制到其中。谢谢你的链接。这对我来说是有道理的。我只是不明白为什么它对我有效而对他无效。对我来说,文件确实在文件系统中,因为路径的叶子是实际的文本文件。例如:我刚刚输出了arg路径,得到了C:\Users\{user}\AppData\Local\Temp\1\ed709666-5bdb-4b96-ac5f-c4-e6f2d384d0\G000B95X\u 20200609.txt——我要的文件就是这个txt文件。现在,当我让我的同事做同样的事情时,输出只是空的。是它在某种程度上对我起作用的实际bug。Lol有一些插件(我写了一个,如果有的话)可以拦截拖放启动,并在临时文件夹中提供一个实际文件供外部使用。你的机器上安装了哪些加载项?我让它工作了。你的链接让我走上了正确的道路。出于好奇,我拉了拉我的外接程序,认为它们看起来都像标准的外接程序。至于修复方法:如果filedrop,我会检查drop事件,如果不是,我们假设它是一个outlook附件(不知道如何定义和检查outlook附件),并将文件保存到downloads文件夹,然后使用新创建的下载路径前进。干杯,谢谢我的机器,如果我输出$file arg而不是运行create_dir函数,我将在appData/local/temp文件夹中获得一个文件路径,create_dir函数将运行。该函数基于文件名创建一个目录,并将文件复制到其中。谢谢你的链接。这对我来说是有道理的。我只是不明白为什么它对我有效而对他无效。对我来说,文件确实在文件系统中,因为路径的叶子是实际的文本文件。例如:我刚刚输出了arg路径,得到了C:\Users\{user}\AppData\Local\Temp\1\ed709666-5bdb-4b96-ac5f-c4-e6f2d384d0\G000B95X\u 20200609.txt——我要的文件就是这个txt文件。现在,当我让我的同事做同样的事情时,输出只是空的。是它在某种程度上对我起作用的实际bug。Lol有一些插件(我写了一个,如果有的话)可以拦截拖放启动,并在临时文件夹中提供一个实际文件供外部使用。你的机器上安装了哪些加载项?我让它工作了。你的链接让我走上了正确的道路。出于好奇,我拉了拉我的外接程序,认为它们看起来都像标准的外接程序。至于修复方法:如果filedrop,我会检查drop事件,如果不是,我们假设它是一个outlook附件(不知道如何定义和检查outlook附件),并将文件保存到downloads文件夹,然后使用新创建的下载路径前进。干杯,谢谢
$filebox.Add_DragDrop({
    if ($_.Data.GetDataPresent([System.Windows.Forms.DataFormats]::FileDrop)) {
        foreach ($file in $_.Data.GetData([System.Windows.Forms.DataFormats]::FileDrop)) {
            create_dir $file
        }
    }
    else {
        $outlook = New-Object -ComObject Outlook.Application
        $s = $outlook.ActiveExplorer().Selection
        foreach ($item in $s){
            foreach($a in $item.Attachments){
                $name = Join-Path -Path $dlpath -ChildPath $a.filename
                $a.SaveAsFile($name)
                create_dir $name
            }
        }
    }
})