user1244772
user1244772

Reputation: 294

Visual basic and modules

I'm writing an application in Visual Basic to tell the user about their PC.

All this is in a module:

Imports Microsoft.VisualBasic.Devices
Imports System.Management
Imports System.Net
Imports System.IO
Imports System.Windows.Forms
Imports System.Deployment.Application

Module ComputerSpecModule
    Public Enum infotypes
        ProcesserName
        VideocardName
        VideocardMem
    End Enum


    Public Function getinfo(ByVal infotype As infotypes) As String
        Dim info As New ComputerInfo : Dim value, vganame, vgamem, proc As String
        Dim searcher As New Management.ManagementObjectSearcher( _
            "root\CIMV2", "Select * FROM Win32_VideoController")
        Dim searcher1 As New Management.ManagementObjectSearcher( _
            "Select * FROM Win32_Processor")
        If infotype = infotypes.ProcesserName Then
            For Each queryObject As ManagementObject In searcher1.Get
                proc = queryObject.GetPropertyValue("Name").ToString
            Next
            value = proc
        ElseIf infotype = infotypes.VideocardName Then
            For Each queryObject As ManagementObject In searcher.Get
                vganame = queryObject.GetPropertyValue("Name").ToString
            Next
            value = vganame
        ElseIf infotype = infotypes.VideocardMem Then
            For Each queryObject As ManagementObject In searcher.Get
                vgamem = queryObject.GetPropertyValue("AdapterRAM").ToString
            Next
            value = Math.Round((((CDbl(Convert.ToDouble(Val(vgamem))) / 1024)) / 1024), 2) & " MB"
        End If
        Return value

    End Function

    Public oAddr As System.Net.IPAddress 'gets the ipv4 add
    Public sAddr As String


    Public EmailStarterMessage As String = "This message was sent by SpecMee. SpecMee is a light weight application designed to allow the users to find out the specifications of their machines. Please download this application free at http://www.wilson18.com/projects/SpecMee/" + _
    Environment.NewLine + _
    "" + _
    Environment.NewLine + _
    "" + _
    Environment.NewLine + _
    ""


    'PC SPEC CONTENT
    Public ComputerName As String = (My.Computer.Name.ToString)
    Public myOS As String = (My.Computer.Info.OSFullName)
    Public Processor As String = (getinfo(infotypes.ProcesserName))
    Public HDD As String = (Format((My.Computer.FileSystem.Drives.Item(0).TotalSize.ToString / 1024) / 1024 / 1024, "###,###,##0 GB"))
    Public RAM As String = (Format((My.Computer.Info.TotalPhysicalMemory / 1024) / 1024 / 1024, "###,###,##0 GB"))
    Public VideoCard As String = (getinfo(infotypes.VideocardName))
    Public VideoCardMemory As String = (getinfo(infotypes.VideocardMem))
    Public Function Resolution() As String
        Dim intx As Integer = Screen.PrimaryScreen.Bounds.Width
        Dim inty As Integer = Screen.PrimaryScreen.Bounds.Height
        Return intx & " x " & inty
    End Function
    Public Function InternalIPAddress()
        With System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName())
            oAddr = New System.Net.IPAddress(.AddressList(0).Address)
            InternalIPAddress = oAddr.ToString
        End With
    End Function
    Public Function ExternalIPAddress() As String
        Dim uri_val As New Uri("http://www.wilson18.com/projects/SpecMee/curip.php")
        Dim request As HttpWebRequest = HttpWebRequest.Create(uri_val)

        request.Method = WebRequestMethods.Http.Get
        Dim response As HttpWebResponse = request.GetResponse()
        Dim reader As New StreamReader(response.GetResponseStream())
        Dim myip As String = reader.ReadToEnd()
        response.Close()
        Return myip
    End Function



    Public EmailContent As String = ("Computer Name: " & ComputerName & Environment.NewLine & "Operating System: " & myOS & Environment.NewLine & "Processor: " & Processor & Environment.NewLine & "Hard Drive Size : " & HDD & Environment.NewLine & "RAM: " & RAM & Environment.NewLine & "Graphics Card: " & VideoCard & Environment.NewLine & "Graphics Onboard Memory: " & VideoCardMemory & Environment.NewLine & "Resolution: " & Resolution() & Environment.NewLine & "Internal IP Address: " & InternalIPAddress() & Environment.NewLine & "External IP Address: " & ExternalIPAddress() & Environment.NewLine)


End Module

The problem I am having is that if one of the things in the module fails, such as if the user's graphics card does not have any onboard memory, then it will fail. This is causing everything else to fail as well.

I am very new to Visual Basic, so please excuse me if I have made any stupidly obvious errors, and any suggestions are welcome.

Thanks in advance.

Upvotes: 1

Views: 1169

Answers (1)

Olivier Jacot-Descombes
Olivier Jacot-Descombes

Reputation: 112762

Place the parts that can fail in a Try-Catch-statement

Public VideoCardMemory As String = getinfo(infotypes.VideocardMem)

Public Function getinfo(ByVal infotype As infotypes) As String        
    Try
        ...
        value = ...
        ...
    Catch
        value = "Cannot be accessed!"
    End Try
    Return value
End Function

Upvotes: 3

Related Questions