![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| NanoMax |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
К примеру, надо чтобы программа отслеживала события вставки CD-диска, чтения-записи на него, вставки-извлечении флэшки. Это можно реализовать в VB.NET?
|
|||
|
||||
| NanoMax |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Видно никак не перехватить, даже с помощью API-функций, а жаль....
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Таких событий вообще не бывает, даже на уровне операционной системы. А зачем
|
|||
|
||||
| NanoMax |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
А это - типа прога-следилка, записывает в log-файл события получения информации с внешних носителей (время события, само событие, какие файлы были переписаны). Не для досужего интереса, а для администрирования.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Юзай класс FileSystemWatcher и следи за добавлением файлов
|
|||
|
||||
| NanoMax |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
Пробовал я FileSystemWatcher - появляется целый ряд проблем. Допустим, что винчестер у нас разбит на четыре диска: C, D, E, F - для каждого из них надо запустить свой FileSystemWatcher (я что-то не нашел способа как запустить один FileSystemWatcher для всего компьютера). Хорошо - мы их запустили, обнаружили событие создания файла - вопрос: а как он был создан? С нуля, скопирован с другого локального диска, скопирован с внешнего носителя? Ответа нет - отмечено будет много лишних событий. Притом каждый FileSystemWatcher не взаимодействует с другими - и если мы копируем файл с диска C на диск D, то сработает только FileSystemWatcher на диске D. Ну а для CD-Rom (не говоря уже о флэшке) FileSystemWatcher создать невозможно.
|
|||
|
||||
| thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
Exception, Зайди в консоль "Управление компьютером" ---> "Управление дисками" выбери CD-ROM и кликни правой кнпкой мыши в контекстном меню выбери команду "Извлечь" Это что не событие на уровне системы? лоток выезжает, а при повторном нажатии заезжает. Можно и по сети так развлекаться, у соседа через стол выпустить CD-ROMчик. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
| tea_723 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Код отслеживает события CD и по CD insert выдает инфо о вставленном диске.
System.Management добавляется через Project->Add reference CD в данном проекте привязан к D:, но можно и вычислить программно, используя DriveType, DriveInfo, глянь в .Net Help Крайне не желательно запускать прогу с уже открытым лотком или прерывать, когда лоток открыт, могно повесить win explorer. Imports System Imports System.Management Namespace InsertCDNamespace Public Delegate Sub InsertCDEventHanler(ByVal iea As InsertCDEventArgs) Public Class InsertCD Public Event CDInserted As InsertCDEventHanler Public Sub StartMonitoring() While True Dim query As WqlEventQuery = New WqlEventQuery("__InstanceModificationEvent", New TimeSpan(0, 0, 1), "TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.Name='D:'") Dim watcher As ManagementEventWatcher = New ManagementEventWatcher(query) Dim e As ManagementBaseObject = watcher.WaitForNextEvent Dim iea As InsertCDEventArgs = New InsertCDEventArgs(e) Me.OnCDInserted(iea) watcher.Dispose() GC.Collect() End While End Sub Private Sub OnCDInserted(ByVal iea As InsertCDEventArgs) RaiseEvent CDInserted(iea) End Sub End Class Public Class InsertCDEventArgs Inherits EventArgs Public ReadOnly Description As String Public ReadOnly VolumeName As String Public ReadOnly VolumeSerialNumber As String Public ReadOnly Name As String Public Sub New(ByVal e As ManagementBaseObject) Me.Description = CType(TryCast((CType(e("TargetInstance"), ManagementBaseObject)("Description")), String), String) Me.VolumeName = CType(TryCast((CType(e("TargetInstance"), ManagementBaseObject)("VolumeName")), String), String) Me.VolumeSerialNumber = CType(TryCast((CType(e("TargetInstance"), ManagementBaseObject)("VolumeSerialNumber")), String), String) Me.Name = CType(TryCast((CType(e("TargetInstance"), ManagementBaseObject)("Name")), String), String) End Sub End Class End Namespace Module Module1 Public Sub Main() Dim ins As InsertCDNamespace.InsertCD = New InsertCDNamespace.InsertCD AddHandler ins.CDInserted, AddressOf Module1.handler ins.StartMonitoring() End Sub Public Sub handler(ByVal iea As InsertCDNamespace.InsertCDEventArgs) Console.WriteLine(iea.Description) Console.WriteLine(iea.Name) Console.WriteLine(iea.VolumeName) Console.WriteLine(iea.VolumeSerialNumber) End Sub End Module |
|||
|
||||
| NanoMax |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 23.8.2007 Репутация: нет Всего: нет |
tea_723 - спасибо, только у меня в данном коде ругается на оператор TryCast - это что такое?, у меня просто стоит Visual Studio 2003.
|
|||
|
||||
| tea_723 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Поменяй на CType, TryCast это почти то же самое, но не вышвыривает InvalidCastException, я на всякий пожарный его туда всунул.
|
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |