Jonathin,

 

I think I put the "silence" there because I had just minimized all open
windows, and you'll end up on the desktop, and I think WE was announcing
this (saying "desktop" and the name of the icon you happened to land on).

 

I was using the minimize all to be sure that the UAC prompt was spoken,
because I had noticed if some other window was active, then sometimes the
UAC prompt was hidden or at least not spoken.

 

Hth,

 

Chip

 

 

From: Jonathan C. Cohn [mailto:[email protected]] 
Sent: Sunday, November 24, 2013 6:03 PM
To: [email protected]
Subject: Re: registering an activeX as part of an app

 

Chip,

 

I understand all of this code except the silence. Can you explain what this
does? If it does what I expect then  

 

Best wishes,

 

Jonathan

 

 

 

I will want to try it on a few items I have.

 

Specifically, I want a 

button.click 

window.focus 

 

commands to not speak within my function.

 

THanks,

On Sep 23, 2013, at 6:08 PM, Chip Orange wrote:





Hi all,

 

Recently I had some issues with the installation/registration of an activeX
which I needed to distribute as part of an app.  When I got them all sorted
out, I thought I'd share what I had worked out as the best way to run an
activeX registration, or any other program which may require admin
privileges, from a VBScript app.

 

In the example below I'm running a Windows utility named RegSvr32 to
register my activeX, but you can substitute anything else which (as I
mentioned), requires elevated privileges.  Under XP the elevated privileges
just happen for you, because everyone sets themselves up as an "admin", and
everything runs like that (I didn't bother trying to work with 64-bit xp as
it seems so rare).

 

Under Win7, you will not get the elevated privileges which you need
(assuming UAC is enabled) unless you make use of an undocumented verb
parameter which is part of the shell execute (the verb is "runas").  When
you use this, a system with UAC enabled will ask the user if it's ok to run
your program as an admin; if you don't use it, then it won't ask, and you
won't get admin privileges.

 

Further, on 64-bit Windows, you need to run the 32-bit version of the
regsvr32 program because you should be registering a 32-bit activeX because
Window-Eyes runs as a 32-bit program (and you cannot "mix and match" the two
types).

 

Therefore, I offer the below example, and hope if anyone sees I've made an
error, that they'll offer corrections:

 

Chip

 

 

Sub registerControl(pcOCXFullPath)

Dim loShell

Dim lcRegUtilityFullpath

Dim param

 

 

Set loShell = CreateObject("Shell.Application")

If (application.OSVersion.MajorVersion >= 6) Then

' this is Windows Vista or later

 

' minimize any active window so that the UAC prompt will be automatically
spoken if there is one

loShell.MinimizeAll

DoEvents

sleep 500

DoEvents

silence

 

If clientInformation.ScriptProcess.Is64Bit Then

' registration for 64-bit Windows:

' To register a 32-bit ActiveX DLL in the 64-bit registry, you'll need to
run the regsvr32 located in \windows\syswow64.

lcRegUtilityFullpath = "c:\windows\syswow64\" ' here I should have actually
dug out the correct environment variable for the windows directory

 

Else '  clientInformation.ScriptProcess.Is64Bit

lcRegUtilityFullpath = "" ' use the regsvr32 in the windows dir on the path

End If ' clientInformation.ScriptProcess.Is64Bit

 

param = " /s """ & pcOCXFullPath & """"

' the parameters above are /s for a "silent" registration, and then the name
of the activeX file, surrounded in quotes

Speak "now running registration program"

DoEvents

loShell.ShellExecute lcRegUtilityFullpath & "regsvr32", param, "", "runas"

' the "RunAs" parameter allows for UAC prompting if necessary

' (if UAC is disabled, then it has no effect), under XP however, it causes
an unwanted "run as" security dialog to appear

 

Else '  (application.OSVersion.MajorVersion >= 6)

' Windows XP

param = " /s """ & pcOCXFullPath & """"

Speak "now running registration program"

' note: the shell execute below does not use the "runas" verb for Win XP
(which appears to cause an unnecessary user prompt)

loShell.ShellExecute lcRegUtilityFullpath & "regsvr32", param, "", ""

End If ' (application.OSVersion.MajorVersion >= 6)

 

End sub

 

 

 

Reply via email to