Aktuelle Zeit: 09.07.2020 10:04

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Betriebssystem ermitteln
BeitragVerfasst: 13.03.2009 13:39 
Offline

Registriert: 13.03.2009 13:24
Hallo Leute!

Ich bin auf der Suche nach Routine, mit der man nicht nur grob das verwendete Betriebssystem (über osversion() ist das kein problem) feststellen kann, sondern auch welche (Windows-)version (bei XP z.B. MCE) und welche Servicepacks installiert sind. Außerdem wäre noch wichtig, ob es 32- oder 64-Bit Windows ist.

Suche schon länger danach, konnte aber noch nix finden. Danke schonmal für Eure Mühe. Ach ja, bin Anfänger. Wenn jemand nen Quelltext postet, bitte mit Kommentare dazu, damit ich es nachvollziehen kann.

Gruß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 14:52 
Offline

Registriert: 10.11.2004 03:22
Willkommen an Board! :D

nur mal Angemerkt:
OSVersion() dient nicht zur Unterscheidung von LINUX, MacOS und Windows,
ich weiß nicht, warum sich diese Anti-Information so hartnäckig hält und oft wiederholt wird.
LINUX und MacOS sind schließlich keine Versionen von Windows!
Es sind völlig andere Betriebssysteme, auf denen Windows-Executables noch nicht einmal laufen.
deswegen würde es auch nicht den geringsten Sinn ergeben, eine Funktion zu haben,
die zur Laufzeit ermitteln kann, ob das Programm auf Linux oder Windows läuft,
weil das Programm das schon alleine daran "unterscheiden" könnte, ob es überhaupt startet oder nicht.

OSVersion() dient einzig und allein zur Unterscheidung der verschiedenen Windows Versionen,
wie man aus der Hilfe unschwer herauslesen kann, können die Rückgabewerte folgendes sein:
#PB_OS_Windows_NT3_51
#PB_OS_Windows_95
#PB_OS_Windows_NT_4
#PB_OS_Windows_98
#PB_OS_Windows_ME
#PB_OS_Windows_2000
#PB_OS_Windows_XP
#PB_OS_Windows_Server_2003
#PB_OS_Windows_Vista
#PB_OS_Windows_Server_2008

ich sehe hier kein LINUX und kein Mac....

................

zu ServicePack und Edition werden dir vielleicht später unsere API-Profis was sagen können,
wenn es dafür Routinen gibt, dann sind die von Microsoft selber.

aber bei so spezifischen Abfragen wird dir vielleicht die MSDN besser weiterhelfen können.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 15:31 
Offline

Registriert: 13.03.2009 13:24
Hallo und danke für die schnelle Antwort. Es scheint also nicht so einfach zu sein. Daß ein Windowsprogramm nicht auf nem Mac oder auf Linux (ohne Emulator) läuft, weiß ich. Vielleicht habe ich mich da falsch ausgedrückt. Ich hatte gehofft, daß man einfach ein paar Systemvariablen abfragen kann, um raus zu kriegen, welches Windows genau gerade läuft. Nur das mit osversion() ist nicht genau genug. Ich brauche das, weil ich nach der Abfrage der Windowsversion automatisch einen Treiber (den richtigen für das verwendete Betriebssystem) installieren lassen will. Deshalb auch die Frage, wie man feststellen kann, ob es 32- oder 64-Bit Windows ist. Vielleicht hat ja jemand so eine Routine schonmal fertig geschrieben.

Gruß


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 15:51 
Offline

Registriert: 10.11.2004 03:22
> Deshalb auch die Frage, wie man feststellen kann, ob es 32- oder 64-Bit Windows ist.

das ist eigentlich ziemlich einfach
Code:
size = SizeOf(Integer)
If size = 4
  Debug "32bit System"
ElseIf size = 8
  Debug "64bit System"
Else
  Debug "this line should never debug"
EndIf


was das "Betriebssystem" betrifft, ok, da haben wir wohl aneinander vorbei geredet.
Unterschiedliche Betriebssysteme sind z.b. Linux und Windows.
Windows2000 und WindowsXP sind unterschiedliche Versionen.
XP-Home, XP-Pro und XP-MDE sind unterschiedliche Editionen oder Ausgaben.
zum Unterschied 32bit / 64bit ist mir die offizielle Bezeichnung nicht momentan,
da wird zwar auch oft "Version" gesagt, aber der Begriff ist irreführend,
da gibt es auch eine offizelle genau passende Bezeichnung.


wie gesagt, so etwas wirst du grundsätzlich auf der MSDN finden,
wenn MicroSoft so etwas zur Verfügung stellt, dann ist die Info irgendwo dort vergraben.

.... und eventuell kommt hier ja noch eine fruchtbarere Antwort als ich in der Lage war zu liefern... ;)

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 16:10 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
@ Kaeru
Das ist nicht ganz richtig. So unterscheidet man zur Laufzeit nicht, ob es sich um ein 32- oder 64-Bitsystem handelt.

