Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2004
agonzalez agonzalez is offline
Miembro
 
Registrado: may 2003
Ubicación: Medellin - Colombia
Posts: 52
Poder: 21
agonzalez Va por buen camino
Api GetVersionEx

Tengo implementada la api GetVersionEx en delphi y me funciona sin problemas, pero en VB no me detecta el sistema operativo XP , ¿si es la misma api y la misma estructura de la funcion por que no funciona igual?, ¿Alguien sabe como detecto sistema operativo XP con VB me podria ayudar?

Gracias

Este es el codigo en VB
Código:
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

Enum TipoSO
  cOsUnknown = 1
  cOsWin95 = 2
  cOsWin98 = 3
  cOsWin98SE = 4
  cOsWinME = 5
  cOsWinNT = 6
  cOsWin2000 = 7
  cOsWinXP = 8
End Enum

Type SYSTEM_INFO
  dwOemID As Long
  dwPageSize As Long
  lpMinimumApplicationAddress As Long
  lpMaximumApplicationAddress As Long
  dwActiveProcessorMask As Long
  dwNumberOrfProcessors As Long
  dwProcessorType As Long
  dwAllocationGranularity As Long
  dwReserved As Long
End Type

Public Function SistemaOperativo() As String
  Dim osVersion As OSVERSIONINFO
  Dim Major As Integer
  Dim Minor As Integer
  Dim Version As Integer
  osVersion.dwOSVersionInfoSize = MAX_LENGTH
  If (GetVersionEx(osVersion)) Then
    Major = osVersion.dwMajorVersion
    Minor = osVersion.dwMinorVersion
    Select Case osVersion.dwPlatformId
    Case VER_PLATFORM_WIN32_NT 'Windows NT/2000/XP
      If (Major <= 4) Then
        Version = cOsWinNT
      Else
        If (Major = 5) And (Minor = 0) Then
          Version = cOsWin2000
        Else
          If (Major = 5) And (Minor = 1) Then
            Version = cOsWinXP
          Else
            Version = cOsUnknown
          End If
        End If
      End If
    Case VER_PLATFORM_WIN32_WINDOWS 'Windows 9x/ME
        If (Major = 4) And (Minor = 0) Then
          Version = cOsWin95
        Else
          If (Major = 4) And (Minor = 10) Then
            If (Mid(osVersion.szCSDVersion, 1, 1) = "A") Then
              Version = cOsWin98SE
            Else
              Version = cOsWin98
            End If
          Else
            If (Major = 4) And (Minor = 90) Then
              Version = cOsWinME
            Else
              Version = cOsUnknown
            End If
          End If
      End If
    Case Else
      Version = cOsUnknown
    End Select
  Else
    Version = cOsUnknown
  End If

  Select Case Version
    Case cOsUnknown
       SistemaOperativo = "(sistema no reconocido)"
    Case cOsWin95
      SistemaOperativo = "Microsoft Windows 95"
    Case cOsWin98
      SistemaOperativo = "Microsoft Windows 98"
    Case cOsWin98SE
      SistemaOperativo = "Microsoft Windows 98 Second Edition"
    Case cOsWinME
      SistemaOperativo = "Microsoft Windows Millennium Edition"
    Case cOsWinNT
      SistemaOperativo = "Microsoft Windows NT"
    Case cOsWin2000
      SistemaOperativo = "Microsoft Windows 2000"
    Case cOsWinXP
      SistemaOperativo = "Microsoft Windows XP"
    Case Else
      SistemaOperativo = "Microsoft Windows"
    End Select
End Function
y este es mi codigo en delphi
Código Delphi [-]
function Tlog.FNombreSO:String;
  const
    cOsUnknown=1;
    cOsWin95=2;
    cOsWin98=3;
    cOsWin98SE=4;
    cOsWinME=5;
    cOsWinNT=6;
    cOsWin2000=7;
    cOsWinXP=8;
  var
    LosVersion : TOSVersionInfo;
    Lmajor,
    Lminor,
    LVersion: Integer;
  begin
    LosVersion.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
    if ( GetVersionEx( LosVersion ) ) then
    begin
      Lmajor := LosVersion.dwMajorVersion;
      Lminor := LosVersion.dwMinorVersion;
      case ( LosVersion.dwPlatformId ) of
         VER_PLATFORM_WIN32_NT : { Windows NT/2000/XP }
         begin
           if (Lmajor<=4) then
            LVersion:=cOsWinNT
           else
             if ((Lmajor=5) and (Lminor=0)) then
               LVersion:=cOsWin2000
             else
               if ((Lmajor = 5) and (Lminor=1)) then
                 LVersion := cOsWinXP
               else
                 LVersion:=cOsUnknown;
         end;
         VER_PLATFORM_WIN32_WINDOWS : { Windows 9x/ME }
         begin
            if ((Lmajor=4) and (Lminor=0)) then
              LVersion:= cOsWin95
            else
              if ((Lmajor=4) and (Lminor=10)) then
              begin
                 if (LosVersion.szCSDVersion[1]='A') then
                   lVersion:=cOsWin98SE
                 else
                   LVersion:=cOsWin98;
              end
              else
              if ((Lmajor = 4) and (Lminor = 90)) then
                LVersion := cOsWinME
              else
                LVersion := cOsUnknown;
         end;
         else//case
            LVersion:=cOsUnknown;
      end; // Final del Case
    end
    else
      lVersion:=cOsUnknown; //Final del if
    if ( lVersion=cOsUnknown ) then
      Result := '(sistema no reconocido)'
    else if ( lVersion = cOsWin95 ) then
      Result := 'Microsoft Windows 95'
    else if ( lVersion = cOsWin98 ) then
      Result := 'Microsoft Windows 98'
    else if ( lVersion = cOsWin98SE ) then
      Result := 'Microsoft Windows 98 Second Edition'
    else if ( lVersion = cOsWinME ) then
      Result := 'Microsoft Windows Millennium Edition'
    else if ( lVersion = cOsWinNT ) then
      Result := 'Microsoft Windows NT'
    else if ( lVersion = cOsWin2000 ) then
      Result := 'Microsoft Windows 2000'
    else if ( lVersion = cOsWinXP ) then
      Result := 'Microsoft Windows XP'
    else
      Result := 'Microsoft Windows';
    Result:= Result; 
 end;

Última edición por agonzalez fecha: 07-09-2004 a las 14:48:11.
Responder Con Cita
  #2  
Antiguo 07-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola.

No sos nuevo en el foro. Es de esperar que utilices las etiquetas [code] y/o [delphi] para publicar trozos de código. Te recomiendo editar tu mensaje si esperas que alguien se lo lea para ayudarte, ya que publicado de esta manera es mucho mas dificil de leer.

Si no sabes como usar las etiquetas, en mi firma hay un vínculo a la ayuda de code y al inicio de cada foro un mensaje que explica las nuevas etiquetas vB.

Hasta luego.



Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 07-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jachguate
Es de esperar que utilices las etiquetas [code] y/o [delphi] para publicar trozos de código.
¿Usar la etiqueta [delphi] para código de Visual Basic? ¡Oh sacrilegio!



Y no está de más recordale al compañero agonzalez que si bien alguien puede contestarle, éstos no son foros de Visual Basic.

// Saludos
Responder Con Cita
  #4  
Antiguo 07-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

Cita:
Empezado por roman
¿Usar la etiqueta [delphi] para código de Visual Basic? ¡Oh sacrilegio!
Por Dios!!!! claro que no!!!

Quizas no me expresé bien, pero me refería a usar la etiqueta [code] para vb, y la etiqueta [delphi] para Delphi.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 07-09-2004
agonzalez agonzalez is offline
Miembro
 
Registrado: may 2003
Ubicación: Medellin - Colombia
Posts: 52
Poder: 21
agonzalez Va por buen camino
Tengo bien claro que no es un foro de VB, espero una respuesta desde el lado de Delphi de pronto la unit de Windows hace algún calculo adicional al que entrega la api en vB. por que de hecho hay diferencias:

Delphi me retorna un Bool, ¿que por sierto no se que es? Supongo un boolean
Código Delphi [-]
function GetVersionExA(var lpVersionInformation: TOSVersionInfo): BOOL; stdcall;
y en VB me retorna un Long
Código:
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
De ser por mi entregaba el proyecto en delphi que ya lo tengo listo , pero el arquitecto no me lo permitio.

Gracias por su atención y por su valiosa ayuda
Responder Con Cita
  #6  
Antiguo 07-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Empezado por agonzalez
Delphi me retorna un Bool, ¿que por sierto no se que es? Supongo un boolean
Bool, "alias" de LongBool y, de la ayuda...
Cita:
Empezado por help Delphi
A value of type ByteBool, LongBool, or WordBool is considered True when its ordinality is nonzero.
Por este motivo puedes en VB retornar un Long y desde Delphi un Bool

Espero te sirva
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:42:02.


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
Copyright 1996-2007 Club Delphi