1

我在 Visual Basic 中编写了一个应用程序来告诉用户他们的电脑。

所有这些都在一个模块中

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

我遇到的问题是,如果模块中的某件事发生故障,例如用户显卡没有任何板载内存,那么它就会失败。这也会导致其他一切都失败......

我对visual basic很陌生,所以如果我犯了任何愚蠢的明显错误,请原谅我,欢迎提出任何建议

提前致谢。

4

1 回答 1

3

将可能失败的部分放在Try-Catch- 语句中

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
于 2012-06-24T21:07:14.003 回答