先不说如何实现,先来看看效果图:

读取远程的需要提供下远程的计算用户名和密码即可。

如何实现这个代码功能,请看如下代码部分:

实体类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace GetDNSListTool
{
public class EventLogEntity
{
string strEventType = string.Empty;
/// <summary>
/// 日志类型
/// </summary>
public string EventType
{
get { return strEventType; }
set { strEventType = value; }
} string strTimeWritten = string.Empty;
/// <summary>
/// 日志日期
/// </summary>
public string TimeWritten
{
get { return strTimeWritten; }
set { strTimeWritten = value; }
} string strCategory = string.Empty;
/// <summary>
/// 日志种类
/// </summary>
public string Category
{
get { return strCategory; }
set { strCategory = value; }
} string strSourceName = string.Empty;
/// <summary>
/// 日志来源
/// </summary>
public string SourceName
{
get { return strSourceName; }
set { strSourceName = value; }
}
/// <summary>
/// Eevnet ID
/// </summary>
string strEventIdentifier = string.Empty;
public string EventIdentifier
{
get { return strEventIdentifier; }
set { strEventIdentifier = value; }
} string strRecordNumber = string.Empty;
/// <summary>
/// 行号
/// </summary>
public string RecordNumber
{
get { return strRecordNumber; }
set { strRecordNumber = value; }
} string strEventCode = string.Empty;
/// <summary>
/// 日志编码
/// </summary>
public string EventCode
{
get { return strEventCode; }
set { strEventCode = value; }
} string strCategoryString = string.Empty;
/// <summary>
/// CategoryString
/// </summary>
public string CategoryString
{
get { return strCategoryString; }
set { strCategoryString = value; }
} string strMessage = string.Empty;
/// <summary>
/// 详细错误
/// </summary>
public string Message
{
get { return strMessage; }
set { strMessage = value; }
}
}
}
#region//格式化信息类别
/// <summary>
/// 格式化信息类别
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
private string GetEventTypeString(NTLogEvent.EventTypeValues val)
{
switch (val)
{
case NTLogEvent.EventTypeValues.Error:
return EventTypeDescription.Error;
case NTLogEvent.EventTypeValues.Warning:
return EventTypeDescription.Warning;
case NTLogEvent.EventTypeValues.Information:
return EventTypeDescription.Information;
case NTLogEvent.EventTypeValues.Security_audit_success:
return EventTypeDescription.SuccessAudit;
case NTLogEvent.EventTypeValues.Security_audit_failure:
return EventTypeDescription.FailureAudit;
default:
return EventTypeDescription.Unknown;
}
}
#endregion
#region//获取日志文件
/// <summary>
/// 获取日志文件
/// </summary>
/// <param name="topNumber">多少条</param>
/// <param name="eventCode">事件ID</param>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns>返回集合</returns>
public List<EventLogEntity> GetEventLogList(int topNumber, string eventCode,
string startTime, string endTime)
{
List<EventLogEntity> logList = new List<EventLogEntity>();
try
{
//条件语句
StringBuilder query = new StringBuilder();
StringBuilder strWhere = new StringBuilder();
query.Append("select EventType, TimeWritten, Category, SourceName, EventIdentifier, RecordNumber,CategoryString,EventCode,Message from Win32_NTLogEvent ");
//日志ID
if (!string.IsNullOrEmpty(eventCode))
{
strWhere.Append(" AND eventCode = '");
strWhere.Append(eventCode);
strWhere.Append("'");
}
//开始日期
if (!string.IsNullOrEmpty(startTime))
{
strWhere.Append(" AND TimeWritten>= '");
strWhere.Append(getDmtfFromDateTime(startTime));
strWhere.Append("'");
}
//结束日期
if (!string.IsNullOrEmpty(endTime))
{
strWhere.Append(" AND TimeWritten<= '");
strWhere.Append(getDmtfFromDateTime(endTime));
strWhere.Append("'");
}
string laststrWhere = strWhere.ToString();
//如果有检索条件
if (!string.IsNullOrEmpty(laststrWhere))
{
laststrWhere = " where " + laststrWhere.Substring();
}
//组合条件
query.Append(laststrWhere);
//值
ManagementObjectCollection moCollection = null;
//如果是本地
if (isLocal)
{
ManagementScope scope = new ManagementScope(scopePath);
scope.Connect();
ObjectQuery objectQuery = new ObjectQuery(query.ToString());
//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(scope, objectQuery);
//异步调用WMI查询
moCollection = Searcher.Get();
}
//表示远程
else
{
//设定通过WMI要查询的内容
ObjectQuery Query = new ObjectQuery(query.ToString());
//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Ms, Query);
//异步调用WMI查询
moCollection = Searcher.Get();
}
//循环
if (moCollection != null)
{ //计数器
int i = ;
//foreach
foreach (ManagementObject mObject in moCollection)
{
//如果i==topNumber就退出循环
if (i == topNumber)
{
break;
}
EventLogEntity eventLog = new EventLogEntity(); //日志类型
eventLog.EventType = mObject["EventType"] == null ? string.Empty :
GetEventTypeString(((NTLogEvent.EventTypeValues)(System.Convert.ToInt32(mObject["EventType"]))));
//日志种类
eventLog.Category = mObject["Category"] == null ? string.Empty :
mObject["Category"].ToString();
//日志种类
eventLog.CategoryString = mObject["CategoryString"] == null ? string.Empty :
mObject["CategoryString"].ToString();
//日志编码
eventLog.EventCode = mObject["EventCode"] == null ? string.Empty :
mObject["EventCode"].ToString();
//日志ID
eventLog.EventIdentifier = mObject["EventIdentifier"] == null ? string.Empty :
mObject["EventIdentifier"].ToString();
//行号
eventLog.RecordNumber = mObject["RecordNumber"] == null ? string.Empty :
mObject["RecordNumber"].ToString();
//日期
eventLog.TimeWritten = mObject["TimeWritten"] == null ? string.Empty :
getDateTimeFromDmtfDate(mObject["TimeWritten"].ToString()); //日志来源
eventLog.SourceName = mObject["SourceName"] == null ? string.Empty :
mObject["SourceName"].ToString();
//详细错误
eventLog.Message = mObject["Message"] == null ? string.Empty :
mObject["Message"].ToString();
//add
logList.Add(eventLog);
//
//
i++;
} }
}
catch (Exception ex)
{
throw ex;
}
//
return logList;
}
#endregion #region//根据行号检索错误信息
/// <summary>
/// 根据行号检索错误信息
/// </summary>
/// <param name="recordNumber">行号</param>
/// <returns>返回错误信息</returns>
public string GetErrMsg(uint recordNumber)
{
string Msg = string.Empty;
try
{
//条件语句
StringBuilder query = new StringBuilder();
query.Append("select Message, InsertionStrings from Win32_NTLogEvent where ");
query.Append(" RecordNumber='");
query.Append(recordNumber);
query.Append("'");
//值
ManagementObjectCollection moCollection = null;
//如果是本地
if (isLocal)
{
ManagementScope scope = new ManagementScope(scopePath);
scope.Connect();
ObjectQuery objectQuery = new ObjectQuery(query.ToString());
//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(scope, objectQuery);
//异步调用WMI查询
moCollection = Searcher.Get();
}
//表示远程
else
{
//设定通过WMI要查询的内容
ObjectQuery Query = new ObjectQuery(query.ToString());
//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Ms, Query);
//异步调用WMI查询
moCollection = Searcher.Get();
}
//检索错误信息
foreach (ManagementObject mObject in moCollection)
{
//错误信息
string message = mObject["Message"] == null ?
string.Empty : mObject["Message"].ToString();
//错误信息
string[] insertionStrings =mObject["InsertionStrings"]==null?null:
(string[])mObject["InsertionStrings"];
//如果有错误信息
if (string.IsNullOrEmpty(message))
{
if (insertionStrings.Length > )
{
StringBuilder sb = new StringBuilder(); for (int i = ; i < insertionStrings.Length; i++)
{
sb.Append(insertionStrings[i]);
sb.Append(" ");
} Msg = sb.ToString();
} }
else
{
Msg= message;
}
}
}
catch
{
}
//return
return string.IsNullOrEmpty(Msg) ? "无错误信息,请与管理员联系核对!" : Msg;
}
#endregion

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能的更多相关文章

  1. Vb.net/VB 声明API函数实现父窗口功能

    回想第一次敲机房收费.自己调用了api函数实现了父窗口及其子窗口最小化的功能.现在再次遇到,自己就在思考,能不能继续使用API函数呢?答案当然是Of Course! 事实上细致看两者并没有多大的差别. ...

  2. API函数ShellExecute与ShellExecuteEx用法

    ShellExecute: 1.函数功能:你可以给它任何文件的名字,它都能识别出来并打开它.2.函数原型: HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpO ...

  3. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  4. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  5. Appium常用的API函数

    在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...

  6. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  7. C#调用Windows API函数截图

    界面如下: 下面放了一个PictureBox 首先是声明函数: //这里是调用 Windows API函数来进行截图 //首先导入库文件 [System.Runtime.InteropServices ...

  8. C#中导入Win32 API函数

    C#中导入Win32 API的方法: 1.引用命名空间 using System.Net.Security; using System.Runtime.InteropServices; 2. [Dll ...

  9. C++实现VPN工具之常用API函数

    RAS是Remote Access Service的缩写,意为:远程访问服务,主要用来配置企业的远程用户对企业内部网络访问,包括拨号访问和vpn方式.微软的所有Windows平台中都有RAS客户机,它 ...

