View Single Post
  #7  
Old March 9th 10, 08:39 AM posted to microsoft.public.outlook.program_vba
Reinfried
external usenet poster
 
Posts: 4
Default Programmatic Access Security Pop up with Wordeditor

Thank's for your answer. From what I'm looking was:

WordEditor is a restricted object in cases like that.

Reinfried


"Ken Slovak - [MVP - Outlook]" wrote:

If that's your setup, which wasn't mentioned before, there's not much you
can do about avoiding the object model guard other than bypassing the
Outlook object model. WordEditor is a restricted object in cases like that.

There are a couple of alternatives. First, you can use a 3rd party library
called Redemption (www.dimastr.com/redemption) to avoid the security, which
is what most of us do.

The alternative to that would be to get the WordEditor window using Win32
API calls, which is ugly and requires callbacks but can be used when you
cannot use Redemption.

For that you have to get the window using FindWindow() and FindWindowEx() to
find a window with your caption and a class of "OpusApp". There will be more
than 1 window with that class, so you need the window caption from
Inspector.Caption, but after the email is saved so the caption is valid.

When you find a candidate for the window you use EnumWindows() and
EnumChildWindows() to check for "OpusApp" and the correct caption, and under
that a window class "_WwF" in the case of Outlook/Word 2007. When you've
found those you get the RECT for the candidate window and match it with the
RECT for the Inspector window you derive from the Inspector's size
attributes.

Once you get that you need to use AccessibleObjectFromWindow() to look for
an accessibility object that exposes IDispatch that's one of the child
windows. When you get that you use the ppvObj parameter of
AccessibleObjectFromWindow() thusly, if ob is that object: ob.Document. That
will be your WordEditor object.

I've done that when customers won't allow the use of 3rd party libraries
such as Redemption, but as you can see from the description of the method
you need to know your Win32 API calls and to spend a lot of time playing
with Spy++.

It's a lot easier to use 1 line of Redemption code than the 200 or so lines
of code a GetWordEditor() and needed subsidiary methods take

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Professional Programming Outlook 2007.
Reminder Manager, Extended Reminders, Attachment Options.
http://www.slovaktech.com/products.htm


"Reinfried" wrote in message
...
We have set the Programmatic Access Security to "Always warn me about
suspicious activity" because we wor with TerminalServer wit Windows Server
2003 and i hope You know that to detect the status of the antivirus
software
on client computers, Outlook 2007 depends on the WSC. Currently, antivirus
products that are compatible with Windows XP SP2 and Windows Vista
register
status information with the WSC. Outlook first checks for the current
status
of antivirus software by querying the WSC. On computers running Microsoft
Windows Server 2003, because the WSC is not available, Outlook is unable
to
detect the status of antivirus software and therefore does not disable
security warnings.

And now oncemore to my Question:

Without WordEditor the code runs without security pop up:

Set appOutLook = CreateObject("Outlook.Application")
appOutLook.Session.Logon
Set taskOutLook = appOutLook.CreateItem(olTaskItem)
With taskOutLook
.Subject = "Test hyperlink"
.Importance = olImportanceNormal
.DueDate = "01.03.2010"
.StartDate = "01.03.2010"
.ReminderTime = "01.03.2010" & " " & "08:00"
.ReminderSet = True
.Body = "Das ist der Link zum " & "http://www.google.at" & " Viel
Spass!"
.Importance = olImportanceHigh
.Save
End With

And with WordEditor the code runs with security pop up:

Set appOutLook = CreateObject("Outlook.Application")
appOutLook.Session.Logon
Set taskOutLook = appOutLook.CreateItem(olTaskItem)
With taskOutLook
.Subject = "Test hyperlink"
.Importance = olImportanceNormal
'Only for test fix Date
.DueDate = "01.03.2010"
.StartDate = "01.03.2010"
.ReminderTime = "01.03.2010" & " " & "08:00"
'
.ReminderSet = True
Set objInsp = .GetInspector
' ?????????
Set objDoc = objInsp.WordEditor 'Programmatic Access Security
Check
'
Set objSel = objDoc.Windows(1).Selection
objDoc.Hyperlinks.Add objSel.Range, strLink, "", "",
strLinkText,
""
Set objSel = objDoc.Windows(1).Selection
'Text before Hyperlink
With objSel
.Collapse wdCollapseStart
.InsertBefore "Das ist der Link zum "
End With
'Text after Hyperlink
Set objSel = objDoc.Windows(1).Selection
With objSel
.Collapse wdCollapseStart
.MoveEnd WdUnits.wdStory, 1
.Select
.InsertAfter " Viel Spass! "
End With
.Importance = olImportanceHigh
.Save
End With

Reinfried


.

Ads