ProgramFiles(x86) Enumerating Special Folders

30/07/2009 - 14:03 von Tim Taylor | Report spam
Hallo Community,

ich habe folgende Frage und hoffe jmd hat evtl. eine Idee.
In WSH arbeite ich gerne mit den Enumerating Special Folders. Nun habe ich
das Problem, dass bei bei 64Bit Version die Konstante von Programmen
(Umgebungsvariable %ProgramFiles%) auf C:\Programme zeigt - ich aber eine
weitere Konstante für C:\Programme(x86) benötige. (Umgebungsvariable
%ProgramFiles(x86)%)
[Manche anwendungen laufen nur als 32Bit]
Ich habe unter
http://www.microsoft.com/technet/sc...x?mfr=true
die ganzen Werte, in einem Forum habe ich gelesen, dass für (x86) der Wert
0x30 gilt, dass passt aber nicht. Hat jmd evtl. eine Idee oder einen anderen
Lösungsatz ?

Vielen Dank für eure Unterstützung.
Tim
 

Lesen sie die antworten

#1 Alexander Mueller
03/08/2009 - 23:24 | Warnen spam
Tim Taylor schrieb:

Hallo Tim!

ich habe folgende Frage und hoffe jmd hat evtl. eine Idee.
In WSH arbeite ich gerne mit den Enumerating Special Folders. Nun habe ich
das Problem, dass bei bei 64Bit Version die Konstante von Programmen
(Umgebungsvariable %ProgramFiles%) auf C:\Programme zeigt - ich aber eine
weitere Konstante für C:\Programme(x86) benötige. (Umgebungsvariable
%ProgramFiles(x86)%)
[Manche anwendungen laufen nur als 32Bit]
Ich habe unter
http://www.microsoft.com/technet/sc...x?mfr=true
die ganzen Werte, in einem Forum habe ich gelesen, dass für (x86) der Wert
0x30 gilt, dass passt aber nicht. Hat jmd evtl. eine Idee oder einen anderen
Lösungsatz ?



Diese Konstanten werden tief in den Abgründen von C++-Headern
des Windows-SDK definiert.
Die Shell-SpecialFolder-Konstanten sind in ShlObj.h definiert
und starten alle mit dem Pràfix "CSIDL_".

Die Konstante CSIDL_PROGRAM_FILESX86 hat im SDK den Wert 0x002a
also dezimal 42. 0x0030 verweist auf CSIDL_ADMINTOOLS, das ist ihmo der
Eintrag "Verwaltung" im Startmenü.

Der Pfad sollte also so abgerufen werden können:

Set sh = CreateObject("Shell.Application")
path = ""
on error resume next
path = sh.NameSpace(&H2a).Self.path
if len(path) > 0 then
wsh.echo "ProgramFilesx86 =>", path
else
wsh.echo "ProgramFilesx86 nicht gefunden"
end if

Generell kannst Du die Zuordnung von Shell-SpecialFolder-Konstanten zu
den jeweiligen Pfaden auf Deinem System relativ einfach mit Trial&Error
prüfen:

'Mit CSCRIPT.EXE ausführen!!
Set sh = CreateObject("Shell.Application")
for i=0 to 200
path = ""
on error resume next
set f = sh.NameSpace(i)
path = f.self.path
if len(path) > 0 then
wsh.echo "0x" & Hex(i), "(" & i & ")", "=>", path
end if
next
WSH.Stdin.Readline


MfG,
Alex

Ähnliche fragen