Option Strict Off Imports System.IO Imports DigitalData.Modules.Logging Imports Microsoft.Office.Interop Public Class ClassFileDrop Inherits Base.BaseClass Public Property files_dropped As List(Of String) Private ReadOnly FileHandle As ClassFilehandle Public Class DroppedFile Public FilePath As String Public Enum DropType Filesystem OutlookAttachment OutlookMessage End Enum End Class Public Sub New(pLogConfig As LogConfig) MyBase.New(pLogConfig) FileHandle = New ClassFilehandle(pLogConfig) End Sub Public Function Drop_File(e As DragEventArgs) As Boolean Try Logger.Info("Available Drop Formats:") For Each oFormat As String In e.Data.GetFormats() Logger.Debug(oFormat) Next Logger.Info(">> Drop_File") files_dropped = New List(Of String) If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim MyFiles() As String Dim i As Integer ' Assign the files to an array. MyFiles = DirectCast(e.Data.GetData(DataFormats.FileDrop), String()) ' Loop through the array and add the files to the list. For i = 0 To MyFiles.Length - 1 Logger.Info(">> Simple FileDrop - File: " & MyFiles(i)) files_dropped.Add("|DROPFROMFSYSTEM|" & MyFiles(i)) Next Return True ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then '// the first step here is to get the stbFileName '// of the attachment and '// build a full-path name so we can store it '// in the temporary folder '// '// set up to obtain the aryFileGroupDescriptor '// and extract the file name Dim stmInput As IO.Stream = CType(e.Data.GetData("FileGroupDescriptor"), IO.Stream) Dim aryFileGroupDescriptor(512) As Byte ' = new byte[512] stmInput.Read(aryFileGroupDescriptor, 0, 512) '// used to build the stbFileName from the aryFileGroupDescriptor block Dim stbFileName As System.Text.StringBuilder = New System.Text.StringBuilder("") '// this trick gets the stbFileName of the passed attached file Dim intCnt As Integer = 76 Do While aryFileGroupDescriptor(intCnt) <> 0 stbFileName.Append(Convert.ToChar(aryFileGroupDescriptor(intCnt), System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"))) intCnt += 1 Loop stmInput.Close() 'Sonderzeichen entfernen Dim Tempfilename = FileHandle.InvalidCharacters(stbFileName.ToString) Dim anhaenge = e.Data.GetDataPresent("FileContents") 'Dim path As String = "C:\VBProjekte\Dateien" '// put the zip file into the temp directory Dim strOutFile As String = Path.GetTempPath() & Tempfilename '// create the full-path name '// '// Second step: we have the file name. '// Now we need to get the actual raw '// data for the attached file and copy it to disk so we work on it. '// '// get the actual raw file into memory Dim msInput As IO.MemoryStream = CType(e.Data.GetData("FileContents", True), IO.MemoryStream) 'This returns nothing for an Email If msInput Is Nothing = False Then '// allocate enough bytes to hold the raw date Dim aryFileBytes(CType(msInput.Length, Int32)) As Byte '// set starting position at first byte and read in the raw data msInput.Position = 0 msInput.Read(aryFileBytes, 0, CType(msInput.Length, Int32)) '// create a file and save the raw zip file to it Dim fsOutput As IO.FileStream = New IO.FileStream(strOutFile, IO.FileMode.Create) '; fsOutput.Write(aryFileBytes, 0, aryFileBytes.Length) fsOutput.Close() ' // close the file Dim resultVersion = FileHandle.Versionierung_Datei(strOutFile) If resultVersion <> "" Then strOutFile = resultVersion End If Dim finTemp As IO.FileInfo = New IO.FileInfo(strOutFile) '// always good to make sure we actually created the file If (finTemp.Exists = True) Then files_dropped.Add("|OUTLOOK_ATTACHMENT|" & strOutFile) 'ReDim Preserve files_dropped(0) 'files_dropped(0) = "|OUTLOOK_ATTACHMENT|" & strOutFile Logger.Info(">> Drop an Attachment - File: " & strOutFile) Return True Else Logger.Info(">> Attachment File from Outlook could not be created") End If End If End If If e.Data.GetDataPresent("FileGroupDescriptor") Then Dim oApp As Outlook.Application Try oApp = New Outlook.Application() Catch ex As Exception MsgBox("Unexpected error in Initialisieren von Outlook-API:" & vbNewLine & ex.Message & vbNewLine & vbNewLine & "Evtl ist Outlook nicht in der dafür vorgesehenen For") End Try Logger.Info(">> Drop of msg") 'supports a drop of a Outlook message Dim myobj As Object For i As Integer = 1 To oApp.ActiveExplorer.Selection.Count myobj = oApp.ActiveExplorer.Selection.Item(i) Dim subj As String = myobj.Subject If subj = "" Then subj = "NO_SUBJECT" End If If subj.Contains("\") Then subj = subj.Replace("\", "-") End If If subj.Contains("/") Then subj = subj.Replace("/", "-") End If 'Sonderzeichen entfernen subj = FileHandle.InvalidCharacters(subj) 'hardcode a destination path for testing Dim strFile As String = IO.Path.Combine(Path.GetTempPath, subj + ".msg") strFile = strFile.Replace("?", "") strFile = strFile.Replace("!", "") strFile = strFile.Replace("%", "") strFile = strFile.Replace("$", "") Logger.Info(">> Drop of msg - File:" & strFile) Try myobj.SaveAs(strFile) Catch ex As Exception MsgBox("Error in Save Email2Tempfile" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try 'ReDim Preserve files_dropped(i) 'files_dropped(i) = "|OUTLOOK_MESSAGE|" & strFile files_dropped.Add("|OUTLOOK_MESSAGE|" & strFile) Next Return True 'Drop eines Outlook Attachments End If Catch ex As Exception MsgBox("Error in Drop-File" & vbNewLine & ex.Message, MsgBoxStyle.Critical) Return False End Try End Function End Class