Я пишу код, который контролирует, работает ли сторонний просмотрщик отладки (т. Е. DbgView). Я могу легко отлаживать отладочный отладчик с помощью Debugger.IsAttached, но для отслеживания DbgView вам необходимо отслеживать некоторые события. Я основывая свой код по этой статье здесь: http://unixwiz.net/techtips/outputdebugstring.htmlВы можете подождать, пока событие (событие Win32) будет сброшено?
Итак, прямо сейчас, у меня есть:
IntPtr h1 = CreateEvent(IntPtr.Zero, false, false, "DBWIN_BUFFER_READY");
WaitForSingleObject(h1, 0xFFFFFFFF);
//bool b2 = h1 != IntPtr.Zero;
CloseHandle(h1);
Работает отлично. Блоки кода до запуска DbgView И начинается захват. Именно то, что я хочу. Теперь проблема в том, что я не могу сказать, когда захват прекращается.
Есть ли способ проверить, когда событие сброшено или выпущено или что-то, что делает DbgView? Предпочтительно без опроса события в цикле :).
Какую проблему вы действительно пытаетесь решить? Что вы планируете делать, когда слушатель начинает слушать? Почему важно знать, когда слушатель перестает слушать? – IInspectable
@ Идеальный, да, точно. Я хочу знать, когда начинается слушатель и когда слушатель останавливается. Debugger.IsAttached обрабатывает отладчики, но слушатели, такие как DbgView, работают по-другому, они не вызывают флаг IsAttached. Конечная игра должна генерировать только диагностическую информацию, когда кто-то слушает, так как это может быть дорого. Я хочу автоматизировать это поведение. Вышеприведенный код - это легкий индикатор, который кто-то слушает, но пытается узнать, когда они остановятся. – SledgeHammer
Вы оценили применимость [Трассировка событий] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb968803.aspx)? Это надежное решение проблемы, которую вы пытаетесь решить, опробовали и протестировали, и использовали ее во всей ОС. – IInspectable