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
32/64Bit Infos auslesen
Hi funk.munich,
bei meine x64 Vista gibt die abfrage
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
bei meine x64 Vista gibt die abfrage
Code: Alles auswählen
MessageRequester("OS?", "Number of OSVersion()=" +Str(OSVersion()))
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
PB 5.10 Windows 7 x64
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
siehe http://www.purebasic.fr/english/viewtopic.php?t=17579
iss schon ne zeitlang her zeit ich xp64 einsetze.....
iss schon ne zeitlang her zeit ich xp64 einsetze.....
Rings hat geschrieben:ziert sich nich beim zitieren
-
- Beiträge: 123
- Registriert: 27.03.2006 09:45
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
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
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.
Grüsse
jpd
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.
lesende zugriffe mit 32 bit anwendungen sind aber möglich!funk.munich hat geschrieben:Jedoch müsste ich meistens auf den Standard Pfad "HKLM\Software\*" zugreifen. Das funktioniert aber nur mit 64 bit programmen.
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)
jpd
PB 5.10 Windows 7 x64