Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Encontre la forma de ingresar la inf. del procesador...Pero

Estas en el tema de Encontre la forma de ingresar la inf. del procesador...Pero en el foro de Visual Basic clásico en Foros del Web. Aca encontre una forma de de hacer lo que necesitaba ..modifique el codigo y lo reduje lo mas posible para que fuera aplicada en los ...
  #1 (permalink)  
Antiguo 22/05/2005, 14:47
 
Fecha de Ingreso: marzo-2005
Mensajes: 22
Antigüedad: 19 años, 1 mes
Puntos: 0
Encontre la forma de ingresar la inf. del procesador...Pero

Aca encontre una forma de de hacer lo que necesitaba ..modifique el codigo y lo reduje lo mas posible para que fuera aplicada en los labels, ya que el original enviava todo en un msg box .. y usaba un modulo bas ..el problema es que para
win 98 se necesita una referencia de wmi scripting , al momento de ejecutar el . exe de la aplicacion envia un error "No se encontro el nombre de archivo o la clase durante la operacion de Automatizacion"

envio el codigo: y la referencia es Microsoft wmi Scripting si alguien me puede ayudar con lo de win 98 lo Agradeceria.

Private Sub Form_Load()
Dim oWMI As SWbemServices
Dim oProcs As SWbemObjectSet
Dim oProc As SWbemObject

Set oWMI = GetObject("WINMGMTS:")
Set oProcs = oWMI.InstancesOf("Win32_Processor")

For Each oProc In oProcs

Label1.Caption = oProc.Manufacturer
Label2.Caption = oProc.Name
Label3.Caption = oProc.Description
Label4.Caption = oProc.CurrentClockSpeed & " " & "MHz"
Next

End Sub

G gracias
  #2 (permalink)  
Antiguo 22/05/2005, 23:52
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Yo creía que WMI funcionaba sólo a partir de Win2K, pero al leer la documentación de Microsoft, ésta indica que también funciona en Win98 y ME, inclusive en Win95, descargando el Run-Time adecuado.
Ahora bien...
¿Estás desarrollando la aplicación en Win98? Si es así, y puedes ver la referencia a WMI Scripting, no tengo idea de que puede estar mal.
Si estás desarrollando la aplicación en WinXP, y sólo te causa un error en Win98, pues descarga el Run-Time aqui WMI
La sintaxis que yo he usado, es ligeramente diferente para obtener la colección de objetos pero en teoría no debería haber diferencias en los resultados:
Código:
Dim swService As SWbemServices
Dim swCpuSet As SWbemObjectSet
Dim swMemSet As SWbemObjectSet
Dim swObj As SWbemObject
Dim decTotalMemory As Variant
	
	Set swService = GetObject("winmgmts:")
	Set swCpuSet = swService.ExecQuery("Select * from Win32_Processor")
	Set swMemSet = swService.ExecQuery("Select * from Win32_PhysicalMemory")

	For Each swObj In swCpuSet
		Print "Descripción: " & swObj.Description
		Print "Nombre: " & swObj.Name
		Print "Reloj: " & swObj.MaxClockSpeed & "MB"
	Next swObj
		
	decTotalMemory = 0
	For Each swObj In swMemSet
		decTotalMemory = decTotalMemory + CDec(swObj.Capacity)
	Next swObj
	Print "Memoria Física Total: " & (decTotalMemory / 1024) / 1024 & "MB"
En tu otro post, decías que habías usado GetSystemInfo para tratar de obtener este dato, pero la función no sirve para mucho a partir de los 586. Tendrías que usar ensamblador.

Info Agregada:
Acabo de ver que puedes obtener los datos del procesador del registro del sistema. La clave es: HKEY_LOCAL_MACHINE\Hardware\Description\
System\CentralProcessor\0
(por lo menos en XP)...

Última edición por Beakdan; 23/05/2005 a las 00:57
  #3 (permalink)  
Antiguo 23/05/2005, 02:21
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Como ya le respondí, que use GetSystemInfo y parecidas.

Cita:
En tu otro post, decías que habías usado GetSystemInfo para tratar de obtener este dato, pero la función no sirve para mucho a partir de los 586. Tendrías que usar ensamblador.
¿¿Cómo??

¿Que no sirve mucho a partir de los 586? Un 586 son los PCs actuales...
¿Usar ensamblador? No sé para qué...
  #4 (permalink)  