Denn mit einer x86 IDE auf einem x64 OS gibt
Code:
Debug SizeOf(Integer)
immer 4 aus. Dies kann man also höchstens zur Kompilezeit ermitteln.

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 16:11 
Offline

Registriert: 10.11.2004 03:22
aha, gut.

... dann hilf mal weiter.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 16:27 
Offline
Benutzeravatar

Registriert: 01.10.2005 13:15
Gerne doch: :wink:

Code:
Procedure getProcessorArchitechture()
   If GetEnvironmentVariable("PROCESSOR_ARCHITEW6432") = "AMD64"
      ProcedureReturn 64 ; OS is 64-Bit, but program is 32-Bit
   ElseIf GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") = "AMD64"
      ProcedureReturn 64 ; OS and program are both 64-Bit
   ElseIf GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") = "x86"
      ProcedureReturn 32 ; both are 32-Bit
   EndIf
   ; return 0, if failed
EndProcedure

Debug getProcessorArchitechture()
Bekomme hier immer 64, egal ob mit PBx86 oder PBx64 kompiliert - so solls ja auch sein.

Hinweis: Der erste Fall in der Prozedur kann auch so angepasst werden, dass man erkennen kann, ob ein 32-Bit Programm auf einem 64-Bit OS läuft! habs hier aber so gelassen, dass man die echte Architektur des OS zurückbekommt.

_________________
PB 4.30
Code:
Macro Happy
 ;-)
EndMacro

Happy End


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 16:56 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
hiermit kann man die OS-Version nebst Service-Pack ermitteln.

(benötigt COMate von srod)

Code:
IncludePath #PB_Compiler_Home + "srod\comate\"
XIncludeFile "comate.pbi"

Procedure.s Get_OS_Infos()
 
  Protected objWMIService.COMateObject
  Protected OS_Info.COMateObject
  Protected OS_Infos.COMateEnumObject
 
  objWMIService = COMate_GetObject("winmgmts:\\.\root\cimv2", "")
 
  If objWMIService
   
    OS_Infos = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_OperatingSystem')")
   
    If OS_Infos
   
      OS_Info = OS_Infos\GetNextObject()
     
      While OS_Info
       
        Debug "OS Name: " + OS_Info\GetStringProperty("Name")
        Debug "Version: " + OS_Info\GetStringProperty("Version")
        Debug "Service Pack: " + OS_Info\GetStringProperty("ServicePackMajorVersion") + "." + OS_Info\GetStringProperty("ServicePackMinorVersion")
       
        OS_Info\Release()
        OS_Info = OS_Infos\GetNextObject()
       
      Wend
      OS_Infos\Release()
     
    EndIf
    objWMIService\Release()
   
  Else
   
    Debug COMate_GetLastErrorDescription()
   
  EndIf
 
EndProcedure

Get_OS_Infos()


mit WMI geht noch etliches mehr (einfach mal ausprobieren).

Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 17:05 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Da hat Peter eine dem Fragesteller wichtige Option vorenthalten :wink:
Code:
Debug "OSArchitektur: " + OS_Info\GetStringProperty("OSArchitecture")

Diese Zeile noch einfügen

Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 13.03.2009 17:16 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
ts-soft hat geschrieben:
Da hat Peter eine dem Fragesteller wichtige Option vorenthalten :wink:

:lol:

ich habe Euch noch ein paar Optionen mehr vorenthalten:

Code:
BootDevice
BuildNumber
BuildType
Caption
CodeSet
CountryCode
CreationClassName
CSCreationClassName
CSDVersion
CSName
CurrentTimeZone
DataExecutionPrevention_32BitApplications
DataExecutionPrevention_Available
DataExecutionPrevention_Drivers
DataExecutionPrevention_SupportPolicy
Debug
Description
Distributed
EncryptionLevel
ForegroundApplicationBoost
FreePhysicalMemory
FreeSpaceInPagingFiles
FreeVirtualMemory
InstallDate
LargeSystemCache
LastBootUpTime
LocalDateTime
Locale
Manufacturer
MaxNumberOfProcesses
MaxProcessMemorySize
MUILanguages
Name
NumberOfLicensedUsers
NumberOfProcesses
NumberOfUsers
OperatingSystemSKU
Organization
OSArchitecture
OSLanguage
OSProductSuite
OSType
OtherTypeDescription
PAEEnabled
PlusProductID
PlusVersionNumber
Primary
ProductType
QuantumLength
QuantumType
RegisteredUser
SerialNumber
ServicePackMajorVersion
ServicePackMinorVersion
SizeStoredInPagingFiles
Status
SuiteMask
SystemDevice
SystemDirectory
SystemDrive
TotalSwapSpaceSize
TotalVirtualMemorySize
TotalVisibleMemorySize
Version
WindowsDirectory


war nur zu faul, das alles umzusetzen ;-)

deswegen auch:
Kiffi hat geschrieben:
mit WMI geht noch etliches mehr (einfach mal ausprobieren).


Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 17 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye