Jump to content
Sign in to follow this  
MFerris

Dropping Outlook attachments onto GUI

Recommended Posts

MFerris

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).

http://social.msdn.microsoft.com/Forums/is/vblanguage/thread/c30b87fa-3257-4b0b-b36b-350b0dd5b397

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)
         ListBox1.Items.AddRange(IO.File.ReadAllLines(oneFile))
     Next oneFile
End Sub
Edited by MFerris

Share this post


Link to post
Share on other sites
water

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 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
MFerris

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 this post


Link to post
Share on other sites
water
looks like a good start for the drag & drop issue.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-10-19 - Version 1.4.10.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • nooneclose
      By nooneclose
      Good morning everyone, I thought I had already solved this issue but it turns out I did not. 
      My code finds unread emails with this specific subject line of "request" but when I change the subject to SKIPPED + "request" = ("SKIPPED request") the program still finds the email and tries to process it. I only want to process emails with the exact match subject of "request".
      Here is my code that "finds" the unread emails with the subject of "request" or so I thought. 
      Func ListUnreadEmails() ;******************************************************************************* ; Lists all unread E-mails from the folder Outlook-UDF-Test ;******************************************************************************* ; Stores all the unRead emails into an array Global $aItems = _OL_ItemFind($oOutlook, "*\Outlook-UDF-Test", $olMail, _ "[UnRead]=True", "Subject", "request", "EntryID,Subject", "", 1) ; Displays the array of unRead emails If IsArray($aItems) Then ;_ArrayDisplay($aItems, "OutlookEX UDF: _OL_ItemFind - Unread mails") Else MsgBox(48, "OutlookEX UDF: _OL_ItemFind Example Script", _ "Could not find an unread mail. @error = " & @error & ", @extended: " & @extended) EndIf ; Gets the number of unread emails Global $numberOfUnRead = UBound($aItems, $UBOUND_ROWS) - 1 ;MsgBox("", "Number of Unread emails", $numberOfUnRead) EndFunc It acts as if any part of the subject containing the word "request" and the email is unread that it will try to process it. (I think)
    • nooneclose
      By nooneclose
      Good afternoon, I am in need of some help. I am sure this is a stupid question requiring only one or two lines of code. However, I would greatly appreciate the help I cannot figure this out. I also tried searching for the answer on the internet but no one except me apparently seems to be having a hard time figuring this out and or is asking about it. 
      I simply want to change the "status" of an email from unread to read once I have processed it. My code is over 500 lines and I would like not to clutter this post with it. Assume I have all my includes and connections properly defined and stuff. 
      Here is the bit of code where I am trying to change the email that was used from unread to read:
      Func ChangeEmailStatus() ;******************************************************************************* ; changes the status of an email from unread to Read ;******************************************************************************* Local $iRows = UBound($aItems, $UBOUND_ROWS) MsgBox("", "Number of Unread emails (Before Change)", $iRows) _OL_ItemModify($oOutlook,$aItems[$i][0], Default, "Read=True") MsgBox("", "Array Display 1", $aItems[1][0]) MsgBox("", "Array Display 2", $aItems[2][0]) Local $iRows = UBound($aItems, $UBOUND_ROWS) MsgBox("", "Number of Unread emails (After Change)", $iRows) EndFunc  
    • nooneclose
      By nooneclose
      Hello again everyone, I am trying to make a simple bot/AI to help me at work. I need it to read the subject line of emails, open them if a certain subject line is found, and then copy the contents of the said email and paste it in a different program. 
      Can the Autoit outlook UDF help me achieve this? 
      Also, I have tried the Outlook UDF and so far I have only figured out how to find all the unread emails (thanks to one of water's example scripts. @water you are a genius just saying).
      I am very new to this UDF and would love any help that would guide me into making this bot/AI a reality at work.   
    • water
      By water
      Extensive library to control and manipulate Microsoft Outlook.
      Theads: Development - General Help & Support - Example Scripts - Wiki
      BTW: If you like this UDF please click the "I like this" button. This tells me where to next put my development effort

      KNOWN BUGS (last changed: 2018-09-01)
      None
    • Gowrisankar
      By Gowrisankar
      Dear members of the forum,
      I need to open the attachments from mails without downloading them. Is it possible using OutlookEx UDF ?
×