VB.NET - Perguntas e respostas básicas


Hoje vamos responder algumas perguntas frequentes relacionadas ao VB .NET.

1  Como posso executar outra aplicação EXE a partir de minha aplicação VB.NET ?

Dim proc As New Process()
proc.StartInfo.FileName = "Calc.exe"
proc.StartInfo.Arguments = ""
proc.Start() 

2  Como posso obter uma relação de todos os processos rodando no meu sistema ?   

    Dim p As Process
    For Each p In Process.GetProcesses
        ListBox1.Items.Add(p)
    Next p

3  Como determinar o sistema operacional atual ?   

 Dim versaoText As String = Environment.OSVersion.Version.ToString()

 MessageBox.Show(" Versão do sistema operacional : " & versaoText, "Versão SO", _ 
                 MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)

4  Como obter todos os IPs para a minha máquina local ?   

   Imports System.Net
   ...
   
   Dim s As String = ""
   Dim listaIPs As System.Net.IPAddress() = Dns.GetHostByName(Dns.GetHostName()).AddressList
   Dim i As Integer
   
   For i = 0 To listaIPs.Length - 1
       s += listaIPs(i).ToString() + ControlChars.CrLf
   Next i
   textBox1.Text = s

5  O que é preciso para executar minhas aplicações VB.NET na máquina do cliente ?

Para executar qualquer aplicação Windows Forms a máquina do cliente vai precisar ter instalado no mínimo o run time da plataforma .NET.

A Microsoft disponibiliza o dotnetredist.exe . O download é grátis e pode ser feito no link :  Microsoft .NET Framework Redistributable

6  Como obter o nome completo do assembly do código que esta sendo executado ?

MessageBox.Show(System.Reflection.Assembly.GetEnTryAssembly().GetName().Name)

7  Como obter o informações sobre o assembly da minha aplicação .NET ?

Vamos usar o objeto Application e suas propriedades para obter informações sobre : versão , empresa, etc..

lblCompany.Text = "Nome Empresa   : " & Application.CompanyName.Trim
lblProduct.Text = "Nome do Produto : " & Application.ProductName.Trim
lblVersion.Text = "Versão " & Application.ProductVersion.Trim

Para obter outras propriedades como titulo e descrição do assembly devemos usar o namespace System.Reflection:

Imports System.Reflection

Dim aAssembly As [Assembly] = System.Reflection.Assembly.GetExecutingAssembly

Dim aDescAttr As AssemblyDescriptionAttribute = AssemblyDescriptionAttribute.GetCustomAttribute( _
aAssembly, GetType(AssemblyDescriptionAttribute))

Dim aTitleAttr As AssemblyTitleAttribute = AssemblyTitleAttribute.GetCustomAttribute( _
aAssembly, GetType(AssemblyTitleAttribute))

Debug.WriteLine(aTitleAttr.Title)
Debug.WriteLine(aDescAttr.Description)

8  Como obter o caminho completo da minha aplicação ?

TextBox1.Text = Application.ExecutablePath

Para saber o caminho do arquivo executável sem o nome do arquivo use:

TextBox1.Text = Application.StartUpPath()

9 Como obter as pastas especiais do Windows no VB.NET ?

Pastas especiais são as pastas Meus Documents, Desktop, Favoritos, Documents and Settings, Cookies,.... etc.

'
' Declara uma variável especial do tipo SpecialFolder.
'
Dim tipoPastaEspecial As System.Environment.SpecialFolder
'
' percorre todas as pastas especiais e as exibe no console
'
For Each tipoPastaEspecial In typeSpecialFolder.GetValues(GetType(Environment.SpecialFolder))
       Console.WriteLine(System.Environment.GetFolderPath(
tipoPastaEspecial))
Next

10 Como posso saber se minha aplicação já esta sendo executada ?

Uma forma de fazer isto no VB.NET é obter o nome do seu módulo principal e procurar na coleção dos processos em execução na sua máquina.

Imports System.Diagnostics

Dim aModuleName As String = Diagnostics.Process.GetCurrentProcess.MainModule.ModuleName

Dim aProcName As String = System.IO.Path.GetFileNameWithoutExtension(aModuleName)

If Process.GetProcessesByName(aProcName).Length > 1 Then
         Application.Exit()
End If

11 Como detectar quando um arquivo ou pasta foram alterados no VB.NET ?

A classe FileSystemWatcher do namespace System.IO já efetua esta verificação:

Imports System.IO

' Cria um objeto FileSystemWatcher passando a pasta a verficiar
Dim fsw As New FileSystemWatcher("C:\Macoratti")
'
' Atribui eventos de procedure para os eventos da classe
AddHandler fsw.Created, AddressOf OnChanged
AddHandler fsw.Changed, AddressOf OnChanged
AddHandler fsw.Deleted, AddressOf OnChanged
AddHandler fsw.Renamed, AddressOf OnRenamed

With fsw
   .EnableRaisingEvents = True
    .IncludeSubdirectories = True

    ' Define o evento que vamos observar
   .WaitForChanged(WatcherChangeTypes.Created Or WatcherChangeTypes.Changed Or WatcherChangeTypes.Deleted Or _
   WatcherChangeTypes.Renamed)

    ' Observa certos tipos de arquivos
    .Filter = "*.txt"

     ' Define as notificações de mudança em arquivo
     .NotifyFilter = (NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.FileName Or NotifyFilters.DirectoryName)
End With

Public Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
   Debug.Fail("Arquivo alterado : " & e.FullPath & " Tipo alterado : " & e.ChangeType)
End Sub

Public Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
    Debug.Fail("Arquivo chamado a partir de :" & e.OldName & " para: " & e.Name)
End Sub

12 Como obter informações sobre a configuração de sua aplicação VB.NET?

Você pode criar um arquivo de configuração para sua aplicação .VB.NET. Além das configurações padrão você pode armazenar suas próprias configurações no arquivo de configuração (como fazia quando usava arquivos INI no VB 6.0).

Este arquivo de configuração é um arquivo XML que possui o mesmo nome que seu arquivo executável com a extensão adicional .config.

Para obter as informações do arquivo de configuração você pode usar o namespace System.Configuration.ConfigurationsSettings.AppSettings que permite retornar elementos da configuração da aplicação .

Abaixo temos um exemplo de um arquivo de configuração :

<configuration>
<appSettings>
<add key="DatabaseConnectionString" value="Provider=Microsoft.Jet,..."/>
<add key="ExcelNomeArquivo" value="C:\Worksheet.xls"/>
</appSettings>
</configuration>

Para ler as informações do seu arquivo de configuração no VB.NET você pode usar o seguinte código :

Dim aConfig As Configuration.ConfigurationSettings
Dim aExcelArquivo As String = aConfig.AppSettings("ExcelArquivoNome")

13 Como editar uma solução feita no VS 2003 usando uma versão anterior do Visual Studio ?

Se você tentar abrir uma solução criada no Visual Studio .NET 2003 com o VS.NET 2002 irá obter a seguinte mensagem de erro :

"The selected file is not a valid Visual Studio solution file."

Mas ainda existe uma esperança de abrir a solução na versão anterior , SE , ela não estiver usando nenhum dos novos recursos do VS.NET 2003.

Faça o seguinte :

1- Edite o arquivo de solução .sln usando o bloco de notas e altere a seguinte linha

Microsoft Visual Studio Solution File, Format Version 8.00

para

Microsoft Visual Studio Solution File, Format Version 7.00

2- Edite o arquivo de projeto .vbproj com o bloco de notas e altere a seguinte linha :

ProductVersion = "7.10.3077"
SchemaVersion = "2.0"

para

ProductVersion = "7.0.9466"
SchemaVersion = "1.0"

Salve e feche estes arquivos e então clique duas vezes no arquivo de solução .sln para abrir a solução no VS.NET.

14 Como posso ler dados do registro do Windows ?

Abaixo um exemplo que acesse o registro do Windows e lê o valor chamado DBConexao armazenado no registro.

Imports Microsoft.Win32

Function GetDBConexao() As String

Dim objRegKey As RegistryKey
Dim strValor As String

pobjRegKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Services\MyService\Parameters", False)

If Not IsNothing(pobjRegKey) Then
    strValue = objRegKey.GetValue("DBConexao", vbNullString).ToString
    Return strValor
Else
    Return vbNullString
End If

End Function

14 Como posso alterar a data e hora de todos os arquivos em um pasta ?

Os métodos SetCreationTime, SetLastWriteTime, e SetLastAccessTime da classe System.IO.Directory permite que você altere o atributo de data de um arquivo ou diretório.

Ex:Altera a data de acesso dos arquivos da pasta c:\macoratti para a data atual.

' Altera a data e hora de acesso de todos os arquivos em um pasta c:\macoratti:
Dim nome as String
For Each nome In System.IODirectory.GetFiles("c:\macoratti")
        File.SetLastAccessTime(nome, Date.Now)
          Console.WriteLine( " Arquivo " & nome & " Alterado ")
Next
Console.ReadLine()

Você pode usar um critério para definir quais os arquivos que deseja que sejam alterados. Abaixo uma aplicação console que recebe os nomes dos arquivos como argumentos na linha de comando :

Dim args() As String = Environment.GetCommandLineArgs
Dim file As System.IO.File

Dim i As Integer
For i = 1 To Ubound(args)
     File.SetCreationTime(args(i), Date.Now)
     
console.writeline("Data de criação do Arquivo " & args(i) & " Alterado para : " & Date.Now
Next

Console.ReadLine()

Rápido e simples : VB.NET

Arriverdeci !!!