Locating a user's Program Files

C

cush

I am able to locate a users desktop with the following code:

Set WSHShell = CreateObject("WScript.Shell")
sPath = WSHShell.specialfolders("Desktop")

I need something similar to locate the Program Files, which are not always
located at C:\Program Files

I tried:
Set WSHShell = CreateObject("WScript.Shell")
sPath = WSHShell.SpecialFolders("Program Files")

both with and without the space, but it only turned up
an empty string.

sPath = WSHShell.SpecialFolders("Programs")
returns : \Start Menu\Programs


Any clues?
Also, where can I find the object model for this?
 
D

Dave Peterson

This worked ok for me in WinXP (not sure it works in all versions of windows).

Option Explicit
Sub testme01()
MsgBox Environ("programfiles")
End Sub

But I searched *scripting* newsgroups and found something that was close to
this:

Option Explicit
Sub testme02()

Dim sPath As String
Dim WSHShell As Object
Set WSHShell = CreateObject("WScript.Shell")

sPath = WSHShell.environment("Process")("ProgramFiles")

If sPath = "" Then
sPath = WSHShell.RegRead _
("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir")
End If

MsgBox sPath

End Sub

It looks like it tries to use the environment variable. If it doesn't find it,
it goes and reads the registry.
 
J

Jim Cone

Absolutely essential download...
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp
Microsoft Windows Script Downloads

Jim Cone
San Francisco, USA


I am able to locate a users desktop with the following code:

Set WSHShell = CreateObject("WScript.Shell")
sPath = WSHShell.specialfolders("Desktop")
I need something similar to locate the Program Files, which are not always
located at C:\Program Files
I tried:
Set WSHShell = CreateObject("WScript.Shell")
sPath = WSHShell.SpecialFolders("Program Files")
both with and without the space, but it only turned up
an empty string.
sPath = WSHShell.SpecialFolders("Programs")
returns : \Start Menu\Programs

Any clues?
Also, where can I find the object model for this?
 
H

Harald Staff

Dave Peterson said:
This worked ok for me in WinXP (not sure it works in all versions of windows).

Option Explicit
Sub testme01()
MsgBox Environ("programfiles")
End Sub

"Environ" is very limited in the Windows 9x family (95, 98, ME), but works
fine in the NT family (NT, 2000, XP). If this is a problem, Randy Birch has
code for this (and almost everything else) at
http://vbnet.mvps.org/code/browse/csidl.htm
it is VB6, so the Form parts has to be adjusted

Best wishes Harald
 
D

Dave Peterson

Do you know if this would work in the 9x series?

If sPath = "" Then
sPath = WSHShell.RegRead _
("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir")
End If

Thanks,
 
P

Peter T

Hi Dave,
Do you know if this would work in the 9x series?

If sPath = "" Then
sPath = WSHShell.RegRead _
("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir")
End If

Yes, that worked for me in W98SE when I ran your testme02 as posted earlier.

sPath = WSHShell.environment("Process")("ProgramFiles")
and
MsgBox Environ("programfiles")
both returned empty strings but without error.

FWIW, I notice that besides "ProgramFilesDir" I also have
"ProgramFilesPath", adjacent in the registry. Both show same path, as I
would expect but wonder why the two keys.

Regards,
Peter T
 
D

Dave Peterson

I use winXP.

For me,
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
contained a value of: C:\program files

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesPath
contained a value of: %ProgramFiles%

which looks a lot like a way to refer to an environment variable.

Like using Windows start button|run
and typing:
%temp%
to get to the user's temp folder
%programfiles%
took me to my c:\program files folder.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top