Antiguo 23/05/2005, 05:52
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Cita:
¿Que no sirve mucho a partir de los 586? Un 586 son los PCs actuales...
No he dicho lo contrario. Pero como recordarás, en lugar de 586 Intel llamó a su procesador Pentium. Los otros fabricantes adoptaron también nombres propios como K5, K6, Cx5x86, etc. Pero allí está el problema de la función GetSystemInfo. Hasta los 486, es funcional. Pero los datos que podría utilizar de la estructura que devuelve (wProcessorArchitecture, wProcessorLevel, wProcessorRevision) ya no resultan útiles para diferenciar un Intel de un AMD, o un AMD de un Cyrix. Bueno y aunque no quisiera diferenciar la marca, si quisiera diferenciar un Pentium II de Pentium II Xeon, o uno de los primeros Celeron; un Athlon de un Opteron; un P4 de P4 m; los datos entregados, no me son de utilidad. Podemos informar sobre nuestro procesador con una cadena similar a esta: x86 Family 15 Model 2 Stepping 9, cadena fácilmente formada con los tres mencionados valores. Pero dicha cadena no me indica qué procesador específico estoy usando.
Podríamos mostrar candidez, y recolectar información de multiples procesadores para relacionarlos con esos valores. Pero, como Intel advierte, en la nota de soporte cs-001632;
Cita:
The family, model and stepping numbers do not directly translate to a specific processor, and should not be used as a tool to identify a specific processor.
Cita:
¿Usar ensamblador?
Además del cambio en el esquema de nombres, entre las nuevas instrucciones del procesador se introdujo CPUID, que nos sirve para obtener el fabricante cuando se llama a la instrucción con EAX en 0: GenuineIntel, CyrixInstead, AuthenticAMD, "UMC UMC UMC", RiseRiseRise y algunos otros. Luego, con EAX en 1 obtenemos Family, Model, Stepping y otras características del procesador. Con estos datos, y dependiendo de la cadena de identificación de fabricante, podemos decir con absoluta certeza de que procesador se trata (obviamente después de consultar las especificaciones de los distintos fabricantes) Notas de Aplicación 20734 de AMD y AP-485 de Intel.
Con la nueva serie de procesadores, el nombre del procesador estará condificado en el mismo procesador (o ya está). Utilizando CPUID en múltiples pases, podríamos obtener algo como "Intel® Pentium® Processor Extreme Edition" rápidamente.
  #5 (permalink)  
Antiguo 23/05/2005, 06:28
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Beakdan
No he dicho lo contrario. Pero como recordarás, en lugar de 586 Intel llamó a su procesador Pentium. Los otros fabricantes adoptaron también nombres propios como K5, K6, Cx5x86, etc. Pero allí está el problema de la función GetSystemInfo. Hasta los 486, es funcional. Pero los datos que podría utilizar de la estructura que devuelve (wProcessorArchitecture, wProcessorLevel, wProcessorRevision) ya no resultan útiles para diferenciar un Intel de un AMD, o un AMD de un Cyrix. Bueno y aunque no quisiera diferenciar la marca, si quisiera diferenciar un Pentium II de Pentium II Xeon, o uno de los primeros Celeron; un Athlon de un Opteron; un P4 de P4 m; los datos entregados, no me son de utilidad. Podemos informar sobre nuestro procesador con una cadena similar a esta: x86 Family 15 Model 2 Stepping 9, cadena fácilmente formada con los tres mencionados valores. Pero dicha cadena no me indica qué procesador específico estoy usando.
Podríamos mostrar candidez, y recolectar información de multiples procesadores para relacionarlos con esos valores. Pero, como Intel advierte, en la nota de soporte cs-001632;
Por supuesto que cada variación existente de procesadores no se puede ir relacionando... La función devuelve 386, 486, 586, 686... Que es lo estándar y para lo que se hizo (...) También podemos sacar con IsProcessorFeaturePresent las instrucciones que están habilitadas, más útil... Lo de obtener el nombre no es que sea tan útil, aparte de los cientos de ellos que hay...

Cita:
Además del cambio en el esquema de nombres, entre las nuevas instrucciones del procesador se introdujo CPUID, que nos sirve para obtener el fabricante cuando se llama a la instrucción con EAX en 0: GenuineIntel, CyrixInstead, AuthenticAMD, "UMC UMC UMC", RiseRiseRise y algunos otros. Luego, con EAX en 1 obtenemos Family, Model, Stepping y otras características del procesador. Con estos datos, y dependiendo de la cadena de identificación de fabricante, podemos decir con absoluta certeza de que procesador se trata (obviamente después de consultar las especificaciones de los distintos fabricantes) Notas de Aplicación 20734 de AMD y AP-485 de Intel.
Con la nueva serie de procesadores, el nombre del procesador estará condificado en el mismo procesador (o ya está). Utilizando CPUID en múltiples pases, podríamos obtener algo como "Intel® Pentium® Processor Extreme Edition" rápidamente.
Oh sí, entonces ve, le comentas como programar en asm, cómo crear una DLL y después que la llame desde VB...

Por ejemplo...
http://www.transmeta.com/crusoe_docs...UID_5-7-02.pdf


Decir que lo de obtenerlo por medio del registro no es una solución muy ortodoxa a mi parecer... (Algo así como obtenerlo de /proc/cpuinfo o con el comando uname con Linux.....)
  #6 (permalink)  