随机推荐

  1. VS代码提示不出现或者提示变成英文或者各种奇葩问题的解决

    万能法==>重置 代码提示变成英文的了 打开开发员命令提示 输入:devenv.exe /setup /resetuserdata /resetsettings 重新打开,会和你第一次安装完毕一 ...

  2. OpenCASCADE Documentation System

    OpenCASCADE Documentation System eryar@163.com Abstract. Doxygen is the de facto standard tool for g ...

  3. Win10系统菜单打不开问题的解决,难道是Win10的一个Bug ?

    Win10左下角菜单打不开,好痛苦,点击右下角的时间也没反应,各种不爽,折磨了我好几天,重装又不忍心,实在费劲,一堆开发环境要安装,上网找了很多方法都不适用.今天偶然解决了,仔细想了下,难道是Win1 ...

  4. Android自定义Dialog(美化界面)

    前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...

  5. typeof知多少

    昨天同事给我看了一道代码题,是关于typeof的,感觉挺有意思的,在这里分享给大家,顺便自己再对typeof总结总结.如有不对,请给予指出,共同进步. 代码是这样的: <!DOCTYPE htm ...

  6. 关于SubSonic3.0插件使用实体进行更新操作时(执行T.Update()或T.Save()),某些列无法进行修改操作的问题处理

    SubSonic3.0插件在创建实体后,对实体进行赋值操作时,为了去除一些不必要更新的字段,减少更新的内容,会将更新内容与默认值进行比较,如果默认值与当前更新的内容相等时,则不提交更新本列,这主要是为 ...

  7. java多线程--信号量Semaphore的使用

    Semaphore可以控制某个共享资源可被同时访问的次数,即可以维护当前访问某一共享资源的线程个数,并提供了同步机制.例如控制某一个文件允许的并发访问的数量. 例如网吧里有100台机器,那么最多只能提 ...

  8. 【Debug】Web开发中,Tomcat正常启动,访问欢迎页404,怎么办?

    访问页面出现404是一个会经常遇到的问题.每次开发Web项目时总要掉这个坑里几次,而且还不长记性.今天来总结一下,开发时遇到这个问题的解决思路. 1. 查看访问地址是否正确,有无拼写错误. 越是低级的 ...

  9. byte为什么要与上0xff?

    无意间翻看之间的代码,发现了一段难以理解的代码. byte[] bs = digest.digest(origin.getBytes(Charset.forName(charsetName))) ; ...

  10. QT5.1 调用https

    以VS开发为例.因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com ...