Followers 0

# Dropping Outlook attachments onto GUI

## 4 posts in this topic

#1 ·  Posted (edited)

Hi all - hoping some of you OLE/COM/DLL gurus could possibly help me out with a task that has really got me stumped - mostly because I am not terribly familiar with hooking into DLLs and the whole 'DllStruct' arena. I can usually find a solution to my problems by searching these forums as well as VB related scripts and tend to post here only as a last resort - which is where I find myself now.

I am attempting to write a utility which will accept attachments dragged out of Outlook onto my GUI and then save the files to a specified directory. This behavior is not allowed by default. I am able to set up the GUI to accept files dropped onto it with no problem, but attempting to drag an attachment from Outlook onto the GUI shows the 'no action' icon. I've done plenty of searching on how this can be done in VB. I have found some solutions, but I can't figure out how to convert it to AutoIt code. In doing some searches here on the forum, I found which I *think* might be a step in the right direction, however it more or less deals with clipboard data, not actual dropped items onto a control.

I'm not asking for anyone to code this for me, but only to pick the brains of those who understand this a little more clearly and can steer me in the right direction. Also if there is a good tutorial on how to use DLLs with the DLLStruct and DLLStructCreate functions.

Note: Some further code example which sounds like nearly exactly what I'm trying to do (but in VB).

