如何调用系统信息

ChenHaiHua 2003-10-19 04:46:16
如何用VB.NET和C#实现象.NET的关于对话框中,点击[系统信息(S)]按钮,调出系统信息
请示例(VB.NET和C#)
...全文
193 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
EdwarddotNet 2003-10-22
  • 打赏
  • 举报
回复
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonProgramFiles);

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = path + @"\Microsoft Shared\MSInfo\MSINFO32.EXE";
proc.Start();
rock29 2003-10-20
  • 打赏
  • 举报
回复
当你单击word之类的软件的"系统信息"时,在任务管理器中看看它调用了哪个程序,记下来,运行它不就行了么?
如果你不怕麻烦,你把c:\winnt\system32的所有可执行程序运行一遍,可能有"系统信息"这个程序?
如果它作成了dll,那恐怕要用api了...
SqlDataAdapter 2003-10-20
  • 打赏
  • 举报
回复
system对象...
lz305 2003-10-20
  • 打赏
  • 举报
回复
Option Strict Off
Option Explicit On
Module Module1
Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA"(ByVal hKey As Integer, ByVal lpSubKey As String, ByVal ulOptions As Integer, ByVal samDesired As Integer, ByRef phkResult As Integer) As Integer '打开一个注册表项
Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA"(ByVal hKey As Integer, ByVal lpValueName As String, ByVal lpReserved As Integer, ByRef lpType As Integer, ByVal lpData As String, ByRef lpcbData As Integer) As Integer '读取一个注册表项的值
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Integer) As Integer'关闭一个注册表项


Const HKEY_LOCAL_MACHINE As Integer = &H80000002
Const gREGKEYSYSINFOLOC As String = "SOFTWARE\Microsoft\Shared Tools Location"
Const gREGVALSYSINFOLOC As String = "MSINFO"
Const gREGKEYSYSINFO As String = "SOFTWARE\Microsoft\Shared Tools\MSINFO"
Const gREGVALSYSINFO As String = "PATH"
Const KEY_ALL_ACCESS As Integer = &H2003F
Const ERROR_SUCCESS As Short = 0
Const REG_SZ As Short = 1
Const REG_DWORD As Short = 4

Public Sub StartSysInfo()
On Error GoTo SysInfoErr
Dim rc As Integer
Dim SysInfoPath As String
' 从一个注册表项中获得系统信息的路径
If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then
ElseIf GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then
' 一个有效的32位文件的版本
'UPGRADE_WARNING: Dir 有新行为。 单击以获得更多信息:'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1041"'
If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then

'获得MSINFO32.EXE的路径
SysInfoPath = SysInfoPath & "\MSINFO32.EXE "
Else
GoTo SysInfoErr '如果没有找到该文件转到执行子程序
End If

Else
GoTo SysInfoErr ' 如果没有找到注册表
End If
Call Shell(SysInfoPath, AppWinStyle.NormalFocus)

Exit Sub
SysInfoErr:
MsgBox("找不到系统信息浏览器", MsgBoxStyle.OKOnly)
End Sub

Public Function GetKeyValue(ByRef KeyRoot As Integer, ByRef KeyName As String, ByRef SubKeyRef As String, ByRef KeyVal As String) As Boolean
Dim i As Integer ' 循环记数
Dim rc As Integer ' 返回注册表函数的值
Dim hKey As Integer ' 装载打开项名字的变量
Dim hDepth As Integer '
Dim KeyValType As Integer ' 装载取回值的数据类型的变量
Dim tmpVal As String ' 装载指定值的一个缓冲区
Dim KeyValSize As Integer ' 返回缓冲区内的实际字节数
'------------------------------------------------------------
' 打开 注册表 子项 {HKEY_LOCAL_MACHINE...}
'------------------------------------------------------------
rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' 打开注册表子项


If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 注册表打开错误...


tmpVal = New String(Chr(0), 1024) ' 给变量分配空间

'(装载指定值的一个缓冲区)
KeyValSize = 1024 ' 标志变量大小


'------------------------------------------------------------
' 恢复注册表子项的值...
'------------------------------------------------------------
rc = RegQueryValueEx(hKey, SubKeyRef, 0, KeyValType, tmpVal, KeyValSize)

' 读取和创建注册表子项的值


If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError ' 句柄错误


If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then ' 判断返回字符串的大小
tmpVal = Left(tmpVal, KeyValSize - 1)
Else
tmpVal = Left(tmpVal, KeyValSize)
End If
'------------------------------------------------------------
' 返回值的类型转换...
'------------------------------------------------------------
Select Case KeyValType ' 装载取回值的数据类型的变量
Case REG_SZ ' 字符串数据类型
KeyVal = tmpVal ' 交换字符串的值
Case REG_DWORD ' 双精度字节类型
For i = Len(tmpVal) To 1 Step -1 ' 逐个转换
KeyVal = KeyVal & Hex(Asc(Mid(tmpVal, i, 1))) ' 按十六制数转递给子项的值
Next
KeyVal = VB6.Format("&h" & KeyVal) '转换格式

End Select


GetKeyValue = True ' 返回成功
rc = RegCloseKey(hKey) ' 关闭打开注册表的子项
Exit Function ' 结束


GetKeyError: '清除之后发生错误
KeyVal = "" ' 设置一个空的字符串
GetKeyValue = False ' 返回失败
rc = RegCloseKey(hKey) ' 关闭注册表子项
End Function
End Module

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Call StartSysInfo()
End Sub
在VS.NET2002+WIN2000SERVER测试通过!
acewang 2003-10-20
  • 打赏
  • 举报
回复
http://www.aoaoao.com/aoaoaocom/ReadNews.asp?NewsID=371
michaelowenii 2003-10-20
  • 打赏
  • 举报
回复
you can using API
lz305 2003-10-19
  • 打赏
  • 举报
回复
看错了!
显示系统信息有点麻烦,跟系统注册表有关.
lz305 2003-10-19
  • 打赏
  • 举报
回复
ShellAbout(Me.Handle.ToInt64, "系统信息", "2003.10.19 第一版", 0)
lz305 2003-10-19
  • 打赏
  • 举报
回复
Public Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA"(ByVal hWnd As Integer, ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Integer) As Integer '调用系统关于窗体
ehuar 2003-10-19
  • 打赏
  • 举报
回复
api

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