2015-10-20 2 views
1

Я пытаюсь сделать очень простой монитор доступа к жесткому диску , чтобы работать как встроенные светодиоды, которые моргают в соответствии с использованием накопителя. Этот светодиод ДЕЙСТВИТЕЛЬНО помогает мне, но ноутбук, который я использую, не имеет его. = [Обнаруживать, если доступ к жесткому диску или нет

Итак, я создал простую приложение для значков в трее, но я не знаю, как определить эту переменную доступа к диску.

Я искал его и нашел что-то вроде System.Diagnostics.PerformanceCounter, но я понятия не имею, как его использовать для выполнения моей задачи.

Если есть другое решение, я также благодарен! =] Спасибо.

Oh! Я почти забыл, он должен обнаруживать ЛЮБОЙ И КАЖДЫЙ доступ к жесткому диску. Я протестировал приложение там (с той же самой предполагаемой функцией), но после некоторых тестов я мог легко понять, что ему не хватало некоторых доступов, в основном когда вы выполнили новую программу.

+0

У вас есть особые проблемы? – johnnyRose

+0

Как этот светодиод вам помогает, правда? На какой жесткий диск вас интересует? Если его диск с O/S, вы также можете вставить зеленую кнопку на панели инструментов, так как диск O/S практически не используется. Чтобы лучше понять фактическую активность, я рекомендую вам попробовать Process Monitor и посмотреть вкладку доступа к файлу. https://technet.microsoft.com/en-us/sysinternals/bb896645 – Igor

+0

@Igor Это помогает мне, указывая, что система выполняет некоторую задачу на диске. Например, когда мне нужно обновить или установить что-то, и, похоже, это замороженный, что является самым практичным показателем такой реальной деятельности. – LuckyScooby

ответ

2

Я нашел приложение примера монитора активности жесткого диска, написанное на VB.NET. Это довольно просто, поэтому у вас не должно возникнуть проблемы с преобразованием его в C#.

Идея заключается в использовании двух счетчиков производительности, «Disk Read Bytes/сек» и «Disk Write Bytes/сек» для «LogicalDisk»

ReadCounter = New PerformanceCounter("LogicalDisk", "Disk Read Bytes/sec", "_Total") 
WriteCounter = New PerformanceCounter("LogicalDisk", "Disk Write Bytes/sec", "_Total") 

И затем в главном цикле (который должен быть threaded) вы вызываете NextValue, чтобы определить, существует ли активность диска.

R = ReadCounter.NextValue 
W = WriteCounter.NextValue 

Полный исходный код here на сайте Microsoft.

+0

потрясающий! Я адаптировал и выполнил как VB, так и C# .. они прекрасно мигают синхронно. Все, что мне нужно, это ваши фрагменты кода! знак равно – LuckyScooby