Autor Beitrag
Hochhaus
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: So 22.12.13 19:02 
Hallo allerseits !

kann mir jemand sagen, wie man das Betriebssystem mit einem kurzen Delphi-Programm ermittelt. Es sollte für alle Windows-Versionen ab Win95 funktionieren. (95, NT, 98, 2000, ME, XP, Vista, 7 und 8 / 8.1)

Gibt es solchen Code evtl. hier irgendwo im Forum ?


Vielen Dank für jede Hilfe !

Hochhaus


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 23.12.2013 um 00:19
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: So 22.12.13 19:08 

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein

Für diesen Beitrag haben gedankt: Hochhaus
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 22.12.13 19:17 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
kann mir jemand sagen, wie man das Betriebssystem mit einem kurzen Delphi-Programm ermittelt. Es sollte für alle Windows-Versionen ab Win95 funktionieren. (95, NT, 98, 2000, ME, XP, Vista, 7 und 8 / 8.1)

Gibt es solchen Code evtl. hier irgendwo im Forum ?


Auch die Delphipraxis ist voller Diskussionen und Quelltexte zu dieser Thematik. Einfach mal die Mühe des Suchens machen (die meiste Arbeit dabei übernimmt dabei ohnehin der "Mikrochip aus Taiwan").

Für diesen Beitrag haben gedankt: Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.12.13 20:34 
Schau hier, das ist aktueller, enthält aber leider auch Fehler...:
www.delphi-treff.de/...s-version-ermitteln/

Hier kann man sich sein Testprogramm selber zusammen basteln:
delphidabbler.com/ar...rticle=23&part=2

Für den Code:
creativecommons.org/licenses/by-nc-sa/2.5/
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von hathor am So 22.12.13 21:44, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: Hochhaus
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 22.12.13 21:36 
Wäre noch zu detaillieren, welche Bitanzahl das Betriebsprogramm hat. Auch dafür gibt es verschiedene Möglichkeiten, so über die Bitanzahl eines Pointers oder diese Funktion:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function IsWOW64(MyHandle:THandle):Boolean;
var IsWow64Result:pBOOL;
Is_Wow64Process:function(Handle:THandle;var Res:pBOOL):BOOL;stdcall;
begin
Is_Wow64Process:=GetProcAddress(GetModuleHandle('kernel32'),'IsWow64Process');
if Assigned(Is_Wow64Process) then
  begin
  Is_Wow64Process(MyHandle,IsWow64Result);
   Result:=Boolean(IsWow64Result)
   end
else Result:=False
end;


Edit: Das ist falsch, die o.g. Funktion dient dazu, festzustellen, ob unter Windows 64 Bit ein Prozeß 32 oder 64 Bit hat. Nimmt man aber einen "Systemprozeß", so kann man damit natürlich doch die Bitanzahl des Betriebsprogrammes feststellen. Sie arbeitet auch unter 32 Bit.

Für diesen Beitrag haben gedankt: Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.12.13 22:41 
Abfrage des Betriebssystems mit WMI:

Ausgabe - Beispiele:
Microsoft Windows 8.1 - 6.3.9600
Microsoft Windows 8 - 6.2.9200
Microsoft Windows 7 Ultimate - 6.1.7601


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
Procedure MM(s: String);
begin
 Form1.Memo1.lines.add(s);
end;

//uses  ActiveX, Comobj,
function GetWin32_OSNameVersion : string;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  try
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
    colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
    oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
    if oEnum.Next(1, colItem, iValue) = 0 then
      result := Format('%s - %s',[colItem.Caption, colItem.Version]);
  except
    result := '?'
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MM(GetWin32_OSNameVersion);
end;

Für diesen Beitrag haben gedankt: Hochhaus
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 23.12.13 04:39 
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Mo 23.12.13 07:52 
user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
:arrow: [url=www.delphipraxis.net...owsVersionInfo[/url]


Da muss man sich aber anmelden. Was kostet dort die Benützung der Delphi-Praxis-Seite ? Da es viele versteckte Kostenfallen gibt im Internet, stelle ich diese "dumme" Frage.


Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.12.13 07:58 
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Da muss man sich aber anmelden. Was kostet dort die Benützung der Delphi-Praxis-Seite ? Da es viele versteckte Kostenfallen gibt im Internet, stelle ich diese "dumme" Frage.
Entwickler-Ecke, Delphipraxis und Delphi-Treff veranstalten z.B. gemeinsam die Delphi-Tage und viele sind in zwei oder drei der Foren parallel angemeldet, so auch ich. Kosten gibt es dort genauso wenig wie hier. ;-)

Für diesen Beitrag haben gedankt: Hochhaus
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mo 23.12.13 09:42 
Meine Äußerungen zur Bitanzahl des Betriebsprogrammes gestern abend waren wohl doch nicht so ganz richtig.

