Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alexandremanowar

Capturar Serial com vb.net desktop

Recommended Posts

E ae pessoal beleza

 

Pesquisando na net desenvolvi um aplicativo desktop que captura o número de série do hd, o aplicativo funciona bem desde que eu não tenha apenas um disco na minha máquina se eu tiver qualquer outro disco ele pega o número de série de outro, por exemplo se coloco um pendrive ele pega o serial do pendrive se tiro o pendriove ele pega o serial do hd novamente.

Eu preciso corrigir isso para o programa pegar o serial apenas do disco que esta o sistema operacional! Alguém saberia como corrigir? Olha o código:

 

Private Sub btnSerie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSerie.Click

		
		''captura a série do hd
		Dim searcher2 As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
		Dim hdCollection2 As New ArrayList()
		Dim Serial As String = ""
		Dim Serial2 As String = ""

		For Each wmi_HD As ManagementObject In searcher2.[Get]()


			Dim hd As New HardDrive()

			hd.Model = wmi_HD("Model").ToString()

			hd.Type = wmi_HD("InterfaceType").ToString()


			hdCollection2.Add(hd)
		Next


		searcher2 = New ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia")

		Dim i As Integer = 0

		For Each wmi_HD As ManagementObject In searcher2.[Get]()

			Dim hd As HardDrive = DirectCast(hdCollection2(i), HardDrive)



			'Pegando o Serial

			If wmi_HD("SerialNumber") Is Nothing Then
				hd.SerialNo = "None"
				Serial = "Não consta"
			Else
				hd.SerialNo = wmi_HD("SerialNumber").ToString()
				Serial = wmi_HD("SerialNumber").ToString()
				
			End If


			i += 1
		Next


			  Label7.Text = Serial




	  
	End Sub

Acredito que um dos problemas esta nessa linha:

Dim searcher2 As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")

pois é um select que varrre todos os drivers que existir foi a única forma que achei de fazer, logo ele deve estar me mostrando o serial do último disco que ele acha, preciso que ele me passe o serial apenas do disco que esta o sistema operacional, alguém sabe corrigir?

Abaixo segue as class que esse código usa:

 

Class HardDrive

Class HardDrive
	Private m_model As String = Nothing
	Private m_type As String = Nothing
	Private m_serialNo As String = Nothing
	Public Property Model() As String
		Get
			Return m_model
		End Get
		Set(ByVal value As String)
			m_model = value
		End Set
	End Property
	Public Property Type() As String
		Get
			Return m_type
		End Get
		Set(ByVal value As String)
			m_type = value
		End Set
	End Property
	Public Property SerialNo() As String
		Get
			Return m_serialNo
		End Get
		Set(ByVal value As String)
			m_serialNo = value
		End Set
	End Property
End Class

Me ajudem por favor!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Windows Applications

 

Veja alguma particularidade do HD Principal para tentar fazer um where, veja se isso é possível.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae beleza

 

Cara pesquisei na API do .net e não achei nada que indique o hd principal isolado, eu pesquidei nesses links:

 

http://msdn.microsoft.com/en-us/library/sy...ses(VS.71).aspx

 

http://msdn.microsoft.com/en-us/library/aa329113(VS.71).aspx

 

 

usei algumas opções como Win32_LogicalDisk, VolumeSerialNumber, Win32_DiskDrive mas não consegui nenhum resultado, continuo na mesma do código que deixei acima se tiver apenas o hd ele me da o serial se espeto um pendrive ou qualquer outro dispositivo de armazenamento não funfa! Alguém tem idéia de onde posso estar errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Método para mostrar HD da máquina

 

Add a referencia Microsoft Scripting Runtime

 

Imports Scripting

Public Sub mostraHD()

       'Para pegar o número de série de um HD utilize o seguinte código:
       Dim lSerial As Long
       Dim fso As New FileSystemObject, drvDrive As Drive

       'Pega as informações do drive c:
       drvDrive = fso.GetDrive(Left(fso.GetDriveName("c:\"), 2))

       'Pega o número de série do HD
       lSerial = drvDrive.SerialNumber

       MessageBox.Show(lSerial.ToString)

   End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Oswaldo Machado, bem vindo ao iMasters.

 

Agradecemos por compartilhar seu conhecimento conosco. Continue colaborando em tópicos mais recentes.

 

Atenciosamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.