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 ermitteln ob 32 Bit oder 64 Bit Betriebssystem (https://www.delphipraxis.net/118485-ermitteln-ob-32-bit-oder-64-bit-betriebssystem.html)

juergen 8. Aug 2008 14:42


ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
Hallo zusammen,

ich musste gerade feststellen, dass ein bestimmtes Programm welches ich unter VISTA 64 Bit programmiert hatte und welches auch in die Registry schreibt unter Vista 32 Bit nicht richtig funktioniert.
Unter Vista 64 Bit schreibe ich in den Schlüssel -> HKEY_LOCAL_Machine\Software\Wow6432Node\...
In der Suche habe ich hier nichts gefunden, auf MSDN folgenden C#-Code-Schnipsel:
Zitat:

{
BOOL Is64BitWindows()
#if defined(_WIN64)
return TRUE; // 64-bit programs run only on Win64
#elif defined(_WIN32)
// 32-bit programs run on both 32-bit and 64-bit Windows
// so must sniff
BOOL f64 = FALSE;
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
return FALSE; // Win64 does not support Win16
#endif
}
Den bekomme ich in Delphi nicht umgesetzt.

Kann mir hier jemand helfen?

Schon mal Danke vorab!

Bernhard Geyer 8. Aug 2008 14:46

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
Gibts in der Jedi:

IsWindows64 in JclSysInfo.


Da aktuell Delphi nur 32-Bit Exen erzeugen kann ist dieser Codeabschnitt für dich nicht gerade brauchbar.

API 8. Aug 2008 14:52

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
Delphi-Quellcode:
function IsWindows64: Boolean;
type
  TIsWow64Process = function( // Type of IsWow64Process API fn
    Handle: Windows.THandle; var Res: Windows.BOOL
  ): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL;     // Result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32 
  IsWow64Process := Windows.GetProcAddress( 
    Windows.GetModuleHandle('kernel32'), 'IsWow64Process'
  );
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process( 
      Windows.GetCurrentProcess, IsWow64Result
    ) then
      raise SysUtils.Exception.Create('IsWindows64: bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64 
    Result := False;
end;

juergen 8. Aug 2008 15:09

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
@ Bernhard,
Jedi habe ich (noch) nicht installiert...

@API,
perfekt, funktioniert!
Danke! :thumb:

Luckie 8. Aug 2008 22:01

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
Zitat:

Zitat von juergen
unter Vista 32 Bit nicht richtig funktioniert.

Nö, funktioniert wie von Microsoft vorgesehen.

RWarnecke 8. Aug 2008 22:44

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
Zitat:

Zitat von juergen
...In der Suche habe ich hier nichts gefunden...

Suche mal in der Code-Libary nach Wow64Wow64 drt findest Du einen ausführlichen Beitrag über die Registry unter Windows 64Bit und 32Bit.

juergen 9. Aug 2008 10:38

Re: ermitteln ob 32 Bit oder 64 Bit Betriebssystem
 
@RWarnecke,

den Suchbegriff Wow64 hatte ich leider nicht verwendet...
Danke für den interessanten Link! :thumb:

Der Beitrag von Rakshasa erläutert anschaulich die Hintergründe und Handhabung der Registry (lesend und schreibend) und ist wichtig zu wissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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