C# 存储来自其他程序的事件

C# 存储来自其他程序的事件,c#,winforms,events,C#,Winforms,Events,我想在我自己的应用程序中存储来自其他应用程序的事件。事件示例:打开Word、最小化或打开文件时 这是可能的吗?是操作系统事件(它们涉及安全检查),可以使用Windows内置的审核功能捕获。这些都是离题的问题,请直接向ServerFault.com提问 最小化程序是应用程序消息的一个示例,要获取这些消息,您需要使用SetWindowsHookEx安装钩子。从.NET4开始(它引入了并行运行时支持),这可以用C#来完成,但不推荐这样做。您需要注意的一个大问题是,事件捕获代码决不能生成自己的事件,否则

我想在我自己的应用程序中存储来自其他应用程序的事件。事件示例:打开Word、最小化或打开文件时

这是可能的吗?

是操作系统事件(它们涉及安全检查),可以使用Windows内置的审核功能捕获。这些都是离题的问题,请直接向ServerFault.com提问


最小化程序是应用程序消息的一个示例,要获取这些消息,您需要使用
SetWindowsHookEx
安装钩子。从.NET4开始(它引入了并行运行时支持),这可以用C#来完成,但不推荐这样做。您需要注意的一个大问题是,事件捕获代码决不能生成自己的事件,否则会引发连锁反应,导致所有正在运行的程序崩溃。

使用
事件日志

必须将
EnableRaisingEvents
属性设置为
true

当事件添加到指定的事件日志时
entrywrited
事件处理程序将引发

这是处理操作系统的最简单方法 事件

示例代码

private void frmMain_Load(object sender, EventArgs e)
{
    System.Diagnostics.EventLog s = new System.Diagnostics.EventLog("Application", ".", "");
    s.EnableRaisingEvents = true;
    s.EntryWritten += delegate(object st, System.Diagnostics.EntryWrittenEventArgs ew)
    {
        MessageBox.Show(ew.Entry.Message);
    };
}

除非另一个应用程序通过任何机制将其公开,否则你就是运气不佳。@leppie:是MSDN官方文档中的“运气不佳”吗?:)@alex:MSDN有一个特点,就是在使用简单的措辞时显得迟钝。正如评论所说,其他应用程序必须以任何方式公开它们。你用你的应用程序打开word吗?@Daniel:嗯,原来的帖子太少了。但是在编辑之后,-1应该被收回,是的。活动社区是一个很好的社区。如何捕获代码中的审核事件并对其作出反应?这里没有主题@C:OS配置。设置审核策略不需要编程。审核事件由Windows捕获并存储在事件日志中。@amir:用于哪个部分?审计是由操作系统提供的,您不需要编写任何代码。MSDN提供了
SetWindowsHookEx
的示例。