Are you running on 64bit Windows? << Back



Recently I was asked how to determine whether a DF program is running on a 32 bit or 64 bit Windows. There are lots of hacky ways to do it, like checking whether the machine has a certain registry keys or certain directories (Ex. C:\Program Files (x86)). Here is the official way recommended by Microsoft, implemented in DF.

Use Windows

External_Function IsWow64Process  "IsWow64Process" Kernel32.dll Handle hProcess Pointer pb64 Returns Boolean
External_Function GetProcAddress "GetProcAddress" Kernel32.dll Handle hModule String sProc Returns Pointer
External_Function GetCurrentProcess "GetCurrentProcess" Kernel32.dll Returns DWord

Function Is64 Global Returns Boolean
	#IFDEF IS$WIN64
	Function_Return True // Since 64 bit programs can only run on 64 bit Windows
	#ELSE
	Handle hKernel
	Pointer pProcAddress
	String sModule
	Boolean b64 bSuccess
	Move "Kernel32.dll" to sModule
	Move (GetModuleHandle(AddressOf(sModule))) to hKernel
	Move (GetProcAddress(hKernel, "IsWow64Process")) to pProcAddress
	If (pProcAddress) Begin
		Move False to b64
		Move (IsWow64Process(GetCurrentProcess(),AddressOf(b64))) to bSuccess
		Function_Return b64
	End
	Function_Return False
	#ENDIF
End_Function

Showln (Is64())
InKey FieldIndex
Free Web Hosting