[C++] Comment savoir sous quel OS on tourne ??

Comment savoir sous quel OS on tourne ?? [C++] - Programmation

Marsh Posté le 15-11-2001 à 17:25:36    

hein ?

Reply

Marsh Posté le 15-11-2001 à 17:25:36   

Reply

Marsh Posté le 15-11-2001 à 17:37:21    

a la compilation ?
 
des gros
 
#ifdef WIN32  
 
devrait faire l'affaire (ou _WIN32 je sais pu trop)
y'a aussi des WINVER et tout ca, regarde dans windows.h c la que ca doit trainer

Reply

Marsh Posté le 15-11-2001 à 17:37:37    

tu veux pouvoir faire la différence entre les différentes versions de windows? ou encore plus (...???)

Reply

Marsh Posté le 15-11-2001 à 17:45:13    

ouaip c'est entre les versions, 98, 2K, etc...
Parce que les cle dans la base de registre ne sont pas les memes des fois et ca me pose un pb

Reply

Marsh Posté le 15-11-2001 à 17:48:20    

#define W31  "Windows 3.1"
#define W95  "Windows 95"
#define W98  "Windows 98"
#define WME  "Windows ME"
#define WNT4      "Windows NT 4.0"
#define W2K  "Windows 2000"
 
 
#if defined(WIN32)
 OSVERSIONINFO winfo;
 winfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

 


 GetVersionEx(&winfo);
 if(winfo.dwPlatformId==VER_PLATFORM_WIN32_NT)
 {
  if(winfo.dwMajorVersion>=5)
   return W2K;
  else
   return WNT4;
 }
 else
 if(winfo.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS
)
 {
  if(winfo.dwMinorVersion<10)
   return W95;
  else
  if(winfo.dwMinorVersion<90)
   return W98;
  else
   return WME;
 }
 else
 if(winfo.dwPlatformId==VER_PLATFORM_WIN32s)
 {
  return W31;
 }
 
 return "?";
#endif

Reply

Marsh Posté le 15-11-2001 à 18:05:26    

Meci pour le code ;)
 
 
En fait mon pb c'est que je veux creer des shortcuts dans le menu demarrer, mais la cle n'est pas dans le meme path sous 2k et 98 (Bravo M$!!), le seul moyen que je trouve c'est de verifier l'OS, mais bon c'est un peu plus degueu...

Reply

Marsh Posté le 15-11-2001 à 18:07:43    

if(winfo.dwMinorVersion<10)
  return W95;
 else
 if(winfo.dwMinorVersion<90)
  return W98;
 else
  return WME;
 
PS: Dans le code la y a pas un pb ?

Reply

Marsh Posté le 15-11-2001 à 18:13:56    

Godbout a écrit a écrit :

if(winfo.dwMinorVersion<10)
  return W95;
 else
 if(winfo.dwMinorVersion<90)
  return W98;
 else
  return WME;
 
PS: Dans le code la y a pas un pb ?  




 
ah ouais, tiens... en fait, j'ai jamais essayé sous autre chose que NT ou 2000, alors je ne m'en suis même pas rendu compte :D

Reply

Marsh Posté le 15-11-2001 à 19:05:06    

:D
 
Et comment je peux connaitre alors les differents intervalles que je dois tester ?
 
Au fait c'est une macro ca ?
Comment je recupere la valeur renvoyee par return ? (dsl dans une macro je capte pas)

Reply

Marsh Posté le 15-11-2001 à 19:22:27    

C'est bon y a l'air d'avoir des infos dans GetVerion, j'avais pas vu ;)
 
Par contre la macro je capte toujours pas :D

Reply

Marsh Posté le 15-11-2001 à 19:22:27   

Reply

Marsh Posté le 15-11-2001 à 19:30:33    

Code :
  1. BOOL bIsWindowsVersionOK(   DWORD dwWin9xMajor, DWORD dwWin9xMinor,
  2.                             DWORD dwWinNTMajor, DWORD dwWinNTMinor, WORD wWinNTSPMajor )
  3. {
  4.     OSVERSIONINFO           osvi; 
  5.     // Initialize the OSVERSIONINFO structure.
  6.     ZeroMemory( &osvi, sizeof( osvi ) );
  7.     osvi.dwOSVersionInfoSize = sizeof( osvi );   
  8.     GetVersionEx( &osvi );  // Assume this function succeeds.
  9.     // Split code paths for NT and Win9x     
  10.     if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
  11.     {
  12.         // Check the major version.
  13.         if( osvi.dwMajorVersion > dwWin9xMajor )
  14.             return TRUE;
  15.         else if( osvi.dwMajorVersion == dwWin9xMajor )
  16.         {
  17.             // Check the minor version.
  18.             if( osvi.dwMinorVersion >= dwWin9xMinor )
  19.                 return TRUE;
  20.         }
  21.     }
  22.     else if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT )
  23.     {
  24.         // Check the major version.
  25.         if( osvi.dwMajorVersion > dwWinNTMajor )
  26.             return TRUE;
  27.         else if( osvi.dwMajorVersion == dwWinNTMajor )
  28.         {
  29.             // Check the minor version.
  30.             if( osvi.dwMinorVersion > dwWinNTMinor )
  31.                 return TRUE;
  32.             else if( osvi.dwMinorVersion == dwWinNTMinor )
  33.             {
  34.                 // Check the service pack.
  35.                 DWORD dwServicePack = 0;
  36.                 if( osvi.szCSDVersion )
  37.                 {
  38.                     _stscanf(   osvi.szCSDVersion,
  39.                                 _T("Service Pack %d" ),
  40.                                 &dwServicePack );
  41.                 }
  42.                 return ( dwServicePack >= wWinNTSPMajor );
  43.             }
  44.         }
  45.     }
  46.     return FALSE;
  47. }


 
source: MSDN News

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed