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