Die Größe des Pointers kann vermutlich nur innerhalb des jeweiligen Programmes bestimmt werden. Klar, daß ein 64-Bit-Programm nur unter einem 64-Bit-Betriebsprogramm läuft (laufen kann) und mithin mit seinem größeren Pointer die 64 Bit anzeigt. Diese Methode scheitert jedoch, wenn man ein 32-Bit-Programm unter einem 64-Bit-Betriebsprogramm startet. Das kann auf diese Weise wohl auch in der 64-Bit-Umgebung nur 32 Bit erkennen, weil ihm nur eine 32-Bit-Umgebung bereitgestellt ("vorgetäuscht") wird, das sog. 32-Bit-Subsystem.

Soeben unter Windows 7 64 Bit ausprobiert: Mein Programm "Prozesse" kann unter Windows 64 Bit sowohl als 32- als auch als 64-Bit-Compilat zwischen 32- und 64-Bit-Prozessen unterscheiden, dazu benutzte ich die oben schon gezeigte Funktion.

Edit: Und noch eine Korrektur: IsWow64Process bestimmt nur, ob ein 32-Bit-Prozeß im 32-Bit-Subsystem läuft. Kann man also auf das eigene Programm anwenden und so die Bitanzahl des Betriebsprogrammes ermitteln, sofern es ein 32-Bit-Compilat ist. Aber das weiß man ja zum Glück vorher, wieviel Bit das eigene Compilat hat.

Wenn man sich nur Monate mit einer Sache nicht beschäftigt, ist schon wieder die Hälfte davon vergessen.

Edit 2: Da die Betriebsprogrammabfrage ja möglichst universell sein soll(te), ist ein 32-Bit-Compilat die erste Wahl und damit die genannte Funktion, auf das eigene Programm angewandt, verwendbar.

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Do 26.12.13 10:01 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
Abfrage des Betriebssystems mit WMI:



ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
Procedure MM(s: String);
begin
 Form1.Memo1.lines.add(s);
end;

//uses  ActiveX, Comobj,
function GetWin32_OSNameVersion : string;
var
  objWMIService : OLEVariant;
  colItems      : OLEVariant;
  colItem       : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;

  function GetWMIObject(const objectName: String): IDispatch;
  var
    chEaten: Integer;
    BindCtx: IBindCtx;
    Moniker: IMoniker;
  begin
    OleCheck(CreateBindCtx(0, bindCtx));
    OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
    OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
  end;

begin
  try
    objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
    colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
    oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
    if oEnum.Next(1, colItem, iValue) = 0 then
      result := Format('%s - %s',[colItem.Caption, colItem.Version]);
  except
    result := '?'
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MM(GetWin32_OSNameVersion);
end;





Hinter Windows Vista kommt ein kleines, schwarzes Rechteck. Was hat das zu bedeuten ? Wieso erscheint nicht, ob es sich um die 32-bit oder 64-bit Variante handelt ? { Bin ich zu anspruchsvoll ? )


Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.12.13 12:09 
Man kann abfragen, ob z.B. ein bestimmter Ordner (SysWOW64) vorhanden ist oder eine bestimmte Funktion.
msdn.microsoft.com/e...05%28v=vs.85%29.aspx

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Function GetSystemWow64Directory(lpBuffer:LPTSTR;uSize:Uint):uint; stdcall
external 'Kernel32.dll' name 'GetSystemWow64DirectoryW';

Function IsSysWOW64:Boolean;
var Buffer:Array[0..max_path] of Char;
begin
Result:=false;
If GetSystemWow64Directory(Buffer,max_path)<>0 Then result:=true;
end;

// Use: CheckBox2.checked:=   IsSysWOW64;

-----------
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function Is64BitOS: Boolean;
type
  TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;
var
  hKernel32 : Integer;
  IsWow64Process : TIsWow64Process;
  IsWow64 : BOOL;
begin
  Result := False;
  hKernel32 := LoadLibrary('kernel32.dll');
  if hKernel32 = 0 then RaiseLastOSError;
  try
    @IsWow64Process := GetProcAddress(hkernel32, 'IsWow64Process');
    if Assigned(IsWow64Process) then begin
      if (IsWow64Process(GetCurrentProcess, IsWow64)) then begin
        Result := IsWow64;
      end
      else RaiseLastOSError;
    end;
  finally
    FreeLibrary(hKernel32);
  end;
end;

// Use: CheckBox1.checked:=    Is64BitOS;


Zuletzt bearbeitet von hathor am Fr 27.12.13 16:16, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Do 26.12.13 13:08 
Danke !! Es bleibt die Frage, wieso hinter Windows Vista ein kleines, schwarzes Quadrat erscheint. Funktioniert Dein Quellcode auch bei XP und 2000 etc. ?

Hochhaus
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 26.12.13 13:16 
Welches Zeichen ist das denn? Vielleicht 10 oder 13? Versuch doch mal ein Trim.

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Do 26.12.13 13:31 
Keine Ahnung, welches ANSI-Zeichen das ist. Ich müsste den String zerlegen und prüfen . Heute komme ich aber nicht mehr dazu.

Danke !

