Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Feststellen, welches Betriebssystem läuft (D2010 /Win7) (https://www.delphipraxis.net/151431-feststellen-welches-betriebssystem-laeuft-d2010-win7.html)

Kurt56 17. Mai 2010 21:31


Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Feststellen, welches Betriebssystem läuft funktionierte unter D7 mit:

Delphi-Quellcode:
function TInfoForm.GetWindowsVersion : string;
var myOsVersion : _OSVERSIONINFO;
begin
myOsVersion.dwOSVersionInfoSize := 148;
GetVersionExA(myOsVersion);                 //<Fehlermeldung unter D2010 unter Windows 7
case myOsVersion.dwPlatformId of
  1:begin
    if (myOsVersion.dwMajorVersion =4 ) and
       (myOsVersion.dwMinorVersion = 0) then
         Result := 'Windows 95';
    if (myOsVersion.dwMajorVersion =4 ) and
       (myOsVersion.dwMinorVersion = 10) then
         Result := 'Windows 98';
    end;
  2:begin
    if (myOsVersion.dwMajorVersion =3 ) then
         Result := 'Windows NT 3.51';
    if (myOsVersion.dwMajorVersion =4 ) then
         Result := 'Windows NT 4';
    if (myOsVersion.dwMajorVersion =5 ) and
       (myOsVersion.dwMinorVersion = 0) then
         Result := 'Windows 2000';
    if (myOsVersion.dwMajorVersion =5 ) and
       (myOsVersion.dwMinorVersion = 1) then
         Result := 'Windows XP';
    end;
  else
    Result := 'unbekannt';
  end;
end;
[DCC Fehler] Info1.pas(53): E2250 Es gibt keine überladene Version von 'GetVersionExA', die man mit diesen Argumenten aufrufen kann

Kann jemand sagen, wie die OS-Version unter D2010 abgerufen werden kann?

Matze 17. Mai 2010 21:42

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Hallo Kurt,

vielleicht hilft dir das weiter: [Kompo] TWindowsVersionsInfo - Kompo zur Windowserkennung

generic 17. Mai 2010 21:54

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
GetVersionExA wenn du die W Variante nimmst, solltest du mehr erfolgt haben.

GetVersionExW

rawi 17. Mai 2010 22:06

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Du solltest auch die Zeile

Zitat:

myOsVersion.dwOSVersionInfoSize := 148;
in
Delphi-Quellcode:
  myOsVersion.dwOSVersionInfoSize := SizeOf(myOsVersion);
ändern.

gruß rawi

Kurt56 18. Mai 2010 06:40

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Herzlichen Dank.

Es funktioniert.

Nun habe ich noch eingebaut:

Delphi-Quellcode:
    if (myOsVersion.dwMajorVersion =6 ) and
       (myOsVersion.dwMinorVersion = 1) then
         Result := 'Windows 7';
und er zeigt mir auch meine Betriebssystemversion.
Danke sehr

Bernhard Geyer 18. Mai 2010 06:41

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Und wieso wird nicht eine der zig fertigen Funktionen aus der JCL, ElPack, ... verwendet und schon wieder die tausendste eigene Implementierung gemacht?

himitsu 18. Mai 2010 07:04

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

Zitat von Bernhard Geyer
Und wieso wird nicht eine der zig fertigen Funktionen aus der JCL, ElPack, ... verwendet und schon wieder die tausendste eigene Implementierung gemacht?

PS: bei was fertigen bräuchtest du nur ab und zu ein Update einspielen und brauchst dann nicht selber ständig alle neuen Versionen aufzunehmen.

PS: Gibt es eigentlich eine Komponente, welche sich notfalls eine Liste aus dem Internet zieht?
(ich finde es immer witzig, wenn ein Programm neuere Windowse einfach nicht kennt oder gar was vollkommen falsches anzeigt ... mein Vista wurde von einem Programm auch schonmal für Win98 gehalten)

Kurt56 18. Mai 2010 10:19

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

Zitat von Bernhard Geyer
Und wieso wird nicht eine der zig fertigen Funktionen aus der JCL, ElPack, ... verwendet und schon wieder die tausendste eigene Implementierung gemacht?

Vielleicht, weil ICH die nich kenne :?:

Wo findet man denn diese Funktionen?

himitsu 18. Mai 2010 10:31

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Eine wurde doch oben schon genannt?

PS: Nochmal zu deinem Code:
Zitat:

OSVERSIONINFO (dynamisch) + GetVersionExA (ANSI)
Sowas macht man auch nicht :warn:

GetVersionEx + OSVERSIONINFO
GetVersionExA + OSVERSIONINFOA
GetVersionExW + OSVERSIONINFOW

Du nimmst explizit die Ansi-Verison von GetVersionEx, aber willst diese mit der dynamisch Version des Records OSVERSIONINFO kombinieren, welche ab Delphi 2009 doch auf Unicode (OSVERSIONINFOW) weitergeleitet wird.

Zitat:

Es gibt keine überladene Version von 'GetVersionExA', die man mit diesen Argumenten aufrufen kann
Bei sowas schaut man nach, was diese Funktion für Argumente/Parameter haben will und dann wäre einem der Fehler auch selber aufgefallen. :zwinker:


Was willst du eigentlich genau erreichen, bzw. wozu benötigst du denn diese Information?

Kurt56 18. Mai 2010 12:57

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Nun schimpfe nicht gleich, ich bin kein Superspezialist, sondern schreibe für uns die Zusatzprogramme
die mir helfen sollen, bei meinem Job.

Die Auftragsbearbeitung, Fakturierung, Lagerverwaltung,
das Bestellwesen, die Auswertungen aus Finanzbuchhaltung und Kostenrechnung
und die Bilanzierung.

Nun ist die Programmierung für mich doch spannender, als das Bilanzmodernisierungsgesetz (BilMoG),
aber ich bin kein Systemspezialist, weshalb mir dann solche Fehler nicht auffallen.

Ich benötige die Abfrage, weil die Erfassungsrechner Touchscreen unter Win7 laufen (sollen)
während die "alten" Rechner eben die normale Tastatur haben.
Also muß ich mich durch die TouchScreen-Sache beißen.

Also werde nicht böse, ich lerne noch.

PS: Die o.g. Programme habe ich schon vor Jahren (unter Delphi 7) erstellt und die laufen auch.
Aber es kommen eben auch immer neue Wünsche und Verbesserungen.
Außerdem lernt man ja auch dazu, so daß ich im Laufe der Zeit das eine oder andere geändert und erweitert habe.
Ich habe das alles einmal selber geschrieben, es funktioniert sogar. :roll:

hoika 18. Mai 2010 13:01

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Hallo,

Also muß ich mich durch die TouchScreen-Sache beißen.

Touchscreen = Maus

Naja, fast 100% ;)


Heiko

mkinzler 18. Mai 2010 13:02

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Nicht bei W7

Kurt56 18. Mai 2010 13:05

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Echt????
OK, aber das Tool "TTouchKeyboard" kann ich vergessen,
wenn es ein Rechner mit Win2000 (ohne Touchscreen) ist :lol:

Dafür die Betriebssystemabfrage. (Und der Umstieg von D7 auf D2010)

himitsu 18. Mai 2010 14:09

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

Zitat von Kurt56
Nun schimpfe nicht gleich, ich bin kein Superspezialist,

Keine Sorge ... hier ist ja wohl der-/diejenige böse, welche(r) diesen Code verbrochen hat.

Aber wäre es da nicht besser abzufragen, ob ein TouchScreen vorhanden ist?
Es kann ja mal sein, daß ein Win7-Rechner ohne einen TS läuft
und dagegen könnte auch ein Win2000-Rechner einen TS haben.

mkinzler 18. Mai 2010 14:21

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

und dagegen könnte auch ein Win2000-Rechner einen TS haben.
Dieser dann aber per "Maus" bedient wird.
Die "neue" Touch-Steuerung funktioniert erst ab W7

himitsu 18. Mai 2010 14:25

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Dafür würde früher vom TouchScreen über einen Treiber die Maus gesteuert, also kommt das fast auf's Selbe raus ... zumindestens beim 1-Finger-Tippen :lol:

mkinzler 18. Mai 2010 14:27

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Die neue Windows 7 Touchscreen API, welche auch von Delphi ab D2010 unterstützt wird, ist aber viel mächtiger!

Bernhard Geyer 19. Mai 2010 07:10

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

Zitat von Kurt56
Vielleicht, weil ICH die nich kenne :?:

Wo findet man denn diese Funktionen?

JCL bei Sourceforge.

generic 31. Mai 2010 13:17

Re: Feststellen, welches Betriebssystem läuft (D2010 /Win7)
 
Zitat:

Zitat von Kurt56
Herzlichen Dank.


Delphi-Quellcode:
    if (myOsVersion.dwMajorVersion =6 ) and
       (myOsVersion.dwMinorVersion = 1) then
         Result := 'Windows 7';
und er zeigt mir auch meine Betriebssystemversion.

Die best practices von Windows sagen, dass du nicht mehr auf die OS Version prüfen sollst, sondern auf die Features des OS.
Das heißt für dich, dass du prüfen solltest "ist touch verfügbar".

Man abgesehen davon musst du wohl deinen Code bei Windows 7 R2 oder Windows 8 dann anpassen.
Das müsstest du nicht bei Featureprüfung


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz