Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Add-ins for Outlook (http://www.outlookbanter.com/add-ins-outlook/)
-   -   Automate Spell Check on MailItem.Send() ??? (http://www.outlookbanter.com/add-ins-outlook/44840-automate-spell-check-mailitem-send.html)

Brian McCullough March 30th 07 04:44 AM

Automate Spell Check on MailItem.Send() ???
 
Hello,

I have inherited an Outlook Addin which is currently working for Outlook XP.
The current add in is really simple. It adds a custom button to the
"Standard" toolbar for a MailItem's Inspector and, when clicked, this button
modifies the email message slightly and then sends it. The problem is, the
code use's the MailItem's .Send() method to send the message and, because
many of the users in the company use Outlook's editors (i.e. RichText or
HTML) to create the email messages, the Spell Checker is not launched when
the message is sent (even if the appropriate settings have been configured
in the Tools Options Spelling tab).

I have been asked to get some sort of spell checking to work with this
addin. The addin is written in vb.net and I have access to the Redemption
library.

After attempting a few solutions using Word as the "spell check hosting
engine" (as in this MSDN article:
http://msdn2.microsoft.com/en-us/lib...ffice.11).aspx) and
automating the "click" of the regular Send button, I have been unsuccessful.

I am really close using something where I automate the "click" of the
Inspector's Tools Spelling command (looks similar to this):


Private Sub HandleMyButton()

Dim objMailItem as MailItem 'this is set and initialized up top

'checks in place to check for Word mail up here...the rest assumes Outlook
mail editor

Dim ctlSpellCheck As CommandBarControl
Dim cbrMenuBar As CommandBar

Set cbrMenuBar = m_objInsp.CommandBars("Standard")

'i know there is a better way to get this control, but I havent downloaded
Outlook Spy again to verify the ID of the Spelling menu item
Dim ctlTmp As CommandBarControl
For Each ctlTmp In cbrMenuBar.Controls
If ctlTmp.Type = msoControlButton Then
If ctlTmp.Caption = "&Spelling..." Then
Set ctlSpellCheck = ctlTmp
Exit For
End If
End If
Next

'a "Spell Check has Completed" message box is shown after Outlooks Spell
Checker has run and NOT BEEN CANCELED...
ctlSpellCheck.Execute

objMailItem.Subject = "MODIFIED MESSAGE" & objMailItem.Subject

objMailItem.Send()

End Sub


There are a few minor problems with this...

1. When I use the Spelling menu item's Execute method, the spell checking
runs fine, but after the spell check has been completed (not canceled), I
get a message stating along the lines of "The spell check has completed".
This same message that you see after spell checking has completed during
regular spell checking functionality (i.e. if you choose Tools Spelling
menu item on the message yourself). This message isnt shown if I were to
click the regular "Send" button.

2. The spell checking dialog has a "Cancel" button on it, but when I click
this button, I have no way of handling this condition. One thing I do know
is that I don't get the message dialog from #1 above. When I click the
Cancel button, the code just keeps on going and sends the message. However,
when I press Cancel, I'd like to be able to handle this

Is there ANY way possible to determine if the user clicked the "Cancel"
button during the spell check? For example, can I write some low level code
that can hook into the spell check window shown by Outlook? Perhaps there
is a Win32 API method that I could use to determine if the dialog in #1
above was shown, which would indicate that the user did NOT cancel the spell
check??? I know it's a long shot, but I wanted to see if anyone had any
ideas on this...

TIA!!!



Ken Slovak - [MVP - Outlook] March 30th 07 02:18 PM

Automate Spell Check on MailItem.Send() ???
 
The only thing I can think of is to find the spelling window using something
like FindWindow() and then hook into its Windows message queue. That way you
can intercept messages directed at that window and check for mouse clicks
and such. How you'd determine all that and how to determine that a click was
on the Cancel button is something you'd also have to determine.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Absolute Beginner's Guide to Microsoft Office Outlook 2003
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Brian McCullough" wrote in message
...
Hello,

I have inherited an Outlook Addin which is currently working for Outlook
XP. The current add in is really simple. It adds a custom button to the
"Standard" toolbar for a MailItem's Inspector and, when clicked, this
button modifies the email message slightly and then sends it. The problem
is, the code use's the MailItem's .Send() method to send the message and,
because many of the users in the company use Outlook's editors (i.e.
RichText or HTML) to create the email messages, the Spell Checker is not
launched when the message is sent (even if the appropriate settings have
been configured in the Tools Options Spelling tab).

I have been asked to get some sort of spell checking to work with this
addin. The addin is written in vb.net and I have access to the Redemption
library.

After attempting a few solutions using Word as the "spell check hosting
engine" (as in this MSDN article:
http://msdn2.microsoft.com/en-us/lib...ffice.11).aspx) and
automating the "click" of the regular Send button, I have been
unsuccessful.

I am really close using something where I automate the "click" of the
Inspector's Tools Spelling command (looks similar to this):


Private Sub HandleMyButton()

Dim objMailItem as MailItem 'this is set and initialized up top

'checks in place to check for Word mail up here...the rest assumes
Outlook mail editor

Dim ctlSpellCheck As CommandBarControl
Dim cbrMenuBar As CommandBar

Set cbrMenuBar = m_objInsp.CommandBars("Standard")

'i know there is a better way to get this control, but I havent
downloaded Outlook Spy again to verify the ID of the Spelling menu item
Dim ctlTmp As CommandBarControl
For Each ctlTmp In cbrMenuBar.Controls
If ctlTmp.Type = msoControlButton Then
If ctlTmp.Caption = "&Spelling..." Then
Set ctlSpellCheck = ctlTmp
Exit For
End If
End If
Next

'a "Spell Check has Completed" message box is shown after Outlooks Spell
Checker has run and NOT BEEN CANCELED...
ctlSpellCheck.Execute

objMailItem.Subject = "MODIFIED MESSAGE" & objMailItem.Subject

objMailItem.Send()

End Sub


There are a few minor problems with this...

1. When I use the Spelling menu item's Execute method, the spell checking
runs fine, but after the spell check has been completed (not canceled), I
get a message stating along the lines of "The spell check has completed".
This same message that you see after spell checking has completed during
regular spell checking functionality (i.e. if you choose Tools Spelling
menu item on the message yourself). This message isnt shown if I were to
click the regular "Send" button.

2. The spell checking dialog has a "Cancel" button on it, but when I click
this button, I have no way of handling this condition. One thing I do
know is that I don't get the message dialog from #1 above. When I click
the Cancel button, the code just keeps on going and sends the message.
However, when I press Cancel, I'd like to be able to handle this

Is there ANY way possible to determine if the user clicked the "Cancel"
button during the spell check? For example, can I write some low level
code that can hook into the spell check window shown by Outlook? Perhaps
there is a Win32 API method that I could use to determine if the dialog in
#1 above was shown, which would indicate that the user did NOT cancel the
spell check??? I know it's a long shot, but I wanted to see if anyone had
any ideas on this...

TIA!!!




All times are GMT +1. The time now is 10:27 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com