Antiguo 01/06/2005, 18:11
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Me pareció un ejercicio interesante obtener el nombre del procesador. No es que sea verdaderamente útil, pero no deja de ser interesante. Pero no hay información de muchos fabricantes, o resultaba insuficiente. Sin embargo las notas de aplicación de Intel y AMD, además de la nota de Transmeta que MaxExtreme compartió, me han servido para armar este programa: VB-ASM
El código ensamblador reside en la clase CProcessorInfo.cls, en forma de texto. Hubiera sido mejor incluirlo como recurso, pero para este ejemplo, así basta. No me he preocupado por optimizar el código ASM, puesto que no será llamado en bucles ni por aparear las instrucciones, ya que se trata de una aplicación simple.
Ah, y si alguien tiene un equipo con microprocesador de Transmeta, y decide usar este archivo, por favor, avísame de los resultados obtenidos.
Con las PC's con microprocesadores de Intel y AMD que tengo al alcance, los resultados fueron correctos por lo menos.
  #7 (permalink)  
Antiguo 02/06/2005, 07:16
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Beakdan
Me pareció un ejercicio interesante obtener el nombre del procesador. No es que sea verdaderamente útil, pero no deja de ser interesante. Pero no hay información de muchos fabricantes, o resultaba insuficiente. Sin embargo las notas de aplicación de Intel y AMD, además de la nota de Transmeta que MaxExtreme compartió, me han servido para armar este programa: VB-ASM
El código ensamblador reside en la clase CProcessorInfo.cls, en forma de texto. Hubiera sido mejor incluirlo como recurso, pero para este ejemplo, así basta. No me he preocupado por optimizar el código ASM, puesto que no será llamado en bucles ni por aparear las instrucciones, ya que se trata de una aplicación simple.
Ah, y si alguien tiene un equipo con microprocesador de Transmeta, y decide usar este archivo, por favor, avísame de los resultados obtenidos.
Con las PC's con microprocesadores de Intel y AMD que tengo al alcance, los resultados fueron correctos por lo menos.
Ju, cachonda forma de insertar código ASM.

Pero me extraña lo siguiente, he mirado el código ASM y me encuentro con:
Código:
RiseRiseRise
UMC UMC UMC
NexGenDriven
CentaurHauls
CyrixInstead
GenuineTMx86
AuthenticAMD
GenuineIntel
Original OEM processor
OverDrive(R) processor
Dual processor
Intel reserved
Genuine Intel(R) Celeron (R) processor
Genuine Intel(R) Pentium(R) III processor
Genuine Intel(R) Pentium(R) III Xeon(TM) processor
Genuine Intel(R) Pentium(R) III processor
Genuine Mobile Intel(R) Pentium(R) III Processor-M
Genuine Mobile Intel(R) Celeron(R) processor
Genuine Intel(R) Pentium(R) 4 processor
Genuine Intel(R) Pentium(R) 4 processor
Genuine Intel(R) Celeron(R) processor
Genuine Intel(R) Xeon(TM) processor
Genuine Intel(R) Xeon(TM) processor MP
Genuine Mobile Intel(R) Pentium(R) 4 Processor-M
Genuine Mobile Intel(R) Celeron(R) processor
Genuine Intel(R) processor
Son los tipos de procesador, junto con las familias y familias extendidas, pero solo de Intel éstas dos últimas... Deberías hacerlo de todos los que hay (AMD por lo menos) ;)

¿Has hecho el código ASM entero tú? No me he detenido a mirarlo, pero _creo_ que sólo funciona con las cadenas introducidas por indicaciones como esta...

Código:
mov esi, 000006F0
(...)

que apuntan a las diferentes cadenas
(Relativas al inicio de la función, claro está)

y por tanto me extraña que preguntes si funciona en otros ordenadores... En teoría no puede porque no tiene las cadenas.

Última edición por MaxExtreme; 02/06/2005 a las 07:43
  #8 (permalink)  
Antiguo 02/06/2005, 08:13
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Cita:
me extraña que preguntes si funciona en otros ordenadores... En teoría no puede porque no tiene las cadenas.
Mhh... Intel es un caso especial... Aunque la mayor documentación que encontré es de Intel precisamente, resulta que no todos sus procesadores tienen soporte para las funciones CPUID extendidas, con las que puedo obtener el nombre del procesador mismo (80000002 - 80000004). Para esos casos, tienen un identificador BrandID, que puede ser relacionado con una tabla de correspondencia para 13 nombres de procesadores. Es por eso que sólo para Intel tengo esa tabla.
Para AMD y Transmeta, las cosas son más sencillas. Siempre puedo obtener los 48 caracteres del nombre del procesador con las funciones extendidas.
No pensaba incluir los nombres de Intel, puesto que ocupan más espacio que el código de identificación mismo. Pero como suelen ser de los más usados, no quería que algún procesador se quedará en blanco...
Si pruebas el código en un procesador Intel relativemente reciente (un P4 HyperThreading por ejemplo), verás que no te devuelve los textos en la tabla de búsqueda. En este equipo por ejemplo, devuelve "Intel(R) Pentium(R) 4 CPU 2.40GHz"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:38.