Group:  Microsoft Outlook ยป microsoft.public.outlook.program_addins
Thread: Automate Spell Check on MailItem.Send() ???

Geek News

Automate Spell Check on MailItem.Send() ???
"Brian McCullough" <nospammingme[ at ]nospam.com> 3/30/2007 3:44:32 AM
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/library/aa203681(office.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!!!


Re: Automate Spell Check on MailItem.Send() ???
"Ken Slovak - [MVP - Outlook]" <kenslovak[ at ]mvps.org> 3/30/2007 1:18:14 PM
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" <nospammingme[ at ]nospam.com> wrote in message
news:ukSR42ncHHA.4172[ at ]TK2MSFTNGP05.phx.gbl...
[Quoted Text]
> 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/library/aa203681(office.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!!!
>

Home | Search | Terms | Imprint Contact
Newsgroups Reader - provided by WiredBox.Net