• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Cocolin

Verificar hardware

12 mensagens neste tópico

Boas.

Tou aqui a fazer uma aplicação que contem uma listbox com a system info.

O meu problema é: como vou buscar info sobre o cpu,grafica, etc?

para a RAM e nome do SO usei o "My.Computer.Info".

Para o resto do hardware... já tive a procurar... e aparece sempre algo a usar o "System.management"

mas eu não sei pk não consigo meter isso a funcionar..o gajo da-me sempre erros.

Portanto gostava aqui duma ajudinha.

obrigado

EDIT:e já agora.. outra pergunta rápida... la no programa estou a usar um StreamReader no form_load.

E depois no form_closing estou a usar um StreamWriter no mesmo ficheiro. Só que o gajo dá-me erro a dizer que o ficheiro está a ser utilizado e não pode ser escrito... eu já tentei fazer " .Close()" depois do streamreader, mas não deu nada.

alguem sabe como fazer "largar" o ficheiro?

thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Usas WMI para obteres essa informação. Exemplo:

http://www.aspfree.com/c/a/VB.NET/Getting-Hardware-Information-Using-Visual-BasicNET-and-VBScript/

Mas existem muito mais exemplos se procurares.

EDIT:e já agora.. outra pergunta rápida... la no programa estou a usar um StreamReader no form_load.

E depois no form_closing estou a usar um StreamWriter no mesmo ficheiro. Só que o gajo dá-me erro a dizer que o ficheiro está a ser utilizado e não pode ser escrito... eu já tentei fazer " .Close()" depois do streamreader, mas não deu nada.

alguem sabe como fazer "largar" o ficheiro?

thanks

Tens de mostrar o código que tens.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quanto ao 1º ...

eu quando meto "Dim searcher As New ManagementObjectSearcher" o gajo diz-me "Type 'ManagementObjectSearcher' is not defined." .

mas eu já fiz "Import System.Management"...

não sei o que tá mal :S

quanto ao 2º...

Este é o 1ºform:

  Private Sub Form1_Load(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles MyBase.Load
        ' caso o ficheiro não exista... cria-o
        Dim f As New IO.FileInfo(My.Computer.FileSystem.CurrentDirectory & "\" & "config.ini")
        If f.Exists = False Then
            IO.File.Create(f.ToString)
        ' caso ele exista, cria um StreamReader e lê a 1ª linha do file
        Else
            Dim sr As StreamReader = New StreamReader(f.ToString)
            Dim linhaX As String
            linhaX = sr.ReadLine()
            TextBox1.Text = linhaX
       'aqui é onde ele é suposto "largar" o ficheiro, mas não o faz            
            sr.Close()
            sr.Dispose()
        End If
    End Sub

Este é o 2º form...onde me dá o erro:

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e_
As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
        ' é aqui que me dá erro... a criar o StreamWriter (o erro tá no final)
        Dim sw As StreamWriter = New StreamWriter_
(My.Computer.FileSystem.CurrentDirectory & "\" & "config.ini")
        sw.WriteLine(TextBox1.Text)
        sw.Close()
        sw.Dispose()
    End Sub

Erro -> The process cannot access the file
'C:\(...)\Desktop\WindowsApplication1\WindowsApplication1\bin\Debug\config.ini'
because it is being used by another process.

mas não era suposto o gajo "larga-lo" com o .close() e/ou .Dispose() ? :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No 1º form tens que por

f=nothing
sr=nothing

Acho que o nothing funciona melhor do que o dispose.

Deves de ter qualquer coisa esquecida algures no programa porque ele continua a precisar do ficheiro..

Procura bem. quanto o WMI Managemente, pus um tópico aqui um dia destes.

Explica tudo e funciona bem..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dotinho

obrigado pela resposta...

já fiz isso e deu...

mas não, não tinha mais nada a usar o ficheiro senão aqueles dois eventos...

quanto ao WMI Management ainda não consegui meter aquilo a funcionar pelo link que o jpaulino me deu.

mas pronto.. amanha continuo a averiguar... por hoje já chega... :)

obrigado ^^,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha vais ás opções do projecto e adicionas a referenia "System.Management".

Depois declaras

Imports System.Management

Depois fazes uma form com duas textboxs e um ricthtextbox e um chekcdbox.

Em que uma textbox faz de scope e outra fiz de query, em que queryes são identicos ao SQL.

Depois num evento de botão fazs o seguinte:

Try
            Dim searcher As New Management.ManagementObjectSearcher(TextBox1.Text, TextBox2.Text) 'Aqui inicia a instancia de procurar ao declara o scope e os querys.
            RTB1.Text = ""
            For Each Obj As ManagementObject In searcher.Get() ' Aqui executa o query e vai mostar tudo na ricthtextbox.
                Label2.Text = Obj.Properties.Count 'Numero de propriedades
                Dim en = Obj.Properties.GetEnumerator
                While en.MoveNext
                    Try
                        RTB1.Text += en.Current.Name & vbTab & vbTab &  en.Current.Value.ToString & vbNewLine 'Escreve nome da propriedede e Valor da mesma
                    Catch ex As Exception
                        If CheckBox1.Checked Then
                            RTB1.Text += en.Current.Name & vbTab & "  erro >>  " & ex.Message & vbNewLine 'Se ligares a chekedbox, irá mostrar as que dão erro e nao tem valor.
                        End If
                    End Try
                End While
                RTB1.Text += "===================" & vbNewLine & vbNewLine
            Next

        Catch ex As ManagementException
            MessageBox.Show(ex.Message)
        End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Desde já obrigado pelas respostas.

Epá, eu já ando farto de procurar. e já tentei utilizar os exemplos que me deram, mas sinceramente não percebo nada daquilo. Já tenho aqui montes de paginas do MSDN com os varios tipos de classes de "Win32_ * "mas eu não sei usar nada daquilo!

Será que alguem tem paciencia pa me explicar?

não me dêem um exemplo de codigo como o Dotinho (não é que seja mau, mas é que eu fico a perceber o mesmo =x )

O que eu quero é uma simples coisita que me adicione uma linha numa listbox a dizer o CPU, tipo: "Intel Pentium4 3.40 GHz"

ora eu já sei que tenho de usar a "Win32_Processor", agora não sei é fazer nada do resto.

já tentei editar o codigo de montes de exemplos que vi, mas dá-me sempre erros =x

portanto, se alguem tiver paciencia,ficaria muito agradecido.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde mais uma vez. ;)

ora bem, muito obrigado a todos.

Já consegui meter isto a funcionar.

Duma maneira muito mais basica que todos voces me indicaram/que os exemplos que vi, mas consegui :)

