Detect whether current Windows version is 32 bit or 64 bit
To check for a 64-bit version of Windows in a command box, I use the following template:
test.bat:
@echo offif defined ProgramFiles(x86) ( @echo yes @echo Some 64-bit work) else ( @echo no @echo Some 32-bit work)
ProgramFiles(x86)
is an environment variable automatically defined by cmd.exe (both 32-bit and 64-bit versions) on Windows 64-bit machines only.
Here is some Delphi code to check whether your program is running on a 64 bit operating system:
function Is64BitOS: Boolean;{$IFNDEF WIN64}type TIsWow64Process = function(Handle:THandle; var IsWow64 : BOOL) : BOOL; stdcall;var hKernel32 : Integer; IsWow64Process : TIsWow64Process; IsWow64 : BOOL;{$ENDIF}begin {$IFDEF WIN64} //We're a 64-bit application; obviously we're running on 64-bit Windows. Result := True; {$ELSE} // We can check if the operating system is 64-bit by checking whether // we are running under Wow64 (we are 32-bit code). We must check if this // function is implemented before we call it, because some older 32-bit // versions of kernel32.dll (eg. Windows 2000) don't know about it. // See "IsWow64Process", http://msdn.microsoft.com/en-us/library/ms684139.aspx 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; {$ENDIf}end;
I tested the solution I suggested in my question:
Tested for Windows Environment Variable: ProgramW6432
If it's non empty then it's 64 bit Windows.W