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

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

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

实体类:

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 = );
               }
               //组合条件
               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)
               {

                   //计数器
                   ;
                   //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))
                   {
                       )
                       {
                           StringBuilder sb = new StringBuilder();

                           ; 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. Windows API 函数列表 附帮助手册

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

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

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

  3. Appium常用的API函数

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

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

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

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

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

  6. C#中导入Win32 API函数

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

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

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

  8. 初识API函数

    我之前是一个只会编写数值计算的程序的OIer,但我并不甘于这种现状,于是我编写了我的第一个使用API函数的C++程序,开发平台是VS2012: // ConsoleApplication.cpp : ...

  9. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

随机推荐

  1. Python中三目计算符的正确用法及短路逻辑

    今天在看别人代码时看到这样一种写法, 感觉是个挺容易踩到的坑, 搞清楚后写出来备忘. 短路逻辑 Python中进行逻辑运算的时候, 默认采用的是一种叫做短路逻辑的运算规则. 名字是很形象的, 下面直接 ...

  2. &lt;&lt;&lt; Jquery查找元素、选择器使用方法总结

    $("#myDiv"); //根据给定的ID匹配一个元素,用于搜索id 属性中给定的值,id属性必须是唯一的 $("div"); //根据给定的元素名匹配所有元 ...

  3. Linux常用性能调优工具索引

    root@ubuntu:~# dstat----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys i ...

  4. Register DLL Assembly Gacutil.exe(全局程序集缓存工具)

    全局程序集缓存工具使你可以查看和操作全局程序集缓存和下载缓存的内容. 此工具会自动随 Visual Studio 一起安装. 若要运行此工具,请使用开发人员命令提示(或 Windows 7 中的 Vi ...

  5. 【CodeForces 472A】Design Tutorial: Learn from Math

    题 题意:给你一个大于等于12的数,要你用两个合数表示出来.//合数指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0)的数. 分析:我们知道偶数除了2都是合数,给你一个偶数,你减去一个偶 ...

  6. window.parent与window.openner 之前的总结

    今天总结一下js中几个对象的区别和用法: 1.首先来说说 parent.window与top.window的用法 "window.location.href","loca ...

  7. [翻译]java nio 概述

    原文地址:http://tutorials.jenkov.com/java-nio/overview.html java NIO 包含一下核心内容: Channels Buffers Selector ...

  8. UVa 11427 - Expect the Expected

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  9. [网络技术]VPN设置

    1.解决VPN服务器默认路由困扰 现在移动办公已经变得家常便饭,每次外出出差办公需要访问单位的内网服务器时,该怎么办呢?相信很多人都想到了VPN连接!的确,使用VPN连接, 我们可以利用现成的Inte ...

  10. vim插件介绍

    代码补全 http://blog.sina.com.cn/s/blog_a6559d920101acv3.html这个牛逼.************************************** ...