Holy cow, I wrote a book!
To detect programmatically whether your 32-bit program is running
on 64-bit Windows, you can use the IsWow64Process function.
Do not do
as some people do and
hard-code the list of 64-bit processors.
You'd think that after the hard-coded list of 64-bit processors
changed the first time (when x64 was added to ia64), people would have
learned their lesson.
But how do you detect programmatically from your 64-bit process
whether you are running on 64-bit Windows? Easy.
The fact that your 64-bit program is running at all
means that you are running on 64-bit Windows!
If it were a 32-bit machine, your program wouldn't be
able to run.
It's like asking the question, "Is the power on?"
If there were no power, your program wouldn't be able to ask the question.
Of course, if you want a single source code base that can be
compiled both as a 32-bit program and as a 64-bit program,
you have a tiny amount of work to do.
return TRUE; // 64-bit programs run only on Win64
// 32-bit programs run on both 32-bit and 64-bit Windows
// so must sniff
BOOL f64 = FALSE;
return IsWow64Process(GetCurrentProcess(), &f64) && f64;
return FALSE; // Win64 does not support Win16
I threw in a branch for 16-bit programs if you're crazy enough
to be still writing 16-bit Windows programs.