I have the code below and it does what i want except for one thing and I
can't for the life of me figure it out. It makes multiple copies of the
entries in the Event Log and sends multiple emails. I would appreciate
any help in figuring out what is going on.
Thanks.
---- Begin Code ----
Imports System
Imports System.IO
Imports System.Diagnost ics
Imports Microsoft.Win32
Imports System.Web.Mail
Public Class Form1
Inherits System.Windows. Forms.Form
Public watchfolder As FileSystemWatch er
Public exeWatcher As FileSystemWatch er
Public batWatcher As FileSystemWatch er
Public scrWatcher As FileSystemWatch er
Public m As New System.Web.Mail .MailMessage()
Public strComputer As String
Public strUser As String
Public strLogMsg As String
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeCompo nent()
'Add any initialization after the InitializeCompo nent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As
Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Disp ose()
End If
End If
MyBase.Dispose( disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.Componen tModel.IContain er
'NOTE: The following procedure is required by the Windows Form
Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents Label1 As System.Windows. Forms.Label
Friend WithEvents txt_watchpath As System.Windows. Forms.TextBox
Friend WithEvents btn_startwatch As System.Windows. Forms.Button
Friend WithEvents btn_stop As System.Windows. Forms.Button
Friend WithEvents Label2 As System.Windows. Forms.Label
Friend WithEvents txt_folderactiv ity As System.Windows. Forms.TextBox
Friend WithEvents ContextMenu1 As System.Windows. Forms.ContextMe nu
Friend WithEvents MenuItem1 As System.Windows. Forms.MenuItem
Friend WithEvents MenuItem2 As System.Windows. Forms.MenuItem
Friend WithEvents nfi As System.Windows. Forms.NotifyIco n
Friend WithEvents Button1 As System.Windows. Forms.Button
<System.Diagnos tics.DebuggerSt epThrough()> Private Sub
InitializeCompo nent()
Me.components = New System.Componen tModel.Containe r()
Dim resources As System.Resource s.ResourceManag er = New
System.Resource s.ResourceManag er(GetType(Form 1))
Me.Label1 = New System.Windows. Forms.Label()
Me.txt_watchpat h = New System.Windows. Forms.TextBox()
Me.btn_startwat ch = New System.Windows. Forms.Button()
Me.btn_stop = New System.Windows. Forms.Button()
Me.Label2 = New System.Windows. Forms.Label()
Me.txt_folderac tivity = New System.Windows. Forms.TextBox()
Me.ContextMenu1 = New System.Windows. Forms.ContextMe nu()
Me.MenuItem2 = New System.Windows. Forms.MenuItem( )
Me.MenuItem1 = New System.Windows. Forms.MenuItem( )
Me.nfi = New System.Windows. Forms.NotifyIco n(Me.components )
Me.Button1 = New System.Windows. Forms.Button()
Me.SuspendLayou t()
'
'Label1
'
Me.Label1.Locat ion = New System.Drawing. Point(16, 32)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing. Size(120, 16)
Me.Label1.TabIn dex = 0
Me.Label1.Text = "Type Folder to Watch:"
'
'txt_watchpath
'
Me.txt_watchpat h.Enabled = False
Me.txt_watchpat h.Location = New System.Drawing. Point(136, 32)
Me.txt_watchpat h.Name = "txt_watchp ath"
Me.txt_watchpat h.Size = New System.Drawing. Size(216, 20)
Me.txt_watchpat h.TabIndex = 1
Me.txt_watchpat h.Text = "TextBox1"
'
'btn_startwatch
'
Me.btn_startwat ch.FlatStyle =
System.Windows. Forms.FlatStyle .Flat
Me.btn_startwat ch.Location = New System.Drawing. Point(136, 64)
Me.btn_startwat ch.Name = "btn_startwatch "
Me.btn_startwat ch.Size = New System.Drawing. Size(88, 23)
Me.btn_startwat ch.TabIndex = 2
Me.btn_startwat ch.Text = "Start Watching"
'
'btn_stop
'
Me.btn_stop.Fla tStyle = System.Windows. Forms.FlatStyle .Flat
Me.btn_stop.Loc ation = New System.Drawing. Point(232, 64)
Me.btn_stop.Nam e = "btn_stop"
Me.btn_stop.Siz e = New System.Drawing. Size(88, 23)
Me.btn_stop.Tab Index = 3
Me.btn_stop.Tex t = "Stop Watching"
'
'Label2
'
Me.Label2.AutoS ize = True
Me.Label2.Locat ion = New System.Drawing. Point(16, 80)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing. Size(79, 13)
Me.Label2.TabIn dex = 4
Me.Label2.Text = "Folder Activity:"
'
'txt_folderacti vity
'
Me.txt_folderac tivity.Location = New System.Drawing. Point(16,
104)
Me.txt_folderac tivity.Multilin e = True
Me.txt_folderac tivity.Name = "txt_folderacti vity"
Me.txt_folderac tivity.Size = New System.Drawing. Size(448, 152)
Me.txt_folderac tivity.TabIndex = 5
Me.txt_folderac tivity.Text = "TextBox2"
'
'ContextMenu1
'
Me.ContextMenu1 .MenuItems.AddR ange(New
System.Windows. Forms.MenuItem( ) {Me.MenuItem2, Me.MenuItem1})
'
'MenuItem2
'
Me.MenuItem2.In dex = 0
Me.MenuItem2.Te xt = "&Restore"
'
'MenuItem1
'
Me.MenuItem1.In dex = 1
Me.MenuItem1.Te xt = "&Exit"
'
'nfi
'
Me.nfi.ContextM enu = Me.ContextMenu1
Me.nfi.Icon = CType(resources .GetObject("nfi .Icon"),
System.Drawing. Icon)
Me.nfi.Text = "Folder Watcher"
Me.nfi.Visible = True
'
'Button1
'
Me.Button1.Flat Style = System.Windows. Forms.FlatStyle .Flat
Me.Button1.Loca tion = New System.Drawing. Point(368, 32)
Me.Button1.Name = "Button1"
Me.Button1.TabI ndex = 6
Me.Button1.Text = "Change"
'
'Form1
'
Me.AutoScaleBas eSize = New System.Drawing. Size(5, 13)
Me.ClientSize = New System.Drawing. Size(480, 273)
Me.Controls.Add Range(New System.Windows. Forms.Control()
{Me.Button1, Me.txt_folderac tivity, Me.Label2, Me.btn_stop,
Me.btn_startwat ch, Me.txt_watchpat h, Me.Label1})
Me.Icon = CType(resources .GetObject("$th is.Icon"),
System.Drawing. Icon)
Me.MaximizeBox = False
Me.Name = "Form1"
Me.StartPositio n =
System.Windows. Forms.FormStart Position.Center Screen
Me.Text = "Folder Watcher"
Me.WindowState = System.Windows. Forms.FormWindo wState.Minimize d
Me.ResumeLayout (False)
End Sub
#End Region
Private Sub Form1_Load(ByVa l sender As System.Object, ByVal e As
System.EventArg s) Handles MyBase.Load
Dim objKey As RegistryKey
Dim objUserKey As RegistryKey
txt_folderactiv ity.Text = ""
txt_watchpath.T ext = "c:\"
nfi.Visible = False
objKey = Registry.LocalM achine.OpenSubK ey _
("SYSTEM\Curren tControlSet\Con trol\ComputerNa me\ComputerName " _
, False)
objUserKey = Registry.LocalM achine.OpenSubK ey _
("SYSTEM\Curren tControlSet\Con trol", False)
strComputer = Convert.ToStrin g(objKey.GetVal ue _
("ComputerName" , ""))
strUser = System.Environm ent.UserName
'Click Event copied from btn_startwatch
If txt_watchpath.E nabled = True Then
txt_watchpath.E nabled = False
End If
watchfolder = New System.IO.FileS ystemWatcher()
exeWatcher = New System.IO.FileS ystemWatcher()
batWatcher = New System.IO.FileS ystemWatcher()
scrWatcher = New System.IO.FileS ystemWatcher()
'this is the path we want to monitor
watchfolder.Pat h = txt_watchpath.T ext
exeWatcher.Path = txt_watchpath.T ext
batWatcher.Path = txt_watchpath.T ext
scrWatcher.Path = txt_watchpath.T ext
watchfolder.Inc ludeSubdirector ies = True
exeWatcher.Incl udeSubdirectori es = True
batWatcher.Incl udeSubdirectori es = True
scrWatcher.Incl udeSubdirectori es = True
watchfolder.Fil ter = "*.cmd"
exeWatcher.Filt er = "*.exe"
batWatcher.Filt er = "*.bat"
scrWatcher.Filt er = "*.scr"
'Add a list of Filters we want to specify
'make sure you use OR for each filter as we need to all of those
watchfolder.Not ifyFilter = IO.NotifyFilter s.DirectoryName
exeWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
batWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
scrWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
watchfolder.Not ifyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
exeWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
batWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
scrWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
watchfolder.Not ifyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
exeWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
batWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
scrWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
'add the handler to each event
AddHandler watchfolder.Cha nged, AddressOf logchange
AddHandler exeWatcher.Chan ged, AddressOf logchange
AddHandler batWatcher.Chan ged, AddressOf logchange
AddHandler scrWatcher.Chan ged, AddressOf logchange
AddHandler watchfolder.Cre ated, AddressOf logchange
AddHandler exeWatcher.Crea ted, AddressOf logchange
AddHandler batWatcher.Crea ted, AddressOf logchange
AddHandler scrWatcher.Crea ted, AddressOf logchange
AddHandler watchfolder.Del eted, AddressOf logchange
AddHandler exeWatcher.Dele ted, AddressOf logchange
AddHandler batWatcher.Dele ted, AddressOf logchange
AddHandler scrWatcher.Dele ted, AddressOf logchange
'add the rename handler as the signature is differnet
AddHandler watchfolder.Ren amed, AddressOf logrename
AddHandler exeWatcher.Rena med, AddressOf logrename
AddHandler batWatcher.Rena med, AddressOf logrename
AddHandler scrWatcher.Rena med, AddressOf logrename
'set this property to true to start watching
watchfolder.Ena bleRaisingEvent s = True
exeWatcher.Enab leRaisingEvents = True
batWatcher.Enab leRaisingEvents = True
scrWatcher.Enab leRaisingEvents = True
btn_startwatch. Enabled = False
btn_stop.Enable d = True
If Me.WindowState = FormWindowState .Minimized Then
Me.Visible = False
nfi.Visible = True
End If
End Sub
Private Sub btn_startwatch_ Click(ByVal sender As Object, ByVal e As
System.EventArg s) Handles btn_startwatch. Click
If txt_watchpath.E nabled = True Then
txt_watchpath.E nabled = False
End If
watchfolder = New System.IO.FileS ystemWatcher()
exeWatcher = New System.IO.FileS ystemWatcher()
batWatcher = New System.IO.FileS ystemWatcher()
scrWatcher = New System.IO.FileS ystemWatcher()
'this is the path we want to monitor
watchfolder.Pat h = txt_watchpath.T ext
exeWatcher.Path = txt_watchpath.T ext
batWatcher.Path = txt_watchpath.T ext
scrWatcher.Path = txt_watchpath.T ext
watchfolder.Inc ludeSubdirector ies = True
exeWatcher.Incl udeSubdirectori es = True
batWatcher.Incl udeSubdirectori es = True
scrWatcher.Incl udeSubdirectori es = True
watchfolder.Fil ter = "*.cmd"
exeWatcher.Filt er = "*.exe"
batWatcher.Filt er = "*.bat"
scrWatcher.Filt er = "*.scr"
'Add a list of Filters we want to specify
'make sure you use OR for each filter as we need to all of those
watchfolder.Not ifyFilter = IO.NotifyFilter s.DirectoryName
exeWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
batWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
scrWatcher.Noti fyFilter = IO.NotifyFilter s.DirectoryName
watchfolder.Not ifyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
exeWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
batWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
scrWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.FileName
watchfolder.Not ifyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
exeWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
batWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
scrWatcher.Noti fyFilter = watchfolder.Not ifyFilter Or _
IO.NotifyFilter s.Attributes
'add the handler to each event
AddHandler watchfolder.Cha nged, AddressOf logchange
AddHandler exeWatcher.Chan ged, AddressOf logchange
AddHandler batWatcher.Chan ged, AddressOf logchange
AddHandler scrWatcher.Chan ged, AddressOf logchange
AddHandler watchfolder.Cre ated, AddressOf logchange
AddHandler exeWatcher.Crea ted, AddressOf logchange
AddHandler batWatcher.Crea ted, AddressOf logchange
AddHandler scrWatcher.Crea ted, AddressOf logchange
AddHandler watchfolder.Del eted, AddressOf logchange
AddHandler exeWatcher.Dele ted, AddressOf logchange
AddHandler batWatcher.Dele ted, AddressOf logchange
AddHandler scrWatcher.Dele ted, AddressOf logchange
'add the rename handler as the signature is different
AddHandler watchfolder.Ren amed, AddressOf logrename
AddHandler exeWatcher.Rena med, AddressOf logrename
AddHandler batWatcher.Rena med, AddressOf logrename
AddHandler scrWatcher.Rena med, AddressOf logrename
'set this property to true to start watching
watchfolder.Ena bleRaisingEvent s = True
exeWatcher.Enab leRaisingEvents = True
batWatcher.Enab leRaisingEvents = True
scrWatcher.Enab leRaisingEvents = True
btn_startwatch. Enabled = False
btn_stop.Enable d = True
End Sub
Private Sub btn_stop_Click( ByVal sender As Object, ByVal e As
System.EventArg s) Handles btn_stop.Click
If txt_watchpath.E nabled = False Then
txt_watchpath.E nabled = True
End If
watchfolder.Ena bleRaisingEvent s = False
exeWatcher.Enab leRaisingEvents = False
batWatcher.Enab leRaisingEvents = False
scrWatcher.Enab leRaisingEvents = False
btn_startwatch. Enabled = True
btn_stop.Enable d = False
End Sub
Private Sub logchange(ByVal source As Object, ByVal e As
System.IO.FileS ystemEventArgs)
If e.ChangeType = IO.WatcherChang eTypes.Changed Then
strLogMsg &= vbCrLf & strUser & " on " & strComputer & " -
File " & e.FullPath & _
" has been modified - " & Now()
ElseIf e.ChangeType = IO.WatcherChang eTypes.Created Then
strLogMsg &= vbCrLf & strUser & " on " & strComputer & " -
File " & e.FullPath & _
" has been created - " & Now()
Else
If e.ChangeType = IO.WatcherChang eTypes.Deleted Then
strLogMsg &= vbCrLf & strUser & " on " & strComputer & "
- File " & e.FullPath & _
" has been deleted - " & Now()
End If
End If
SaveTextToFile( strLogMsg, "C:\Log.txt ")
LognEmail(strLo gMsg)
strLogMsg = ""
End Sub
Public Sub logrename(ByVal source As Object, ByVal e As
System.IO.Renam edEventArgs)
strLogMsg &= vbCrLf & strUser & " on " & strComputer & " - File
" & e.OldName & _
" has been renamed to " & e.Name & vbCrLf
LognEmail(strLo gMsg)
strLogMsg = ""
End Sub
Private Sub nfi_DoubleClick (ByVal sender As Object, ByVal e As
System.EventArg s) Handles nfi.DoubleClick
Me.Visible = True
Me.WindowState = FormWindowState .Normal
nfi.Visible = False
End Sub
Private Sub MenuItem1_Click (ByVal sender As Object, ByVal e As
System.EventArg s) Handles MenuItem1.Click
Me.Close()
End Sub
Private Sub MenuItem2_Click (ByVal sender As Object, ByVal e As
System.EventArg s) Handles MenuItem2.Click
Me.Visible = True
Me.WindowState = FormWindowState .Normal
nfi.Visible = False
End Sub
Private Sub Form1_MinimumSi zeChanged(ByVal sender As Object, ByVal e
As System.EventArg s) Handles MyBase.MinimumS izeChanged
End Sub
Private Sub Form1_Resize(By Val sender As Object, ByVal e As
System.EventArg s) Handles MyBase.Resize
If Me.WindowState = FormWindowState .Minimized Then
Me.Visible = False
nfi.Visible = True
End If
End Sub
Private Sub nfi_Click(ByVal sender As Object, ByVal e As
System.EventArg s) Handles nfi.Click
End Sub
Function GetEmbeddedIcon (ByVal strName As String) As Icon
Return New
Icon(System.Ref lection.Assembl y.GetExecutingA ssembly.GetMani festResource
Stream(strName) )
End Function
Public Function GetFileContents (ByVal FullPath As String, _
Optional ByRef ErrInfo As String = "") As String
Dim strContents As String
Dim objReader As StreamReader
Try
objReader = New StreamReader(Fu llPath)
strContents = objReader.ReadT oEnd()
objReader.Close ()
Return strContents
Catch Ex As Exception
ErrInfo = Ex.Message
End Try
End Function
Public Function SaveTextToFile( ByVal strData As String, _
ByVal FullPath As String, _
Optional ByVal ErrInfo As String = "") As Boolean
Dim Contents As String
Dim bAns As Boolean = False
Dim objReader As StreamWriter
Try
objReader = New StreamWriter(Fu llPath, True)
objReader.Write (strData)
objReader.Close ()
bAns = True
Catch Ex As Exception
ErrInfo = Ex.Message
End Try
Return bAns
End Function
Public Function LognEmail(ByVal strMessage As String)
Dim sSource As String
Dim sLog As String
Dim sEvent As String
sSource = "FolderWatc her"
sLog = "System"
sEvent = strMessage
If Not EventLog.Source Exists(sSource) Then
EventLog.Create EventSource(sSo urce, sLog)
End If
'EventLog.Write Entry(sSource, sEvent)
EventLog.WriteE ntry(sSource, sEvent, EventLogEntryTy pe.Warning,
234)
With m
.From = strUser & "@mcglinchey.co m"
.To = "jg*******@mcgl inchey.com"
'.CC = "jr***@mcglinch ey.com"
.Subject = "FolderWatc her Notification"
.Body = sEvent
.Priority = MailPriority.Hi gh
End With
SmtpMail.SmtpSe rver = "mail.mcglinche y.com"
SmtpMail.Send(m )
strLogMsg = ""
End Function
Private Sub Button1_Click(B yVal sender As System.Object, ByVal e As
System.EventArg s) Handles Button1.Click
txt_watchpath.E nabled = True
txt_watchpath.S electAll()
End Sub
End Class
---- End Code ----
*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!