Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Cramel] Obtener Nombre del Sistema Operativo

  • 2 Respuestas
  • 1872 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fudmario

  • *
  • Cramel
  • *
  • Mensajes: 197
  • Actividad:
    0%
  • Reputación 13
    • Ver Perfil
    • fudmario - GitHub
  • Skype: fudmario
« en: Marzo 01, 2017, 12:57:17 am »
Una simple funcion para obtener el nombre del Sistema Operativo.
Código: Text
  1. Importar "Cramel.cml"
  2. API RegOpenKeyEx(hKey:Entero,lpSubKey:Cadena,ulOptions,samDesired:Entero,Referencia phkResult:Entero):Entero, "Advapi32.dll" "RegOpenKeyExA"
  3. API RegQueryValueEx(hKey:Entero,lpValueName:Cadena,lpReserved:Entero,Referencia lpType:Entero,Referencia lpData:Cadena,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
  4. API RegCloseKey(hKey:Entero):Entero, "Advapi32.dll"
  5. '=> Obtiene Nombre del Sistema Operativo
  6. '=> Retorna Cadena
  7. Proc SistemaOperativo():Cadena
  8. Var SubKey, ValueName, CadenaFinal:Cadena
  9. Var Result,ret,Data,Tipo,resData:Entero
  10. Result = &80000002 'HKLM
  11. SubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  12. ValueName =  "ProductName"
  13. ret = RegOpenKeyEx(Result, SubKey, 0, &20019, Result)
  14. Si ret<> &0 Entonces Devolver "Desconocido"
  15. ret = RegQueryValueEx(Result, ValueName, 0, 0, CadenaFinal, Data)  
  16. CadenaFinal = RepCarac(0, Data)
  17. ret = RegQueryValueEx(Result, ValueName, 0,  0, CadenaFinal, Data)  
  18. Devolver CadenaFinal
  19. RegCloseKey(Result)
  20. FinProc
  21.  
  22. Mensaje(SistemaOperativo())
  23.  
  24.  
« Última modificación: Marzo 01, 2017, 01:44:59 am por fudmario »


Desconectado Yuki

  • *
  • Underc0der
  • Mensajes: 67
  • Actividad:
    0%
  • Reputación 5
    • Ver Perfil
« Respuesta #1 en: Marzo 01, 2017, 12:35:06 pm »
Veo que le estas agarrando la mano al lenguaje, te dejo un par de notas, recomiendo usar la función "Espacio" en vez de "RepCarac", según recuerdo crea un buffer inicializado a cero, básicamente lo que quieres hacer con "RepCarac", pero sin el FillMemory.

No es necesario asignar una variable de retorno a los procedimientos, puedes procesarlos directamente desde una sentencia "Si".

La instrucción "Devolver" retorna un valor y finaliza la ejecución de tu procedimiento, por lo que nunca llega a cerrar el registro.

Te dejo acá el código como creo que debería quedar
Código: [Seleccionar]
Importar "Cramel.cml"
API RegOpenKeyEx(hKey:Entero,lpSubKey:Cadena,ulOptions,samDesired:Entero,Referencia phkResult:Entero):Entero, "Advapi32.dll" "RegOpenKeyExA"
API RegQueryValueEx(hKey:Entero,lpValueName:Cadena,lpReserved:Entero,Referencia lpType:Entero,Referencia lpData:Cadena,Referencia lpcbData:Entero):Entero, "Advapi32.dll" "RegQueryValueExA"
API RegCloseKey(hKey:Entero):Entero, "Advapi32.dll"
'=> Obtiene Nombre del Sistema Operativo
'=> Retorna Cadena
Proc SistemaOperativo():Cadena
    Var SubKey, ValueName, CadenaFinal:Cadena
    Var Result,ret,Data,Tipo,resData:Entero
    Result = &80000002 'HKLM
    SubKey = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
    ValueName =  "ProductName"
    Si RegOpenKeyEx(Result, SubKey, 0, &20019, Result) <> &0 Entonces Devolver "Desconocido"
    RegQueryValueEx(Result, ValueName, 0, 0, CadenaFinal, Data) 
    CadenaFinal = Espacio(Data)
    RegQueryValueEx(Result, ValueName, 0,  0, CadenaFinal, Data) 
    RegCloseKey(Result)
    Resultado = CadenaFinal
FinProc
 
Mensaje(SistemaOperativo())

Bueno, mas haya de ese par de pequeños problemas, tu código es excelente y una muy buena manera de obtener el nombre del sistema operativo.

Desconectado fudmario

  • *
  • Cramel
  • *
  • Mensajes: 197
  • Actividad:
    0%
  • Reputación 13
    • Ver Perfil
    • fudmario - GitHub
  • Skype: fudmario
« Respuesta #2 en: Marzo 01, 2017, 11:39:18 pm »
Gracias por las Correcciones, recien me estoy familiarizando con el Lenguaje.
Tenia pensado traducir algunas funciones de mi libreria que hice en Vb.net y queria comenzar con algo sencillo..


Saludos.


 

¿Te gustó el post? COMPARTILO!



Sistema Experto en Swi Prolog

Iniciado por k43l

Respuestas: 3
Vistas: 8653
Último mensaje Marzo 01, 2018, 01:44:56 pm
por r4lf02
[Go] Storiesgram - Obtener historias de Instagram

Iniciado por gugadev

Respuestas: 0
Vistas: 2224
Último mensaje Enero 01, 2018, 11:50:52 am
por gugadev
[Go] CryptoGo - Obtener información de criptomonedas

Iniciado por gugadev

Respuestas: 0
Vistas: 2206
Último mensaje Diciembre 31, 2017, 06:22:05 pm
por gugadev
[Cramel] Brute Force Dictionary Creator by 79137913 [Aplicación + Source]

Iniciado por BlackBlex

Respuestas: 0
Vistas: 3061
Último mensaje Julio 01, 2017, 07:04:10 pm
por BlackBlex
Como trabajar Cramel con Sublime Text | Actualizado [Cramel2| 20/Junio/17]

Iniciado por BlackBlex

Respuestas: 1
Vistas: 1713
Último mensaje Febrero 23, 2017, 08:18:21 am
por ANTRAX