elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit  (Leído 3,338 veces)
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
[SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« en: 7 Octubre 2010, 19:01 pm »

Buenas  :D

Tengo una aplicacion que se cuando se inicia se lanza el servidor mysql, el problema es que hay un servidor para cada tipo de SO (32 y 64 bits) entonces.... buscando (luego de intentos fallidos a mano) logre dar con esta funcion :)

En un modulo (o en un form como quieran :xD)
Código
  1. Option Explicit
  2. ' Extracto
  3. ' http://www.vbmonster.com/Uwe/Forum.aspx/vb-winapi/5690/API-to-determine-if-OS-is-32bit-or-64-bit
  4. Private Declare Function GetVersion Lib "kernel32" () As Long
  5. Private Declare Sub GetNativeSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
  6. Private Type SYSTEM_INFO
  7. wProcessorArchitecture        As Integer
  8. wReserved                     As Integer
  9. dwPageSize                    As Long
  10. lpMinimumApplicationAddress   As Long
  11. lpMaximumApplicationAddress   As Long
  12. dwActiveProcessorMask         As Long
  13. dwNumberOfProcessors          As Long
  14. dwProcessorType               As Long
  15. dwAllocationGranularity       As Long
  16. wProcessorLevel               As Integer
  17. wProcessorRevision            As Integer
  18. End Type
  19. Private Const PROCESSOR_ARCHITECTURE_IA64 = 6
  20. Private Const PROCESSOR_ARCHITECTURE_AMD64 = 9
  21.  
  22. Public Function IsOS64Bit() As Boolean
  23.    ' Llamar desde Win2k en adelante
  24.    ' La verdad dudo de la existencia de Win2k 64 bits...
  25.    ' pero en el msdn decia que a partir de win2k se puede llamar a la funcion xD
  26.    If LoByte(LoWord(GetVersion())) >= 5 Then
  27.        Dim si As SYSTEM_INFO
  28.        Call GetNativeSystemInfo(si)
  29.        IsOS64Bit = _
  30.            (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) Or _
  31.            (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64)
  32.    End If
  33. End Function
  34.  
  35. Private Function LoWord(ByVal Numero As Long) As Long
  36.    ' Devuelve el LoWord del número pasado como parámetro
  37.    LoWord = Numero And &HFFFF&
  38. End Function
  39.  
  40. Private Function LoByte(ByVal Numero As Integer) As Integer
  41.    ' Devuelve el LoByte del número pasado como parámetro
  42.    LoByte = Numero And &HFF
  43. End Function
  44.  

Y para probarlo en el form load
Código
  1. Private Sub Form_Load()
  2.    If IsOS64Bit Then
  3.        MsgBox "Tienes un SO de 64 bits"
  4.    Else
  5.        MsgBox "Tienes un SO de 32 bits"
  6.    End If
  7. End Sub
  8.  

No me habia dado cuenta que 0 representaba un procesador de 32bit.... y yo decia que no me devolvia nada :xD

Alguien que tenga un so de 64 bits que lo pruebe por favor :)

Saludos!

 ::) Mi mensaje 888 ._.


« Última modificación: 7 Octubre 2010, 19:15 pm por raul338 » En línea

ssccaann43 ©


Desconectado Desconectado

Mensajes: 792


¬¬


Ver Perfil
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #1 en: 7 Octubre 2010, 22:27 pm »

Creeme que estuve mucho tiempo preguntandome esto...! Gracias


En línea

- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"
Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #2 en: 7 Octubre 2010, 22:42 pm »

No me habia dado cuenta que 0 representaba un procesador de 32bit.... y yo decia que no me devolvia nada :xD

Si, cero para 32 Bits  y cuando el retorno de "si.wProcessorArchitecture" es (-1) el procesador es "Unknown architecture"




Alguien que tenga un S.O de 64 bits que lo pruebe por favor :)

+1








« Última modificación: 7 Octubre 2010, 23:07 pm por Dessa » En línea

Adrian Desanti
Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #3 en: 7 Octubre 2010, 23:13 pm »

Código
  1. 'KERNEL32
  2. Private Declare Function IsWow64Process Lib "KERNEL32" (ByVal hProcess As Long, ByRef Wow64Process As Boolean) As Long
  3. Private Const CurrentProcess        As Long = -1
  4.  
  5. Public Function Is64() As Boolean
  6.    On Error Resume Next
  7.    Call IsWow64Process(CurrentProcess, Is64)
  8. End Function
Esto deberia funcionar...
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #4 en: 7 Octubre 2010, 23:58 pm »

Wow.... Karcrack dicen los rumores (lei por ahi) que si pones en modo compatibilidad se puede "saltar" eso :xD pero creo que ahi lo evitas con current Process
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #5 en: 8 Octubre 2010, 16:01 pm »

Dejo una version mas molona :xD
Código
  1. Private Type SYSTEM_PROCESSOR_INFORMATION
  2.    ProcessorArchitecture       As Integer
  3.    ProcessorLevel              As Integer
  4.    ProcessorRevision           As Integer
  5.    Unknown                     As Integer
  6.    FeatureBits                 As Long
  7. End Type
  8. Private Const SystemProcessorInformation    As Long = 1
  9.  
  10. 'NTDLL
  11. Private Declare Function NtQuerySystemInformation Lib "NTDLL" (ByVal SystemInformationClass As Long, ByRef SystemInformation As Any, ByVal SystemInformationLength As Long, ByRef ReturnLength As Long) As Long
  12.  
  13. Public Function x64() As Boolean
  14.    Dim tSPI                    As SYSTEM_PROCESSOR_INFORMATION
  15.  
  16.    If NtQuerySystemInformation(SystemProcessorInformation, tSPI, &HC, ByVal 0&) >= 0 Then
  17.        x64 = ((tSPI.ProcessorArchitecture = 6) Or (tSPI.ProcessorArchitecture = 9))
  18.    End If
  19. End Function
Reducido:
Código:
'NTDLL
Private Declare Function NtQuerySystemInformation Lib "NTDLL" (ByVal SystemInformationClass As Long, ByRef SystemInformation As Any, ByVal SystemInformationLength As Long, ByRef ReturnLength As Long) As Long

Public Function x64() As Boolean
    Dim wProcArch   As Integer
   
    If NtQuerySystemInformation(1, wProcArch, &HC, ByVal 0&) >= 0 Then
        x64 = ((wProcArch = 6) Or (wProcArch = 9))
    End If
End Function
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #6 en: 8 Octubre 2010, 16:11 pm »

[OFFTOPIC]
Porque siempre que posteo algo siempre encuentran una forma de optimizarlo? :rolleyes:
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #7 en: 8 Octubre 2010, 16:42 pm »

Todo se puede mejorar :)


Por cierto, el codigo de Wow permite saber si estamos en un SO de 64 bits, en cambio el resto simplemente miran si el procesador lo es... es decir, yo puedo tener instalado un W$ de 32bits con un procesador de 64bits...
« Última modificación: 8 Octubre 2010, 16:44 pm por Karcrack » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SNIPPET] IsOS64bit - Saber si un sistema es de 64 bit
« Respuesta #8 en: 8 Octubre 2010, 18:56 pm »

Por cierto, el codigo de Wow permite saber si estamos en un SO de 64 bits, en cambio el resto simplemente miran si el procesador lo es... es decir, yo puedo tener instalado un W$ de 32bits con un procesador de 64bits...

Igual me sirve, ya que necesito lanzar cosas de 32 o 64 bits segun sea el caso :xD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines