Leyendo algunos posts que llegan a mi cuenta encontré este interesante artículo en otro blog, sobre como realizar aplicaciones que aprovechen las enormes caracteristicas del google maps. Articulo aqui.
Posteos de artículos y noticias importantes del mundo de sistemas, y muy esporádicamente anotaciones personales.
miércoles, octubre 10, 2007
Aprendiendo a Utilizar Google Maps (Primera Entrega)
Leyendo algunos posts que llegan a mi cuenta encontré este interesante artículo en otro blog, sobre como realizar aplicaciones que aprovechen las enormes caracteristicas del google maps. Articulo aqui.
jueves, octubre 04, 2007
Crear un virtual directory con .net
Es relativamente fácil implementar una rutina para crear directorios virtuales desde codigo, aqui el post original
Private Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/1/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = False
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
VDir.Properties("DefaultDoc").Item(0) = "default.htm,default.aspx,default.asp"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End If
End Sub
Private Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/1/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = False
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
VDir.Properties("DefaultDoc").Item(0) = "default.htm,default.aspx,default.asp"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End If
End Sub
miércoles, octubre 03, 2007
Util, seleccionar un registro aleatoriamente
A veces, necesitamos obtener información aleatoria de una Base de Datos por diferentes razones, aquí unas rutinas muy útiles para cuando queremos generar información de prueba.
articulo original aqui
-------------------------------------------------------------------------------
Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Thanks Tim
Select a random record with Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
articulo original aqui
-------------------------------------------------------------------------------
Select a random row with MySQL:
SELECT column FROM table
ORDER BY RAND()
LIMIT 1
Select a random row with PostgreSQL:
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 1
Select a random row with Microsoft SQL Server:
SELECT TOP 1 column FROM table
ORDER BY NEWID()
Select a random row with IBM DB2
SELECT column, RAND() as IDX
FROM table
ORDER BY IDX FETCH FIRST 1 ROWS ONLY
Thanks Tim
Select a random record with Oracle:
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 1
sábado, septiembre 29, 2007
Programadores del Kernel de Linux
Como información curiosa, una fotografia del cuerpo de programadores del kernel de linux, incluyendo por supuesto al pinguino fundador Linus Torvalds.
enlace completo aqui
viernes, agosto 31, 2007
HOWTO: Compress Virtual PC virtual hard disks (.VHDs)
Para los que utilizan Vmware es un poco mas sencillo pero si tenés alguna instalación con Virtual PC, éstas instrucciones te van a ser muy útiles, casi recuperé la mitad de mi disco duro.
el artículo aquí
lunes, agosto 27, 2007
Aventura en España
Debido a compromisos de trabajo tuve la oportunidad de conocer Madrid, por supuesto una ciudad hermosa y grandísima. Tiene atractivos turísticos historicos como el Palacio Real y modernos como el Estadio Santiago Bernabeu. Además de los atractivos turísticos qué me gustó y que no, pues me gusto que da confianza salir de noche, es bastante segura, el metro de Madrid es una maravilla, podés ir de una esquina a otra de la ciudad inmediatamente, lo que no me gustó pues los precios, aunque no es algo exclusivo de Madrid sino de Europa, para nosotros los Latinamericanos que estamos acostumbrados a un nivel de vida mucho mas barato aquí, todo nos parece caro, yo desayunaba un pan tostado con mermelada, cafe y zumo de naranja y eso me costaba €8 son como $10, aquí en Guatemala eso me cuesta unos Q15 que somo como €1.5 casi $2, una coca cola en una tienda de la calle €3 que son como Q30.
martes, agosto 14, 2007
Para que practiqués
Si querés practicar un poco, éste programa tiene algunas funciones muy buenas, un listado de 8000 palabras con su traducción al ingles y su pronunciación respectiva, tiene examenes tanto de traducción textual como de comprensión auditiva, ademas se puede dejar corriendo como un widget mostrando palabras y su traducción, sin darte cuenta te las vas aprendiendo. En resumen es un programita sencillo para enriquecer el vocabulario en ingles y mejorar la comprensión, es feo pero muy útil.
enlace http://wordsgalore.com/
jueves, agosto 02, 2007
Numero a Letras en SQL

Mas de alguna vez hemos tenido la necesidad de pasar de numeros a letras, y hay una gran cantidad de rutinas muy eficientes para hacerlo, tanto para delphi, .NET, etc. Aquí una no tan común en SQL. Cortesía de Hugo.
CREATE FUNCTION [dbo].[Num2Let]
(
@Numero NUMERIC(20,2)
)
RETURNS varchar(2000)
AS
BEGIN
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Unidades
SELECT @lcCadena =
CASE
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'Uno ' + @lcCadena
WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'Un ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'Dos ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'Tres ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'Cuatro ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'Cinco ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'Seis ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'Siete ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'Ocho ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'Nueve ' + @lcCadena
ELSE @lcCadena
END
-- decenas
SELECT @lcCadena =
CASE
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'Diez '
WHEN 1 THEN 'Once '
WHEN 2 THEN 'Doce '
WHEN 3 THEN 'Trece '
WHEN 4 THEN 'Catorce '
WHEN 5 THEN 'Quince '
ELSE 'Dieci' + @lcCadena
END
WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'Veinte ' + @lcCadena
WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'Veinti' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'Treinta ' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'Treinta y ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'Cuarenta ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'Cuarenta y ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'Cincuenta ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'Cincuenta y ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'Sesenta ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'Sesenta y ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'Setenta ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'Setenta Y ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'Ochenta ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'Ochenta y ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'Noventa ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'Noventa y ' + @lcCadena
ELSE @lcCadena
END
-- centenas
SELECT @lcCadena =
CASE
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'Cien ' + @lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN 'Ciento ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'Doscientos ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'Trescientos ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'Cuatrocientos ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'Quinientos ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'Seiscientos ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'Setecientos ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'Ochocientos ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'Novecientos ' + @lcCadena
ELSE @lcCadena
END
--Terna
SELECT @lcCadena =
CASE
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + ' Millon '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena + ' Millones '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN @lcCadena + ' Mil Millones '
ELSE ''
END
--Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END
IF @lnTerna = 1
SELECT @lcRetorno = 'Cero'
RETURN RTRIM(@lcRetorno) + ' Con ' + LTRIM(STR(@lnFraccion,2)) + '/100'
END
viernes, julio 27, 2007
miércoles, julio 18, 2007
configurar squid en 5 minutos
Probablemente como yo, tuvieron alguna vez la necesidad de montar una pequeña red con recursos compartidos, todos sabemos que si se deja la salida a Internet libre, cualquiera llega pone un p2p y nos mata a todos, y obviamente soluciones como un servidor necesitan máquinas decentes si utilizamos Windows, la solución perfecta es squid ya que con una 486 que usábamos de banca podemos instalar un servidor de Internet. Aunque el titulo dice 5 minutos a mi me llevó como 3 horas ya que yo uso kubuntu y el artículo es para Red Hat, pero es cuestión de afinamiento.
Artículo aqui
PD. squid es un proxy, open source.
viernes, julio 13, 2007
jueves, julio 05, 2007
Comparacion Linux
Una pagina donde se pueden comparar entre si muchas las distribuciones de Linux, calificándolas en base a ciertas pruebas tales como facilidad de instalación, consumo de recursos, estabilidad, etc.
enlace aqui
lunes, junio 25, 2007
Cómo enviar correo electrónico por código usando cuentas de GMail
Enviar correos utilizando .NET es muy fácil sin embargo para utilizar la cuenta de Gmail se necesita un par de configuraciones adicionales como lo son el uso de SSL y un puerto diferente para la conexión
articulo original aqui
using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
public class EjemploCorreoGMail
{
public static void Main()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add("destinatario@dominio.com");
msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
msg.Subject = "Prueba de correo a GMail";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "Cuerpo del mensaje";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
//Aquí es donde se hace lo especial
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
try
{
client.Send(msg);
}
catch (System.Net.Mail.SmtpException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
articulo original aqui
using System;
using System.Collections;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
public class EjemploCorreoGMail
{
public static void Main()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add("destinatario@dominio.com");
msg.From = new MailAddress("micuenta@gmail.com", "Tu Nombre", System.Text.Encoding.UTF8);
msg.Subject = "Prueba de correo a GMail";
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = "Cuerpo del mensaje";
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
//Aquí es donde se hace lo especial
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("micuenta@gmail.com", "miclave");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true; //Esto es para que vaya a través de SSL que es obligatorio con GMail
try
{
client.Send(msg);
}
catch (System.Net.Mail.SmtpException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
jueves, junio 21, 2007
Aventura en Cuba
Bueno se que muchos al igual que yo se preguntan como es Cuba en realidad, quien miente? y luego de una semana en La Habana puedo contar lo que vi y lo que escuche, no quiero opinar ni decir si pienso que algo es bueno o malo simplemente traslado lo que viví.
1) La moneda para los turistas se llama peso cubano convertible, que esta al 1x1 con el Dolar pero te multan con un impuesto del 10% y otro recargo que no recuerdo, total por USD$100 te dan 80CUC, solo con esto ya todo sale un 20% mas caro, hay que ir con Euros, sale mejor.
2) La moneda para el pueblo cubano y con el cual pagan los sueldos se llama peso (solamente)
3) Todo se debe pagar en CUC en ningún lugar aceptan Dolares, Tarjetas o Euros.
4) Los cubanos no pueden subir a los hoteles, ni entrar a los sitios turísticos como Baradero, tienen prohibido "molestar" a los turistas
5) Se puede caminar a media noche por cualquier lugar, sin pena alguna, es increíblemente seguro
6) La educación y la salud son gratis y obligatorias.
7) también el servicio militar es obligatorio y es por 5 años
8) Es cierto hay médicos, ingenieros etc, como taxistas y meseros. Ya que la educación es accesible a todos, pero no hay suficiente oferta de trabajo.
9) El Sueldo mensual de un Medico es de USD$35
10) El estado brinda servicios básicos, como la comida, la educación y la salud, pero con su sueldo deben comprar el resto
11) El producto nacional es muy barato, digamos una pizza mediana en un restaurante cuesta 3CUC, sin embargo una gaseosa importada cuesta 2CUC, es decir La Habana esta llena de restaurantes pero un cubano con un sueldo de USD$35 no puede sentarse y comerse una pizza que cuesta como USD$5, son para los turistas
12) No hay trafico, casi no hay carros, y la mitad de los pocos carros que hay son modelo tipo '40, '50 por allí, pero muy bien cuidados.
13) Existen lugares turísticos como la Fortaleza de El Morro, El Malecón, etc. que vale la pena visitar
14) El agua potable es purificada
15) No hay Internet, en Cuba es muy caro cuesta USD$600 mensuales una linea dedicada de 64Kb, si 64Kb.
16) Que dicen los cubanos? pues algunos estan contentos con esa forma de vida, pero la mayoría quieren mas libertades
1000) bueno no me aguanté, que creo que es lo mejor de cuba? el nivel de educación, salud y seguridad, comparado con el nuestro está por las nubes. Que es lo peor? la falta de libertades.
martes, junio 19, 2007
Buscador de codigo fuente
jueves, junio 07, 2007
Como funciona google internamente?
En 1997 los creadores de Google los estudiantes Larry Page y Sergey Brin realizaron su tesis doctoral donde planteaban las bases para lo que mas tarde se convertiría en Google.
Una traducción al español de la tesis aqui
El articulo completo del traductor aqui
(por cierto Google es ya la marca mas valiosa del mundo con un valor en Abril del 2007 de 66.000 millones de dólares, por encima de Microsoft, Coca Cola y otros)
La nueva version de Qt jambi
lunes, junio 04, 2007
Google ya reconoce rostros
Que significa esto? en pocas palabras el resultado final dentro de poco tiempo sera que si buscas "Ronaldo", google va a reconoces todas las imagenes donde apareza su rostro.... !!!!
la noticia completa aqui
una busqueda de prueba aqui
(esta busqueda dice muestreme todas las imagenes que tengan un rostro cualquiera)
la noticia completa aqui
una busqueda de prueba aqui
(esta busqueda dice muestreme todas las imagenes que tengan un rostro cualquiera)
martes, mayo 29, 2007
Aventura en Bogota
Tuve la oportunidad recientemente de conocer la ciudad de Bogota, y debo decir que es un lugar precioso, el centro de Bogota es muy antiguo pero con construcciones bien restauradas, y la ciudad es increiblemente limpia, fui por motivos de trabajo lo que no me permitio conocer mucho, pero lo poco que pude conocer me gusto. Me sigo quedando con la Antigua pero con Bogota si hay competencia. Por cierto la idea del trasmetro en Guatemala fue tomado del Transmilenio de Bogota, eso si, como se puede ver en la fotografia hay una gran diferencia. Por cierto algo que olvidaba mencionar, casi todas las construcciones e inclusive los edificios son de ladrillo, entonces la ciudad se ve completamente naranja......
viernes, mayo 18, 2007
Como obtener la informacion del Disco Duro
Muchas veces nos es útil obtener información del Disco Duro por ejemplo para el control de licencias, una vez obtenido ésto podemos encriptar o manipular esa información para que nos sirva de comprobación de piratería :)
articulo original aqui
Se hace una Clase DiscoDuro.vb que será nuestra clase especializada
Public Class DiscoDuro
Private _Modelo As String
Private _Tipo As String
Private _Serial As String
'Propiedad para Manejar el Modelo del Disco
Public Property Modelo() As String
Get
'Retorna el Modelo del Diso Duro
Return _Modelo
End Get
Set(ByVal value As String)
'Asigna el Modelo del Disco Duro
_Modelo = value
End Set
End Property
'Propiedad para Manejar el Tipo del Disco
Public Property Tipo() As String
Get
'Retorna el Tipo del Diso Duro
Return _Tipo
End Get
Set(ByVal value As String)
'Asigna el Tipo del Disco Duro
_Tipo = value
End Set
End Property
'Propiedad para Manejar el Serial del Disco
Public Property Serial() As String
Get
'Retorna el Serial del Diso Duro
Return _Serial
End Get
Set(ByVal value As String)
'Asigna el Serial del Disco Duro
_Serial = value
End Set
End Property
End Class
Y el codigo para utilizarla seria asi
'Importamos el namespace System.Management para Accesar al Windows Management Instrumentation
Imports System.Management
Public Class Form1
'Declaramos una coleccion del tipo ArrayList
Dim hdLista As New ArrayList
'En el evento Load escribiremos el codigo para obtener la informacion
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'Creamos ahora un objeto ManagementObjectSearcher y agregaremos la cadena de seleccion
'para obtener de la clase Win32_DiskDrive
' la Informacion del modelo y el tipo del Disco Duro
Dim BuscardorWMI As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'creamos un objeto del tipo DiscoDuro
Dim Hd As New DiscoDuro
'asignamos el valor del Modelo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Modelo = wmi_HD("Model").ToString
'asignamos el valor del Tipo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Tipo = wmi_HD("InterfaceType").ToString
'y Finalmente agregamos dicho objeto Hd al ArrayList que creamos
hdLista.Add(Hd)
Next
'Creamos ahora una nueva instancia del objeto que habiamos
' creado del tipo ManagementObjectSearcher
'y agregaremos la cadena de seleccion para obtener de la clase Win32_PhysicalMedia
' los seriales internos
'de los Discos Duros que hallamos encontrado en el ciclo anterior
BuscardorWMI = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
'Deifinimos a i como un contador para manejar el ArrayList
Dim i As Integer = 0
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'Indica continuar con el ciclo mientras que i sea menor que
' la cantidad de discos encontrados
If i < hdLista.Count - 1 Then
'creamos un nuevo objeto del Tipo DiscoDuro para ir almacenando alli
'cada uno de los discos duros encontrados
Dim hd As New DiscoDuro
'asignamos el valor acutalde la lista en el objeto HD
hd = hdLista(i)
'debemos verificar que el valor del campo "SerialNumber" obtenido en la busqueda
'no sea un valor nulo de lo contrario
'la aplicacion arrojará una excepcion
If wmi_HD("SerialNumber").ToString = Nothing Then
'en el caso de que se halla encontrado el serial la propiedad "Serial" del
' objeto hd se guardará los siguiente:
hd.Serial = "No se Pudo Obtener El Serial"
Else
'en el caso contrario almacenaremos el numero de serial interno
'del disco duro en la propiedad "Serial" del objeto hd
hd.Serial = wmi_HD("SerialNumber").ToString
End If
'incrementando i
i += 1
End If
Next
'aqui coloco una manera de mostrarlo ustedes pueden escoger la que mejor les paresca
For Each hd As DiscoDuro In hdLista
'por cuestiones de tiempo yo escogí usar un MessageBox
MessageBox.Show(hd.Modelo & vbCrLf & hd.Tipo & vbCrLf & hd.Serial)
Next
End Sub
End Class
articulo original aqui
Se hace una Clase DiscoDuro.vb que será nuestra clase especializada
Public Class DiscoDuro
Private _Modelo As String
Private _Tipo As String
Private _Serial As String
'Propiedad para Manejar el Modelo del Disco
Public Property Modelo() As String
Get
'Retorna el Modelo del Diso Duro
Return _Modelo
End Get
Set(ByVal value As String)
'Asigna el Modelo del Disco Duro
_Modelo = value
End Set
End Property
'Propiedad para Manejar el Tipo del Disco
Public Property Tipo() As String
Get
'Retorna el Tipo del Diso Duro
Return _Tipo
End Get
Set(ByVal value As String)
'Asigna el Tipo del Disco Duro
_Tipo = value
End Set
End Property
'Propiedad para Manejar el Serial del Disco
Public Property Serial() As String
Get
'Retorna el Serial del Diso Duro
Return _Serial
End Get
Set(ByVal value As String)
'Asigna el Serial del Disco Duro
_Serial = value
End Set
End Property
End Class
Y el codigo para utilizarla seria asi
'Importamos el namespace System.Management para Accesar al Windows Management Instrumentation
Imports System.Management
Public Class Form1
'Declaramos una coleccion del tipo ArrayList
Dim hdLista As New ArrayList
'En el evento Load escribiremos el codigo para obtener la informacion
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
'Creamos ahora un objeto ManagementObjectSearcher y agregaremos la cadena de seleccion
'para obtener de la clase Win32_DiskDrive
' la Informacion del modelo y el tipo del Disco Duro
Dim BuscardorWMI As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'creamos un objeto del tipo DiscoDuro
Dim Hd As New DiscoDuro
'asignamos el valor del Modelo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Modelo = wmi_HD("Model").ToString
'asignamos el valor del Tipo obtenido de la consulta
' en la propiedad Modelo del objeto Hd
Hd.Tipo = wmi_HD("InterfaceType").ToString
'y Finalmente agregamos dicho objeto Hd al ArrayList que creamos
hdLista.Add(Hd)
Next
'Creamos ahora una nueva instancia del objeto que habiamos
' creado del tipo ManagementObjectSearcher
'y agregaremos la cadena de seleccion para obtener de la clase Win32_PhysicalMedia
' los seriales internos
'de los Discos Duros que hallamos encontrado en el ciclo anterior
BuscardorWMI = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")
'Deifinimos a i como un contador para manejar el ArrayList
Dim i As Integer = 0
For Each wmi_HD As ManagementObject In BuscardorWMI.Get
'Indica continuar con el ciclo mientras que i sea menor que
' la cantidad de discos encontrados
If i < hdLista.Count - 1 Then
'creamos un nuevo objeto del Tipo DiscoDuro para ir almacenando alli
'cada uno de los discos duros encontrados
Dim hd As New DiscoDuro
'asignamos el valor acutalde la lista en el objeto HD
hd = hdLista(i)
'debemos verificar que el valor del campo "SerialNumber" obtenido en la busqueda
'no sea un valor nulo de lo contrario
'la aplicacion arrojará una excepcion
If wmi_HD("SerialNumber").ToString = Nothing Then
'en el caso de que se halla encontrado el serial la propiedad "Serial" del
' objeto hd se guardará los siguiente:
hd.Serial = "No se Pudo Obtener El Serial"
Else
'en el caso contrario almacenaremos el numero de serial interno
'del disco duro en la propiedad "Serial" del objeto hd
hd.Serial = wmi_HD("SerialNumber").ToString
End If
'incrementando i
i += 1
End If
Next
'aqui coloco una manera de mostrarlo ustedes pueden escoger la que mejor les paresca
For Each hd As DiscoDuro In hdLista
'por cuestiones de tiempo yo escogí usar un MessageBox
MessageBox.Show(hd.Modelo & vbCrLf & hd.Tipo & vbCrLf & hd.Serial)
Next
End Sub
End Class
Suscribirse a:
Entradas (Atom)

