Powershell GUI 从电子邮件附件中拖放空参数
Powershell GUI Drag-and-Drop empty arg from email attachments
我有一个带有只读文本框的 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
}
})
我们都来自共享收件箱。没有什么是硬编码来识别用户或定义设置路径的,它应该只是抓取放在框中的 arg 的路径,对吧?
我只是很困惑 drag/drop 如何处理某些文件而不是电子邮件附件,然后又如何在我的机器上完全工作。
我会认为自己是一个漂亮的新手编码员,而且是第一次弄乱 Powershell。 (在这种情况下我无权访问其他任何东西。无法编译 c#,powershell 就是它。)。也许我在这里遗漏了一些基本的东西。有人对此有什么想法吗?
文件格式将不存在,因为文件系统上没有物理文件。见 Upload fails when user drags and drops attachment from email client
$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
}
}
}
})
正如德米特里所说,文件实际上并没有保存在机器上,所以我不能只复制项目。在这里,保存文件,然后调用create_dir函数,它可以从新的下载路径复制项目。
我有一个带有只读文本框的 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
}
})
我们都来自共享收件箱。没有什么是硬编码来识别用户或定义设置路径的,它应该只是抓取放在框中的 arg 的路径,对吧? 我只是很困惑 drag/drop 如何处理某些文件而不是电子邮件附件,然后又如何在我的机器上完全工作。
我会认为自己是一个漂亮的新手编码员,而且是第一次弄乱 Powershell。 (在这种情况下我无权访问其他任何东西。无法编译 c#,powershell 就是它。)。也许我在这里遗漏了一些基本的东西。有人对此有什么想法吗?
文件格式将不存在,因为文件系统上没有物理文件。见 Upload fails when user drags and drops attachment from email client
$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
}
}
}
})
正如德米特里所说,文件实际上并没有保存在机器上,所以我不能只复制项目。在这里,保存文件,然后调用create_dir函数,它可以从新的下载路径复制项目。