你可以等待重置事件(Win32事件)吗?

时间:2016-12-21 19:08:21

标签: c# winapi

我正在编写一些代码来监视第三方调试查看器(即DbgView)是否正在运行。我可以使用Debugger.IsAttached轻松处理完整的调试器,但是要跟踪DbgView,您需要监视某些事件。我的代码基于这篇文章:http://unixwiz.net/techtips/outputdebugstring.html

所以,现在,我有:

            IntPtr h1 = CreateEvent(IntPtr.Zero, false, false, "DBWIN_BUFFER_READY");
            WaitForSingleObject(h1, 0xFFFFFFFF);
            //bool b2 = h1 != IntPtr.Zero;
            CloseHandle(h1);

效果很好。代码阻塞,直到DbgView启动并开始捕获。正是我想要的。现在的问题是,我无法判断捕获何时停止。

有没有办法检查重置或释放事件的时间或DbgView正在做什么?最好不要在循环中轮询事件:)。

1 个答案:

答案 0 :(得分:1)

  

有没有办法检查事件重置的时间?

不,没有。您可以等待设置事件,但不能重置。你需要在那里举办另一个你可以等待的活动。

阅读了您链接的文章后,该协议中没有任何内容可以为您提供检测捕获结束的方法。

您正在等待的事件并非旨在用于您使用它的目的。调试器使用此事件及其朋友DBWIN_DATA_READYOutputDebugString进行通信。

这样做的一个结果是,任何捕获OutputDebugString的调试器都将创建这些事件。因此,您当前的方法几乎可以找到任何调试器,而不仅仅是DbgView。

你现有的代码看起来很可疑。如果事件尚不存在,您的代码将创建它。然后,您将等待它发出信号,这可能永远不会发生。您可能永远不会遇到这种情况,因为您只能在调试器处于活动状态时运行。您使用魔术常量而不是INFINITE,并且根本不执行错误检查。