Windows 32 oder 64 bit?

Antworten
TT73GP7
Beiträge: 238
Registriert: Di 29. Mär 2016, 20:45

Windows 32 oder 64 bit?

Beitrag von TT73GP7 »

Hallo zusammen,

also hier in der Firma sollten Angeblich nur 64 Bit Rechner rumstehen (dachten wir bis gestern) nun hab ich Endlich mal die neue Lazarus Version auf 64 bit installiert und siehe da 30 % der Clients gingen nicht mehr. Nun haben wir aber viele Studenten die von zuhause aus arbeiten und das nicht so mitteilen wenn ihr Client so funktioniert. Deswegen wollte ich mal nachfragen ob ich irgendwie auslesen kann welches Betriebssystem der Anwender hat, 32 oder 64 bit und wie der Rechnername ist?

Tja und dann noch gleich automatisch ein Report erstellen wie teuer es wäre neue Rechner anzuschaffen :D
das wäre so mein Traum :D


das wäre echt klasse

:)

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Windows 32 oder 64 bit?

Beitrag von shokwave »

Ich hab mal das benutzt:

Code: Alles auswählen

//False = 32bit system
//True = 64bit system
function IsWOW64: Boolean;
begin
  Result := sysutils.GetEnvironmentVariable('ProgramW6432')<>'';
end;       
mfg Ingo

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Windows 32 oder 64 bit?

Beitrag von MacWomble »

Vorsicht! Erfahrungsgemäß ist auf vielen 64Bit-fähigen Rechnern ist ein 32-Bit Windows installiert! Es liegt nicht immer an der Hardware!
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Windows 32 oder 64 bit?

Beitrag von Timm Thaler »

MacWomble hat geschrieben:Vorsicht! Erfahrungsgemäß ist auf vielen 64Bit-fähigen Rechnern ist ein 32-Bit Windows installiert! Es liegt nicht immer an der Hardware!


Auf dem 32-Bit Win wirst Du aber auch kein ein 64-Bit Lazarusprogramm laufen lassen können.

Unter Start => Computer => rechte Maus => Eigenschaften bekommst Du sowohl Prozessor als auch OS-Version angezeigt.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Windows 32 oder 64 bit?

Beitrag von MacWomble »

Timm Thaler hat geschrieben:Auf dem 32-Bit Win wirst Du aber auch kein ein 64-Bit Lazarusprogramm laufen lassen können.

... und auf 32-bit Hardware kein W64
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Windows 32 oder 64 bit?

Beitrag von Mathias »

Dies müsste doch auch irgendwo in der Registry vermerkt sein, so das man es im eigenen Lazarus-Programm abfragen kann ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Windows 32 oder 64 bit?

Beitrag von Socke »

Man kann auch einfach das Betriebssystem selbst fragen:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684139(v=vs.85).aspx

Die Funktion ist in der Unit jwawinbase deklariert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Windows 32 oder 64 bit?

Beitrag von wp_xyz »

Code: Alles auswählen

function GetComputerName : string;
{$IFDEF WINDOWS}
var
  len : cardinal;
begin
  len := MAX_COMPUTERNAME_LENGTH + 1;
  SetLength(result, len);
  if Windows.GetComputerName(PChar(result), len) then begin
    SetLength(Result, len);
    Result := SysToUTF8(Result);
  end
  else
    RaiseLastWin32Error;
end;
{$ELSE}
begin
  Result := GetHostName;
end;
{$ENDIF}
 
// Gibt aber auch bei einem 64-bit Windows "Win32" aus, wenn das Programm als 32-bit-Programm kompiliert wurde.
function GetOS: string;
begin
  result := {$I %FPCTARGETOS%};
end;
 
uses
  Windows;
 
function GetOS: string;
begin
  result := {$I %FPCTARGETOS%};
end;
 
function GetWinVer: string;
// Liefert die Versionsnummer von Windows als String
begin
// http://wiki.lazarus.freepascal.org/WindowsVersion/de
{ Beispiele für Windows-Versionsnummern:
5.0 => Windows 2000
5.1 => Windows XP
5.2 => Windows XP64 oder Windows 2003 Server
6.0 => Windows Vista oder Windows 2008 Server
6.1 => Windows 7 oder Windows 2008 Server R2
6.2 => Windows 8 oder Windows Server 2012
6.3 => Windows 8.1 oder Windows Server 2012 RS
}

  case Win32MajorVersion of
    5: case Win32MinorVersion of
         0: Result := 'Windows 2000';
         1: Result := 'Windows XP';
         2: Result := 'Windows XP64/Windows 2003 Server';
       end;
    6: case Win32MinorVersion of
         0: Result := 'Vista/Windows 2008 Server';
         1: Result := 'Windows 7/Windows 2008 Server R2';
         2: Result := 'Windows 8/Windows Server 2012';
         3: Result := 'Windows 8.1/Windows Server 2012 RS';
       end;
   10: Result := 'Windows 10';
   else Result := Format('%d.%d', [Win32MajorVersion, Win32MinorVersion]);
  end;
  Result := Result + ' Build ' + IntToStr(Win32BuildNumber);
  if Win32CSDVersion <> '' then
    Result := Result + ' (' + Win32CSDVersion + ')';
end;
 
// http://wiki.lazarus.freepascal.org/Dete ... 64_example
function IsWindows64: boolean;
{ Detect if we are running on 64 bit Windows or 32 bit Windows,
  independently of bitness of this program.
  Original source:
  http://www.delphipraxis.net/118485-ermi ... ystem.html
  modified for FreePascal in German Lazarus forum:
  viewtopic.php?f=55&t=5287
}

{$ifdef WIN32} //Modified KpjComp for 64bit compile mode
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 := TIsWow64Process(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;
{$else} //if were running 64bit code, OS must be 64bit :)
begin
 Result := True;
{$endif}
end;
 
procedure TForm1.FormCreate(Sender: TObject);
const
  bitness: array[boolean] of integer = (32, 64);
var
  s: String;
begin
  if IsWindows64 then s := '64 bit' else s := '32 bit';
  Caption := Format('%s %d-bit', [
    GetWinVer, bitness[IsWindows64]
  ]);
end

Antworten