This site uses cookies own and third. If you continue to browse consider to accept the use of cookies. OK More Info.

[Cramel] Obtener Nombre del Sistema Operativo

  • 2 Replies
  • 2993 Views

0 Members and 1 Guest are viewing this topic.

Offline fudmario

  • *
  • Underc0der
  • Posts: 199
  • Actividad:
    0%
  • Reputación 13
    • View Profile
    • fudmario - GitHub

[Cramel] Obtener Nombre del Sistema Operativo

  • on: March 01, 2017, 12:57:17 am
Una simple funcion para obtener el nombre del Sistema Operativo.
Code: (text) You are not allowed to view links. Register or Login
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"
ret = RegOpenKeyEx(Result, SubKey, 0, &20019, Result)
Si ret<> &0 Entonces Devolver "Desconocido"
ret = RegQueryValueEx(Result, ValueName, 0, 0, CadenaFinal, Data) 
CadenaFinal = RepCarac(0, Data)
ret = RegQueryValueEx(Result, ValueName, 0,  0, CadenaFinal, Data) 
Devolver CadenaFinal
RegCloseKey(Result)
FinProc

Mensaje(SistemaOperativo())

« Last Edit: March 01, 2017, 01:44:59 am by fudmario »


Offline Yuki

  • *
  • Underc0der
  • Posts: 66
  • Actividad:
    0%
  • Reputación 5
    • View Profile

Re:[Cramel] Obtener Nombre del Sistema Operativo

  • on: March 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
Code: You are not allowed to view links. Register or Login
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.

Offline fudmario

  • *
  • Underc0der
  • Posts: 199
  • Actividad:
    0%
  • Reputación 13
    • View Profile
    • fudmario - GitHub

Re:[Cramel] Obtener Nombre del Sistema Operativo

  • on: March 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.