c#中有没有像VB那样的“关于”对话框的模板?

解决方案 »

  1.   

    谢谢 thinkingforever(努力学习) :再请问,要像win2000系统自带的记事本程序那样,在关于中获得操作系统的版本号、产品使用权归属、windows的可用物理内存,该怎么做?静候回复!
      

  2.   

    这是用VB写的得到系统信息的函数:你可以参考进行修改!
    Public Sub StartSysInfo()
        On Error GoTo SysInfoErr
      
        Dim rc As Long
        Dim SysInfoPath As String
        
        ' 试图从注册表中获得系统信息程序的路径及名称...
        If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then
        ' 试图仅从注册表中获得系统信息程序的路径...
        ElseIf GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then
            ' 已知32位文件版本的有效位置
            If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then
                SysInfoPath = SysInfoPath & "\MSINFO32.EXE"
                
            ' 错误 - 文件不能被找到...
            Else
                GoTo SysInfoErr
            End If
        ' 错误 - 注册表相应条目不能被找到...
        Else
            GoTo SysInfoErr
        End If
        
        Call Shell(SysInfoPath, vbNormalFocus)
        
        Exit Sub
    SysInfoErr:
        MsgBox "此时系统信息不可用", vbOKOnly
    End Sub
      

  3.   

    不好意思,忘了加上:' 注册表关键字安全选项...
    Const READ_CONTROL = &H20000
    Const KEY_QUERY_VALUE = &H1
    Const KEY_SET_VALUE = &H2
    Const KEY_CREATE_SUB_KEY = &H4
    Const KEY_ENUMERATE_SUB_KEYS = &H8
    Const KEY_NOTIFY = &H10
    Const KEY_CREATE_LINK = &H20
    Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _
                           KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _
                           KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
                         
    ' 注册表关键字 ROOT 类型...
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const ERROR_SUCCESS = 0
    Const REG_SZ = 1                         ' 独立的空的终结字符串
    Const REG_DWORD = 4                      ' 32位数字Const gREGKEYSYSINFOLOC = "SOFTWARE\Microsoft\Shared Tools Location"
    Const gREGVALSYSINFOLOC = "MSINFO"
    Const gREGKEYSYSINFO = "SOFTWARE\Microsoft\Shared Tools\MSINFO"
    Const gREGVALSYSINFO = "PATH"Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
      

  4.   

    c#写的调用API获取系统消息的例子//声明API函数

    [DllImport("kernel32.dll")]
    public static extern void GetWindowsDirectory(StringBuilder WinDir,int count);        [DllImport("kernel32.dll")]
            public static extern void GetSystemDirectory(StringBuilder SysDir,int count); [DllImport("kernel32.dll")]
    public static extern void GetSystemInfo(ref CPU_INFO cpuinfo); [DllImport("kernel32.dll")]
    public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo); [DllImport("kernel32.dll")]
    public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);
    /*****************************************************
     *                     定义结构体                    *
     *****************************************************/

    //定义cpu的结构信息 [StructLayout(LayoutKind.Sequential)]
    public struct CPU_INFO
    {
    public uint dwOemId;
    public uint dwPageSize;
    public uint lpMinimumApplicationAdress;
    public uint dwActiveProcessorMark;
    public uint dwNumberOfProcessors;
    public uint dwProcessorType;
    public uint dwAllocationGranularity;
    public uint dwProcessorLevel;
    public uint dwProcessorRevision;
    } //定义内存的结构信息 [StructLayout(LayoutKind.Sequential)]
    public struct MEMORY_INFO
    {
    public uint dwLength;
    public uint dwMemoryLoad;
    public uint dwTotalPhys;
    public uint dwAvailPhys;
    public uint dwTotalPageFile;
    public uint dwAvailPageFile;
    public uint dwTotalVirtual;
    public uint dwAvailVirtual;
    } //定义系统时间的信息结构 [StructLayout(LayoutKind.Sequential)]
    public struct SYSTEMTIME_INFO
    {
    public ushort wYear;
    public ushort wMonth;
    public ushort wDayOfWeek;
    public ushort wDay;
    public ushort wHour;
    public ushort wMinute;
    public ushort wSecond;
    public ushort wMilliseconds;
    }
    //按钮事件
    private void GetInfo_Click(object sender, System.EventArgs e)
    {
    //调用GetWindowsDirctory和GetSystemDirctory函数分别获取Windows路径和系统路径
    const int nChars = 128;
    StringBuilder Buff = new StringBuilder(nChars);
    GetWindowsDirectory(Buff,nChars);
    this.WindowsDirectory.Text = "Windows路径:" + Buff.ToString();
    GetSystemDirectory(Buff,nChars);
    this.SystemDirectory.Text = "系统路径:" + Buff.ToString(); //调用GetSystemInfo函数获取CPU的相关信息
    CPU_INFO CpuInfo;
    CpuInfo = new CPU_INFO();
    GetSystemInfo(ref CpuInfo);
    this.NumberOfProcessors.Text = "本地计算机有" + CpuInfo.dwNumberOfProcessors.ToString() + "个CPU";
    this.ProcessorType.Text = "CPU的类型为" + CpuInfo.dwProcessorType.ToString();
    this.ProcessorLevel.Text = "CPU的等级为" + CpuInfo.dwProcessorLevel.ToString();
    this.OemId.Text = "CPU的OEM ID为" + CpuInfo.dwOemId.ToString();
    this.PageSize.Text = "CPU中的页面大小为" + CpuInfo.dwPageSize.ToString(); //调用GlobalMemoryStatus函数获取内存的相关信息
    MEMORY_INFO MemInfo;
    MemInfo =new MEMORY_INFO();
    GlobalMemoryStatus(ref MemInfo);
    this.MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString() + "%的内存正在使用";
    this.TotalPhys.Text = "物理内存共有" + MemInfo.dwTotalPhys.ToString() + "字节";
    this.AvailPhys.Text = "可使用的物理内存有" + MemInfo.dwAvailPhys.ToString() + "字节";
    this.TotalPageFile.Text = "交换文件的总大小为" + MemInfo.dwTotalPageFile.ToString() + "字节";
    this.AvailPageFile.Text = "尚可交换文件大小为" +MemInfo.dwAvailPageFile.ToString() + "字节";
    this.TotalVirtual.Text = "总虚拟内存有" + MemInfo.dwTotalVirtual.ToString() + "字节";
    this.AvailVirtual.Text = "未用虚拟内存有" + MemInfo.dwAvailVirtual.ToString() + "字节"; //调用GetSystemTime函数获取系统时间信息
    SYSTEMTIME_INFO StInfo;
    StInfo = new SYSTEMTIME_INFO();
    GetSystemTime(ref StInfo);
    this.Date.Text = StInfo.wYear.ToString() + "年" + StInfo.wMonth.ToString() + "月" + StInfo.wDay.ToString() + "日";
    this.Time.Text = StInfo.wHour.ToString() + "时" + StInfo.wMinute.ToString() + "分" + StInfo.wSecond.ToString() + "秒";
    }
      

  5.   

    多谢 bumm(......) ,还有就是windows的版本号和软件使用者及单位的信息用什么API获取?
      

  6.   

    private void ShowSystemInformation()
    {
    RegistryKey rkey = Registry.LocalMachine;
    rkey = rkey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion",true);
    FamilyName.Text = rkey.GetValue("RegisteredOwner").ToString();
    Corporation.Text = rkey.GetValue("RegisteredOrganization").ToString();
    Edition.Text = "版本 " + rkey.GetValue("CurrentVersion").ToString()
    + " 内部版本号 " + rkey.GetValue("CurrentBuildNumber").ToString()
    + ": " + rkey.GetValue("CSDVersion").ToString(); }