Visual Studio PowerShell Перетаскивание вложений из Outlook в список - PullRequest
0 голосов
/ 30 марта 2020

У меня есть перетаскивание, работающее над формой Windows. я могу удалить элементы с моего рабочего стола или из любой папки, но если я попытаюсь перетащить вложение прямо из Outlook, он ничего не сделает. мне нужно добавить дополнительные команды PowerShell в мой текущий код

######################################## This is For Drag And Drop 

  $listBox1_DragOver = [System.Windows.Forms.DragEventHandler]{
    if ($_.Data.GetDataPresent([Windows.Forms.DataFormats]::FileDrop)) 
    {
        $_.Effect = 'Copy'
    }
    Else
    {
        $_.Effect = 'None'
    }
    }

    $listBox1_DragDrop = [System.Windows.Forms.DragEventHandler]{
        foreach ($filename in $_.Data.GetData([Windows.Forms.DataFormats]::FileDrop)) 
        {
            $listBox1.Items.Add($filename)
        }

        }

        ### Add events to form ###

    $listBox1.Add_DragOver($listBox1_DragOver)
    $listBox1.Add_DragDrop($listBox1_DragDrop)
    #$form.Add_FormClosed($form_FormClosed)

        #### Show form and return result ###
    $dialogResult = $Form12.ShowDialog()
    if ($dialogResult -eq [System.Windows.Forms.DialogResult]::OK)
     {
      $Form12.SuspendLayout()
       [array]$items =  $listbox1.Items| sort -CaseSensitive
       if ($items.Count -gt 1){
       $items
       }
       ELSE
       {
       [string]$items[0]
       }
      $Form12.Close() | out-null
     }

enter image description here

1 Ответ

0 голосов
/ 01 апреля 2020

После долгих исследований я наткнулся на приведенный ниже код, чтобы подвести итог, что он делает.

это позволит вам перетаскивать файлы из Outlook, затем он скопирует и вставит их в папку, которая затем даст вам путь и имя файла. это довольно круто, так что если кто-то еще застрял здесь, это мой рабочий скрипт и как я реализовал его в своей форме

######################################## This is For Drag And Drop 
$Listbox1.AllowDrop = $true 
$Listbox1.Add_DragDrop({
    if ($_.Data.GetDataPresent([Windows.Forms.DataFormats]::FileDrop)) { 
        foreach ($FileName in $_.Data.GetData([Windows.Forms.DataFormats]::FileDrop)) {
            Copy-Item -Path $FileName -Destination $textbox6.text -Force
            $Listbox1.Items.Add($FileName)

        }
    }
    else 
    {
        $Outlook = New-Object -ComObject Outlook.Application;
        $Selection = $Outlook.ActiveExplorer().Selection                                                                       
        foreach ($Item in $Selection) {
            foreach ($Attachment in $Item.Attachments) {
                Write-Verbose $Attachment.FileName
                $Name = Join-Path -Path $textbox6.text-ChildPath $Attachment.FileName
                $Attachment.SaveAsFile($Name)


            }         
        }

    }
})
$Listbox1.Add_DragEnter({$_.Effect = [Windows.Forms.DragDropEffects]::Copy})
$Form12.Controls.Add($Listbox1) 

# Activate the form     

[void] $Form12.ShowDialog()

мне пришлось немного изменить свою форму, добавив Input Folder Button & Textbox6 чтобы показать текст выбранной папки, это важно, так как приведенный выше сценарий нуждается в каталоге для сохранения файлов, см. код ниже.

###################################### Get Folder Using Folder Browser and output text into textbox 
$button4_Click = {

$folderBrowserDialog3=New-Object System.Windows.Forms.FolderBrowserDialog
[void]$folderBrowserDialog3.ShowDialog()
$folderBrowserDialog3.SelectedPath
$textBox6.Text = $folderBrowserDialog3.SelectedPath
}

$button6_Click = {

$folderBrowserDialog1=New-Object System.Windows.Forms.FolderBrowserDialog
[void]$folderBrowserDialog1.ShowDialog()
$folderBrowserDialog1.SelectedPath
$textBox2.Text = $folderBrowserDialog1.SelectedPath
}

$button7_Click = {

$folderBrowserDialog2=New-Object System.Windows.Forms.FolderBrowserDialog
[void]$folderBrowserDialog2.ShowDialog()
$folderBrowserDialog2.SelectedPath
$textBox3.Text = $folderBrowserDialog2.SelectedPath
}

после того, как я понял, что это работает, Меня больше всего беспокоило то, что я не мог видеть файлы в listbox, поэтому я добавил button, чтобы сделать именно это, см. код ниже

###################################### Shows Files In ListBox 1
    $button5_Click = {
    #$textbox8.Text = ""
    $listBox1.Items.Clear()
    $items = Get-ChildItem $textbox6.Text
    ForEach($item in $items){
    $listBox1.Items.Add($item.FullName)
       }
    }

, как вы можете видеть, я добавил $listbox1.Items.Clear() это позволит вам продолжать нажимать кнопку «Показать файлы», не дублируя путь и файл в listbox

, итоговый результат моего Form получился великолепным, см. мой макет изображения ниже, если Кому-нибудь нужна помощь, чтобы он работал самостоятельно Form, пожалуйста, прокомментируйте, и я сделаю все возможное, чтобы помочь.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...