Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Cómo saber qué tipo de SO es. (https://www.clubdelphi.com/foros/showthread.php?t=59866)

Ziara 11-09-2008 12:39:39

Cómo saber qué tipo de SO es.
 
Hola!

Tengo una duda, se puede saber por código qué sistema operativo se está ejecutando?

Mas o menos que cuadno pinche en un botón de mi aplicación, me diga qué tipo de SO es, si es windows, linux...

Existe algún componente, API ... para ello?

Trabajo sobre Builder6.

Gracias

Ñuño Martínez 11-09-2008 13:39:26

Creo que POSIX define una función para ello, pero únicamente te serviría para sistemas POSIX o cercanos a él (UNIX, GNU/Linux, AIX, QNX, MacOS, BeOS...).

Una alternativa que sí tienen todos los compiladores de C/C++ son las directivas de identificación. Por ejemplo:
Código:

char* NombreSO (void)
{
#ifdef DOS
  return "DOS"
#endif
#ifdef OS2
  return "OS/2 (o eCom Station)";
#endif
#ifdef WIN16
  return "DOS + Windows 3.x";
#endif
#ifdef WIN32
  #ifdef WINXP
    return "Windows XP";
  #endif
  #ifdef WINNT
    return "Windows NT";
  #endif
  return "Windows 95/98";
#endif
#if defined(COCOA) || defined(DARWIN)
  return "MacOS X";
#endif
#ifdef BSD
  #ifdef FREE_BSD
    return "freeBSD";
  #endif
  return "BSD";
#endif
#ifdef LINUX
  return "GNU/Linux";
#endif
}

Bueno, más o menos porque los nombres de las macros las he puesto de memoria y no sé si son los correctos. En los manuales de los compiladores incluyen una lista de las directivas definidas.

Ziara 18-09-2008 18:14:03

Buenas tardes,

Estoy haciendo un función que detecta los equipos conectados en la misma red y ya puestos, me gustaría saber qué SO tiene dichos equipos que están online.

Te agradecería que me pudieras poner un ejemplo de cómo puedo saber a qué SO pertenece, no entiendo muy bien cómo tengo que aplicar las directivas.

Gracias y un saludo.

sisgeorge 18-09-2008 22:58:00

MIRE PRUEBE CON ESTE CODIGO..

SIRVE PARA WINDOWS LE DICE LA VERSION Y HASTA QUE SP ES...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString version;
SistOpe.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
i=GetVersionEx(&SistOpe);
if(i)
switch (SistOpe.dwMajorVersion)
{
case 4:
switch (SistOpe.dwMinorVersion)
{
case 0://W95 o WNT
if (SistOpe.dwPlatformId ==VER_PLATFORM_WIN32_WINDOWS)
{//W95
version=AnsiString("Windows 95 ");
}else
{//WNT;
version=AnsiString("Windows NT 4.0 ");
}
break;
case 10://W98
version=AnsiString("Windows 98 ");
break;
case 90://WMe
version=AnsiString("Windows Me ");
break;
default://Desconocido
version=AnsiString("Desconocido ");
}
break;
case 3:
version=AnsiString("Windows NT 3.51 ");
break;
case 5:
switch (SistOpe.dwMinorVersion)
{
case 0://W2k
version=AnsiString("Windows 2000 ");
break;
case 1://WXP
version=AnsiString("Windows XP ");
break;
case 2://W2003
version=AnsiString("Windows 2003 ");
break;
default:
version=AnsiString("Desconocido ");
}
break;
case 6:
switch(SistOpe.dwMinorVersion)
{
case 0:
version=AnsiString("Windows Vista ");
break;
default:
version=AnsiString("Desconocido ");
}
break;
default:
version=AnsiString("Desconocido ");//MessageBox(NULL,"Desconocido","Sistema Operativo",NULL);
}

Label1->Caption=version+SistOpe.szCSDVersion;
}

LA VERDAD YO EN LINUX NO TRABAJO Y NO SABRIA DECIRLE SY HAY TAMBIEN FUNCIONA PERO ME PARECE QUE SI..

BUENO ESPERO QUE SEA DE UTILIDAD

SALUTE....

Ziara 22-09-2008 13:04:21

Hola.

Ante todo gracias por la ayuda.

He estado viendo el código y aparentemente cuando pinchas sobre un botón ¿te dice la versión del pc en que está ejecutando la aplicación que contiene este código?

Hay alguna forma de saber aparte del host de mi pc, ¿los host que están conectado a la misma red a partir de sus ips?

Gracias.


La franja horaria es GMT +2. Ahora son las 13:12:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi