Seite 1 von 1
32/64Bit Infos auslesen
Verfasst: 22.03.2007 11:45
von funk.munich
Hallo zusammen,
wie kann ich feststellen, ob das Betriebssystem ein 32 oder 64 Bit System ist? Dies benötige ich, um zu wissen welchen Registry Pfad ich nehmen muss. Unter XP 64Bit werden die meisten Infos ja unter "WOW6432Node" geschrieben.
Danke + Gruß,
Daniel
Verfasst: 22.03.2007 14:22
von jpd
Hi funk.munich,
bei meine x64 Vista gibt die abfrage
Code: Alles auswählen
MessageRequester("OS?", "Number of OSVersion()=" +Str(OSVersion()))
ein ergebnis = 100
leider habe ich keine Vista 32 um diese abfrage zu machen,
kann sein das du vieleicht eine hast?
dann haben wir diese werte..
Ciao
jpd
Verfasst: 22.03.2007 14:33
von Kaeru Gaman
@funk
du hast XP64?
läuft das gut mit PB?
Verfasst: 22.03.2007 15:00
von Rings
siehe
http://www.purebasic.fr/english/viewtopic.php?t=17579
iss schon ne zeitlang her zeit ich xp64 einsetze.....
Verfasst: 23.03.2007 10:24
von funk.munich
Hi jpd, H Rings,
danke für die Code Beispiele. Werde ich ausprobieren.
Hm .. ja generell zu 64 Bit.
Wenn Du eine 32 Bit applikation nutzt und z.B. in der Registry Einträge unter SOFTWARE durchscannen willst leitet Dich Microsoft in den Ordner
"HKLM\Software\Wow6432Node\*". Dort werden alle 32 Bit Programme
hingeleitet.
Jedoch müsste ich meistens auf den Standard Pfad "HKLM\Software\*" zugreifen. Das funktioniert aber nur mit 64 bit programmen.
Das gleiche ist im filesystem:
32 -> C:\Program Files
64 -> C:\Program Files (x86)
32 -> C:\WINDOWS\SysWOW64\system32
64 -> C:\WINDOWS\system32
Um dies z.B. zu umgehen würde es reichen, wenn Du ein 64bit programm
hast, dass einfach irgendeine andere datei (32 bit) aufrufen kann.
Dadurch notiert sich MS das dies alles ein 64bit programm ausführt
und somit könnte man auf die Standard Pfade zugreifen.
Das ist natürlich nicht so dolle. Ich habe es aber mit einen kleinen compilierten 64 bit c++ programm mal ausprobiert und es funxt.
Genial wäre natürlich, wenn man mit PB 64 bit kompilieren könnte.
Gruß,
Daniel
Verfasst: 26.03.2007 13:35
von jpd
Hallo funk.munich,
ich habe gemerkt das egal ob vista 32 oder 64 die abfrage OSVersion() immer 100 als return code zurueck gibt.
dadurch nicht wirklich brauchbar.
hier eine variante die durch abfragen der Registry
die gewünschte informationen liefert.
also bei vista home
wird
Windows Vista (TM) Home Basic
liefern
und bei x64 systeme
wird
Windows (TM) Vista Ultimate
64 bit
liefern.
funk.munich hat geschrieben:Jedoch müsste ich meistens auf den Standard Pfad "HKLM\Software\*" zugreifen. Das funktioniert aber nur mit 64 bit programmen.
lesende zugriffe mit 32 bit anwendungen sind aber möglich!
Code: Alles auswählen
Procedure.s GetOS_info(Value.s)
sTopKey.l = #HKEY_LOCAL_MACHINE
sKeyName.s = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
GetHandle = RegOpenKeyEx_(stopKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
lpData.s=Space(1024)
lpcbData=1024
If GetHandle = #ERROR_SUCCESS
lType=#REG_SZ
GetHandle = RegQueryValueEx_(hKey,Value, 0, @lType, @lpData, @lpcbData)
If Gethandle=0 And lpcbData>2
RegCloseKey_(hkey)
ProcedureReturn Left(lpdata,lpcbData-1)
EndIf
Else
sKeyName.s = "SOFTWARE\Microsoft\Windows\CurrentVersion"
GetHandle = RegOpenKeyEx_(stopKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
lType=#REG_SZ
GetHandle = RegQueryValueEx_(hKey,Value, 0, @lType, @lpData, @lpcbData)
If Gethandle=0 And lpcbData>2
RegCloseKey_(hkey)
ProcedureReturn Left(lpdata,lpcbData-1)
EndIf
EndIf
EndIf
EndProcedure
INFO.s= GetOS_info("ProductName")
toview.s=toview+#LF$ +info
BuildLabEx.s=GetOS_info("BuildLabEx")
If FindString(BuildLabEx,"amd64fre",1)
toview=toview+#LF$ +"64 bit"
EndIf
MessageRequester("OS?", toview)
Grüsse
jpd