Hochhaus
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.12.13 14:06 
Minimum supported client: Windows XP [desktop apps only]
msdn.microsoft.com/e...05%28v=vs.85%29.aspx

Für WINDOWS-bezogene Fragen findet man leicht Antworten:

Googeln nach "msdn funktionswort"


Zuletzt bearbeitet von hathor am Fr 27.12.13 18:13, insgesamt 1-mal bearbeitet
Fuchs HP
Hält's aus hier
Beiträge: 1
Erhaltene Danke: 1

Win 7 Professional
Delphi XE2
BeitragVerfasst: Fr 27.12.13 15:07 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:


Ich habe nicht den Eindruck, dass Du Programme entwickeln kannst!
Lebst Du eigentlich in einer Diktatur, wo der Gebrauch von GOOGLE verboten ist?


Hi

bin neu hier ! Aber wie mir scheint, ist der Umgangston ziemlich rüde. Sowas schreibt man doch nicht, auch dann nicht, wenn es stimmen sollte ! Wer kennt schon einen Mitmenschen ganz genau ?

Fuchs Hanspeter

Für diesen Beitrag haben gedankt: Hochhaus
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 27.12.13 15:32 
Ist zwar OT, aber:

Hallo user profile iconFuchs HP,
erstmal Willkommen in der EE.

Der erste Satz ist tatsächlich etwas hart. Anfänger benötigen Lernzeit. Allerdings ist user profile iconHochhaus laut Profil Physiker und 1960 geboren. Da darf man schon etwas mehr erwarten.

Der zweite Satz ist vermutlich aus Frust entstanden, da es User gibt, die schlicht zu faul sind, mal selbst zu googeln und lieber einfach hier fragen. Da das häufiger vorkommt, sind die helfenden User manchmal einfach nur noch genervt. Und dann entstehen solche Frust-Kommentare.

Schreibt man aber nichts, ändern sich solche User nicht.

Wer Einsatz zur Eigen-Kompetenz und -Initiative zeigt, wird auch so freundlich behandelt, wie du es dir vorstellst.

Für diesen Beitrag haben gedankt: Hochhaus
Hochhaus Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: Fr 27.12.13 15:53 
Hallo,

nun möchte ich mich auch dazu äussern: Ich habe durchaus mehrere Projekte geschafft, auch wenn ich manchmal mehr gefragt habe, als unbedingt nötig gewesen wäre. Mit der Programmiersprache selbst habe ich weniger Probleme - eher mit den Windows API - Funktionen (Ich kann weder C noch C++ etc.). Und da helfen mir die Dokumentationen von Microsoft nicht gerade sehr viel weiter. Und auch mit Graphik-Ausgaben kenne ich mich nicht gut aus. Das Quadratwurzelprogramm, das ich einmal geschrieben hatte, benötigt nur Rechenbefehle.

Alles in allem kurz gesagt: Wenn es um reinen Rechencode geht, weiss ich meistens eine Lösung. Systemnahe Programmierung hingegen beherrsche ich nicht - das ist so.


Hochhaus
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 27.12.13 16:23 
user profile iconhathor hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconHochhaus hat folgendes geschrieben Zum zitierten Posting springen:
Funktioniert Dein Quellcode auch bei XP und 2000 etc. ?

Hochhaus


Wieso willst Du das wissen?
Ich habe nicht den Eindruck, dass Du Programme entwickeln kannst!

Minimum supported client: Windows XP [desktop apps only]
msdn.microsoft.com/e...05%28v=vs.85%29.aspx


Ausgerechnet Winzigweich - die Höhle des Löwen - als Quelle heranzzuziehen, sollte man ganz vorsichtig sein, von den übrigen Pöbeleien des teilzitierten Beitrages mal ganz abgesehen.

Winzigweich setzt nämlich seit Jahr und Tag dreisterweise die "Minum-supported-...-"-Einträge schleichend einfach so herauf. Und da die das besser wissen, ist das nichts anderes als eine Lüge, aber mit der Ehrlichkeit war diese "Softwareschmiede" noch nie liiert.

Ich fand mal eine chinesische Seite - ich finde sie just leider nicht wieder - in der die Minimum-Anforderungen noch korrekt dargelegt waren, sie war offensichtlich rechtzeitig von den MSDN-Seiten dort hinüber kopiert ("gespiegelt") worden.

Die meisten Funktionen gehen nämlich auf die 9x-, 3x- oder gar noch frühere Windows-Zeiten zurück, manche sogar unverändert (abgesehen von der Bitanzahl-Anpassung).

Bei einer 64-Bit-relevanten Funktion mag die Minimum-Angabe aber tatsächlich stimmen, denn Windows XP 64 Bit war das erste 64-Bit-Windows, das man halbwegs ernstnehmen konnte (halbwegs, weil die folgenden 64-Bit-Varianten immer besser wurden, und davor, das Windows 2000 mit 64 Bit, falls es das wirklich einmal gegeben haben soll, wirklich nur eine Experimentalversion war).