Private Sub listbox1_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles ListBox1.DragEnter
If (e.Data.GetDataPresent(DataFormats.FileDrop) = True) Then
e.Effect = DragDropEffects.Copy
End If
End Sub
Private Sub listbox1_DragDrop(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles ListBox1.DragDrop
For Each oneFile As String In _
e.Data.GetData(DataFormats.FileDrop)
Next oneFile
End Sub
Edited by MFerris

##### Share on other sites

I can't help you with the "drag" part but for the "Outlook" part you might have a look at my OutlookEX UDF (please check my signature).

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:

##### Share on other sites

#3 ·  Posted (edited)

Thanks, water. I've actually used your UDF for other purposes and it's worked great - thanks for your contribution. I think the bigger nut to crack is getting the AutoIt GUI to accept the dragged attachment as a droppable item, as my research shows that the data contained in the outloook 'droppable' is a list of the items being dragged (or possibly binary data of the items themselves - this part I'm not entirely clear on). So I don't really think there's much to do as far as hooking into Outlook is concerned. I may look into whether the clipboard route may work as a last resort. (CTRL+C on an attachement in Outlook triggers the DropEffect script that i linked to - haven't explored that route very much yet as that's not the optimal solution.)

Update: It seems the VB code isn't really going to help as I was researching the use of 'System.Windows.Forms' doesn't really apply to AutoIt GUIs - So I'm guessing now I'm looking for something that will allow the AutoIt GUI to accept the drop action. I found another solution for C# here but the same construct applies. I just need to find a DLL or OLE hook that will let me force AutoIt to allow the drop and read the stream of data that it receives.

Edited by MFerris

##### Share on other sites
looks like a good start for the drag & drop issue.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:

## Create an account

Register a new account

Followers 0

• ### Similar Content

• By cag8f
Hi all.  Does AutoIt have any functions/tools (either built-in or user defined) that can help me automate the process of exporting an OST mailbox to a PST file in Microsoft Outlook (2013)?
I know how to carry out the process manually.  At the Microsoft Forums, I have asked if it is possible to do the same via a script, but some have said it is not possible.  It may be possible if I was using Microsoft Exchange, but I am not.
I've seen some posts about an Outlook UDF on this site (here and here), but I don't see any mention of exporting a mailbox.
In my post at the Microsoft Forums, many paid third party applications were suggested.  But for now I would like to pursue the custom scripting route as far as I can.
The ultimate goal of this exercise is to automatically create a weekly backup of my Outlook mailbox for offline storage.

• By zetaimmersion
Hi all.
I am trying to do 2 things but i cannot seem to get any traction on how to read/implement this idea.
Premise: PowerPoint file in C\temp\presentation.pptx that contains on the first slide 2 entries as "<one>" and "<two>" which need to be replaced with "user1" and "user2", then a silent Outlook send mail containing the file with a predefined body and subject.
I narrowed it down to COM objects as the Office does not like intrusive open AutoIt functions. I installed OLE/COM Object Viewer to understand how to create the commands but i am still stuck. So far i am trying to user water's code but i suck
COM object i was originally trying to modify
Dim $oPPT,$oPres $oPPT = ObjCreate("PowerPoint.Application")$oPPT.Visible = True $oPres =$oPPT.Presentations.Read Water's code below (0.1% modified)
#include <File.au3> #include "PowerPoint.au3" #include <misc.au3> Global $sFile = "C:\temp\presentation.pptx" Global$sString2Search = "<username>", $sString2Replace = "Password",$iReplaceOnce = 1, $sFullLogFile = "C:\temp\pptxlog.txt" _ProcessPpt($sFile) Func _ProcessPpt($sFile)$oApp = _PPT_PowerPointApp() Local $bChange = False Local$oInterface = $oApp.Presentations Local$oPresentation = $oInterface.Open($sFile, False, False, False) If @error Then _FileWriteLog($sFullLogFile, "E Error " & @error & " opening File " &$sFile) Return SetError(1, 0, 0) EndIf ;it does not even open my file and from here not sure how to read the text and replace it EndFunc ;==>_ProcessPpt
• By Smigacznr1
I'm writing Outlook pst cleaner and now I'm stuck. Compiled script is crashing with OS crash message. When I tryied to run script from editor it's exiting itself (mabye it's some type of crash?) always when it's processing on 4-rd pst file. Here is my code:
#include <OutlookEX.au3> #include <Date.au3> #include <File.au3> #include <Array.au3> _cleanOutlook("Administrator") _cleanOutlook("Admin") Exit Func _cleanOutlook($user)$foldery = "Wiadomości-śmieci#?SPAM#?Junk E-mail#?Elementy usunięte#?Deleted Items" $tab_folderow = StringSplit($foldery, "#?", 1) $tab_pst = _FileListToArrayRec("c:\users\" &$user, "*.pst", 1+4+8, 1, 0, 2) ;~ _ArrayDisplay($tab_pst) For$d = 1 To UBound($tab_pst) -1 Step +1$outlook = _OL_Open(True) _OL_Close($outlook, True)$outlook = _OL_Open() Local $aStores = _OL_StoreGet($outlook) ;~ _ArrayDisplay($aStores) For$i = 1 to $aStores[0][0] If$aStores[$i][4] = True Then ;~ ConsoleWrite(@CRLF & "zamykam pst 2") _OL_PSTClose($outlook,$aStores[$i][0]) EndIf Next ;~ _OL_PSTAccess($outlook, "C:\Users\Administrator\Desktop\cos.pst") _OL_PSTAccess($outlook, $tab_pst[$d]) ConsoleWrite(@CRLF & $tab_pst[$d]) ;~ $tab_struktury = _OL_FolderTree($outlook, "*", 10) ;~ If @error Then ;~ ContinueLoop ;~ EndIf ;~ _ArrayDisplay($tab_struktury)$tab_ktory_pst = _OL_PSTGet($outlook) ;~ _ArrayDisplay($tab_ktory_pst) For $a = 0 To UBound($tab_ktory_pst) -1 Step +1 If $tab_ktory_pst[$a][2] = $tab_pst[$d] Then ;~ MsgBox(0, "", $tab_ktory_pst[$a][0]) $nazwa_bazy_pst =$tab_ktory_pst[$a][0] EndIf Next ;~ MsgBox(0, "", UBound($tab_folderow)) ;~ _ArrayDisplay($tab_folderow,$tab_pst[$d]) ConsoleWrite(@CRLF & "przed while")$a = 0 While $a < 2 ConsoleWrite(@CRLF & "while 1") For$b = 1 To UBound($tab_folderow) -1 Step +1 ConsoleWrite(@CRLF & "for 1")$tab_struktury = _OL_FolderTree($outlook,$nazwa_bazy_pst) ;~ _ArrayDisplay($tab_struktury,$nazwa_bazy_pst) ;~ $folder = _OL_FolderAccess($outlook, StringTrimLeft($tab_struktury[0], 2) & "\" &$tab_folderow[$b])$folder = _OL_FolderAccess($outlook,$nazwa_bazy_pst & "\" & $tab_folderow[$b]) ;~ ConsoleWrite(@CRLF & "eeee") If @error Then ;~ MsgBox(0, "", "\\" & $nazwa_bazy_pst & "\" &$tab_folderow[$b] & @CRLF & @error) ConsoleWrite(@CRLF & "przechodze do kolejnego " &$b+1) ContinueLoop EndIf ;~ _ArrayDisplay($folder,$nazwa_bazy_pst) ConsoleWrite(@CRLF & $tab_folderow[$b]) If $tab_folderow[$b] = "Deleted Items" Or $tab_folderow[$b] = "Elementy usunięte" Then ConsoleWrite(@CRLF & "usuwam kosze") _OL_FolderDelete($outlook,$folder[1], 1) _OL_FolderDelete($outlook,$folder[1], 2) _OL_FolderDelete($outlook,$folder[1], 3) _OL_FolderDelete($outlook,$folder[1], 4) ;~ _OL_FolderDelete($outlook,$folder[1], 5) EndIf If $a = 0 Then$tab_maile = "" $data_dzis = @YEAR & "/" & @MON & "/" & @MDAY & " 00:00" ;~$data_dzis = "2017/01/31 00:00" $data_szukana = _DateAdd("D", "-3",$data_dzis) $tab_maile = _OL_ItemFind($outlook, $folder[1],$olMail, "[Received]<'" & StringReplace($data_szukana, "/", "-") & "'", "", "", "EntryID", "", 1) If @error Then ContinueLoop EndIf ;~ If UBound($tab_maile) > 1 Then ;~ _ArrayDisplay($tab_maile) ;~ EndIf If UBound($tab_maile) > 1 Then For $c = 1 To UBound($tab_maile) -1 Step +1 ;~ ConsoleWrite(@CRLF & "usuwam stare maile") _OL_ItemDelete($outlook,$tab_maile[$c][0], "", False) Next EndIf EndIf Next$a = $a + 1 WEnd ;~ ConsoleWrite(@CRLF & "pokazuje") ;~$folder[1].Display $olFolderInbox.Display ;~ _OL_PSTClose($outlook, $olFolderInbox) ;~ If @error Then ;~ MsgBox(0, "", @error) ;~ EndIf Local$aStores = _OL_StoreGet($outlook) ;~ _ArrayDisplay($aStores) For $i = 1 to$aStores[0][0] If $aStores[$i][4] = True Then ;~ ConsoleWrite(@CRLF & "zamykam pst 1") _OL_PSTClose($outlook,$aStores[$i][0]) EndIf Next ;_OL_PSTClose($outlook, $folder[1]) _OL_Close($outlook, True) If @error Then MsgBox(0, "", @error) EndIf ConsoleWrite(@CRLF & "zamykam") ProcessWaitClose("outlook.exe", 30) ProcessClose("outlook.exe") Next EndFunc
Outlook and OS is updated. I'm usinn OutlooEX in ver. 1.3.1.0
Any ideas?

• By Gowrisankar
Dear members of the forum,
I'm new to AutoIt and I'm having a good time exploring and enjoying the features of AutoIt.
For one of my tasks, I've to open few particular mails from outlook based on subject of the mails and then print the mails. Can someone please guide me how to do it?
My question could be very silly for experts. But I'm just a beginner. Kindly advice.
Thanks and regards,
Gowrisankar R.
• By water
Anyony interested in a function to retrieve the Outlook mailbox quotas for Exchange mailboxes?
If yes, then this function could be added to the OutlookEX UDF.
Result could look like (will later be returned in an array):