Imports System.IO Imports DigitalData.Modules.Logging Imports Microsoft.Office.Interop Public Class ClassFileDrop Public Shared files_dropped As String() Private _LOGGER As Logger Private clsFilehandle As ClassFilehandle Public Sub New(LogConfig As LogConfig) _LOGGER = LogConfig.GetLogger() clsFilehandle = New ClassFilehandle(LogConfig) End Sub Public Function Drop_File(e As DragEventArgs) Try _LOGGER.Info("Available Drop Formats:") For Each oFormat As String In e.Data.GetFormats() _LOGGER.Info(oFormat) Next _LOGGER.Info(">> Drop_File") files_dropped = Nothing If e.Data.GetDataPresent(DataFormats.FileDrop) Then Dim MyFiles() As String Dim i As Integer ' Assign the files to an array. MyFiles = e.Data.GetData(DataFormats.FileDrop) ' 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)) ReDim Preserve files_dropped(i) files_dropped(i) = "|DROPFROMFSYSTEM|" & MyFiles(i) ' ListBox1.Items.Add(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 = clsFilehandle.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 = clsFilehandle.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 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 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 = clsFilehandle.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 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