Como comprobar si Windows es de 32 o 64 bits en C++?

Iniciado por Kajjin112, 24 Junio 2013, 04:46 AM

0 Miembros y 2 Visitantes están viendo este tema.

Kajjin112

Hola a todos, estoy creando una pequña aplicacion para ejecutar secuencialmente una serie de programas para llevar a cabo un mantenimiento completo del sistema. En esa aplicacion incluyo programas para actualizar software, optimizar y borrar lo innecesario, entre otras cosas.
La cosa es que cuando tengo que ejecutar CCleaner desde mi aplicacion, tengo que elegir entre ejecutar CCleaner.exe o CClener64.exe dependiendo de la arquitectura de Windows. Yo lo que quiero hacer es, luego de la funcion main, es declarar una variable con if (creo), para asignarle a la variable SO alguno de estos dos valores: x32 y x64.
Para determinar si el Sistema Operativo es x32 o x64, habia pensado en comprobar la existencia de la carpeta "C:\Program Files (x86)". En otras palabras, seria algo asi:

int main(){
    int SO
    if exist "%systemdrive%\Program Files (x86)"{
             SO == x64}
             else{
                   SO == x32}

Entonces la variable SO quedaria con un valor de x32 o x64. Despues, a la hora de ejecutar CCleaner, el codigo seria algo asi:

while(SO == x64){
                system("CCleaner64.exe");
                 }
                 else{
                        system("CCleaner.exe");


Coloquialmente seria:
"Si existe la carpeta '%systemdrive%/Program Files (x86)' el sistema operativo es x64, sino, es x32. Siempre que el sistema operativo sea x64, ejecutar 'CCleaner64.exe', sino, ejecutar 'CCleaner.exe'"

Como pueden ver soy nuevo en esto de la programacion en C++. Anteriormente hice algunos archivos en batch, por eso algunos de los comandos que utilizo son de batch (como el if exist o la variable %systemdrive%), porque no se como serian en C++.
Espero que hayan entendido mi duda y puedan ayudarme, gracias de antemano.

ecfisa


ThePinkPanther

Dudo que exista el if exists , eso es batch.  :-\

amchacon

Sencillo, haz una versión en 64 bits y otra en 32 bits.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Kajjin112

Cita de: ecfisa en 24 Junio 2013, 05:07 AM
Hola Kajjin112.

Podes utilizar la función: IsWow64Process

Saludos :)
Esa funcion es para saber si un determinado proceso esta ejecutandose bajo WOW64 o no. Lo que yo quiero es comprobar la existencia de una carpeta predefinida en el codigo fuente del programa, para hacer UN SOLO programa.
Tienen idea de que funcion puedo usar? (Sé que if exist es batch, lo que yo estoy buscando seria algo asi como el equivalente de if exist en c++)


daryo

#6
.
buenas

Khronos14

Puedes probar con directivas condicionales del compilador, si utilizas el Visual Studio es muy sencillo, existen los defines: _WIN32 y _WIN64.

Te pongo un ejemplo:


#ifdef _WIN64
printf("WIN64\n");
#else
printf("WIN32\n");
#endif


Pero si usas GCC tienes que utilizar sus macros específicas:

http://stackoverflow.com/questions/1505582/determining-32-vs-64-bit-in-c

Saludos.

daryo

#8
.
buenas

x64core

*FACEPALM* Santa mier* chicos por favor diganme que eso de usar macros del preprocesador solo
lo dicen como trolls... Ya dieron la respuesta a la pregunta, se puede utilizar IsWow64Process para saber si un proceso
esta siendo ejecuta como un WoW64, si lo es, entonces estamos en un Windows de 64 bits, sino, es de 32bits.

Esto no es de si queremos compilar un PE32 o PE32+