Fiz simplesmente assim:

   Dim search4 As New ManagementObjectSearcher("SELECT * FROM Win32_Processor")
        Dim info4 As ManagementObject

        For Each info4 In search4.Get()
            ListBox2.Items.Add("CPU: " & info4("Name").ToString)
        Next

e funciona, portanto, chega-me :) xD

muito obrigado a todos pela ajuda. ainda tendo conseguido sozinho, sem as vossas respostas não tinha lá chegado.

Cumprimentos. ^^,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa estar a fazer Triple post  :-[

mas não queria tar a abrir outro tópico  desnecessariamente.

queria saber só uma cena.

eu tenho um ficheiro que já tens strings escritas (nomeadamente, "[hardware:]" ; "[software:]" )

é possivel com o StreamWriter/Reader, eu ler a string no ficheiro e começar a escrever algo a partir daí?

o meu objectivo é guardar informação após o "[software:]" ou "[hardware:]" dependendo do tipo de informação que seja.

por isso é que preciso de ler a string, e começar a escrever a partir dali.

é possivel?

obrigado e boa tarde

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É claro jovem, olha para o lers, tens várias maneiras:

  Dim sr As New IO.StreamReader("C:\file.txt")
        Dim s As String : Dim i As Integer : Dim c(512) As Char : Dim b As Boolean

        i = sr.Read             'Le caracter a caracter, e dvolve um inteiro

        sr.ReadBlock(c, 0, 512) 'Le um bloco para um array de char

        s = sr.ReadLine         'Le linha a linha

        s = sr.ReadToEnd        'Le tudo ate ao fim

        b = sr.EndOfStream      'Aqui indica-te quando chegas ao fim do ficheiro

        sr.Close()

Agora para scerver é muito simples, ou é quase igual..

   Dim srr As New IO.StreamWriter("C:\file.txt", True)  'Em que True para adicionar ao ficheiro, e que False Escreve-o de novo, ou seja, não adiciona.
        Dim wc As Char : Dim ws As String = ""

        srr.Write(wc)       'Escerves um caracter

        srr.Write(ws)       'Escreves uma string

        srr.WriteLine(ws)   'Escreves uma string, e ele 
        'atutomaticamente vai incrementando as linhas

        srr.Close()

Isto é o que mais uso, se não chegar, podems dizer-te mais alguma coisa..

Cmps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora bons dias.

Era para dizer a todos os que perderam um tempinho comigo - muito obrigado.

já terminei o que queria. agora novos projectos virão.

mais uma vez obrigado a todos. ^^,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora