Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2012
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Exclamation Obtener version del Service Pack de Windows

Hola amigos,

La cuestion es que estoy desarrollando una aplicacion capaz de determinar si una computadora es actualizada con regularidad, si está desactualizada y cosas así leyendo con WUA (Windows Update Client Api) las actualizaciones instaladas y comparando contra una BD de actualizaciones portable actualizada para determinar cuales actualizaciones no tiene el cliente etc. La verdad es que la tengo casi terinada pero ahora necesito la version del Service Pack de Windows pero ojo, no puede ser con WMI ni con QuickFix_Engineering que puede darse el caso no esten instaladas y/o habilitadas en la PC, por eso necesito una via que sea mediante alguna funcion super escondida del API de Windows o algo asi :P. Por favor si alguien sabe de esto que me eche una mano. Cuando la termine la pienso publicar para que la gente vea y estudie el codigo fuente y lo reutilize en otras labores.
Responder Con Cita
  #2  
Antiguo 18-05-2012
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
Código Delphi [-]
var
  VersionInfo: TOSVersionInfo;

begin
  VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
  GetVersionEx(VersionInfo);  
  ShowMessage(VersionInfo.szCSDVersion);
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 18-05-2012
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Algo como esto se podria uttilizar pero tengo temor de que en versiones de Windows XP u otras que no este instalada la WMI me falle la aplicacion.

Código:
procedure  GetWin32_OperatingSystemInfo;
const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator : OLEVariant;
  FWMIService   : OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject   : OLEVariant;
  oEnum         : IEnumvariant;
  iValue        : LongWord;
begin;
  //Todas las propiedades y metodos de Win32_OperatingSystem aqui:
  //Win32_OperatingSystem http://msdn.microsoft.com/en-us/library/windows/desktop/aa394239%28v=vs.85%29.aspx

  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
  FWMIService   := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
  FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',wbemFlagForwardOnly);
  oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
  begin
    Writeln(Format('Caption = %s', [FWbemObject.CSDVersion]));// String
    Writeln('');
    FWbemObject:=Unassigned;
  end;
end;
Responder Con Cita
  #4  
Antiguo 18-05-2012
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Roman, resulta ser que he probado tu funcion y me devuelve "Service Pack 3" cuando en realidad tengo Windows 7 Service Pack 1. El mismo resultado me lo esta devolviendo otro componente de la Jedi que al pareces utiliza esa misma forma. Con la funcion que puse mas arriba si me devuelve Service Pack 1 (que es el que tengo instalado y el que sale en las propiedades del sistema). No se que será lo que sucede pero por el momento voy a resolver con WMI hasta que encuentre otra vía. Gracias de todas formas y bueno si tienes alguna idea de por que puede estar sucediendo esto te lo agradecería.

Saludos...
Responder Con Cita
  #5  
Antiguo 18-05-2012
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
¡Vaya! Pues ¡qué raro! En mi caso da el valor correcto. También he visto que algunos lo toman del registro de windows:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

de la clave CSDVersion.

// Saludos
Responder Con Cita
  #6  
Antiguo 19-05-2012
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Si pero bueno para leer dicha clave no necesito tener privilegios de administrador? o puedo simplemente leerlo sin problemas ?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Service pack Delphi 4 martin17476 Varios 2 03-09-2008 10:12:42
Service pack 3 para delphi6 IVAND Varios 1 28-07-2008 21:31:11
Tendremos Service Pack 3 para Windows XP marcoszorrilla Noticias 1 27-05-2007 23:37:52
Service Pack 1 2 3 SQL Server 2000 Marianowo SQL 0 08-02-2005 22:34:58
Service Pack para Interbase 7.1 jachguate Noticias 0 13-11-2003 00:02:28


La franja horaria es GMT +2. Ahora son las 10:42:08.


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