09. juni 2006 - 08:56Der er
21 kommentarer og 2 løsninger
Visuel/aukustisk alarm når en bestemt fil oprettes/slettes
... altså et lille script som ruller i baggrunden og med X tids mellemrum checke om en valgfri fil findes (og er størrer en NUL). I praksis et bestemt sted på et mappet netværksdrev.
Hvis/når den findes skal der dukke en pæn (blinkende alarm?) box op på skærmen med bla. dato/klokkeslet. [OK]. Der skal også aktiveres en valgfri *.WAV fil for aukustisk alarm, den skal aktiveres X gange. (altså ikke blive ved med at 'hyle').
Når den valgfrie fil forsvinder igen skal der aktiveres en anden besked op på skærmen med bla. dato/klokkeslet. [OK]. Samt aktiveres en anden valgfri *.WAV fil for aukustisk alarm, den skal aktiveres X gange. (altså ikke blive ved med at 'hyle'). [OK].
Min umiddelbare reaktion på dit spørgsmål er nok, at dette er vbscript ikke rigtig egnet til. Du kan selvfølgelig godt lave et script, som kører i loops, og som kører hele tiden på computeren. Og hvis man gjorde dette, kunne man også forholdsvis nemt lave de ting, som du efterlyser.
Personligt synes jeg bare at vbscript bruger for mange ressourcer, imens det kører, til at jeg synes det er hensigtsmæssigt at have kørende "i baggrunden".
Alternativt kunne du selvfølgelig også prøve at kombinere det med et "Scheduled Task". Men det kommer an på, hvor ofte checket skal laves. Scheduled Tasks kan programmeres ned til at køre på minut-basis. Men hvis du skal så langt ned i interval er spørgsmålet selvfølgelig nok om det ikke i sidste ende kommer til at være ligeså ressourcekrævende som bare at lade scriptet køre hele tiden.
Så vidt jeg lige kan se, kan du bruge dette program til at køre vbs-filer som services -- og vel at mærke med passende intervaller. Det var måske noget at arbejde videre på?
Ok, men så kan du jo prøve dette. Jeg er bare ret sikker på, at du hurtigt bliver træt af det...
6.-8. linie skal naturligvis tilrettes til dine specifikke behov. --------------------------------- Dim Wshshell, fso Set WshShell = Wscript.CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject")
Dim chkfile, musicfilegone, musicfilecreate, syst chkfile = "c:\log.txt" musicfilegone = """C:\windows\Media\Windows XP Start.wav""" musicfilecreate = """C:\windows\Media\Windows XP Start.wav""" Syst = fso.GetSpecialFolder(1)
do until 1 = 2 If fso.FileExists(chkfile) = TRUE Then chkfilegone Else chkfilecreate End if loop
Public Function chkfilegone do until fso.FileExists(chkfile) = FALSE loop WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilegone, 0 msgbox "Filen er blevet slettet" & chr(13) & date & chr(13) & time End Function
Public Function chkfilecreate do until fso.FileExists(chkfile) = TRUE loop WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilecreate, 0 msgbox "Filen er blevet oprettet" & chr(13) & date & chr(13) & time End Function
Hvis du vil have en version, der er mindre ressourcekrævende, skal du som sagt have fat i noget, der kan "aktivere" dette script med jævne mellemrum. Det ser ud til, at du burde kunne få newobjects-værktøjet til at gøre dette. I så fald skal du modificere scriptet lidt (så den kun tjekker for eksistensen af filen én gang pr. kørsel: --------------------------------- Dim Wshshell, fso Set WshShell = Wscript.CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject")
Dim chkfile, musicfilegone, musicfilecreate, syst chkfile = "c:\log.txt" musicfilegone = """C:\windows\Media\Windows XP Start.wav""" musicfilecreate = """C:\windows\Media\Windows XP Start.wav""" Syst = fso.GetSpecialFolder(1)
If fso.FileExists(chkfile) = TRUE Then chkfilegone Else chkfilecreate End if
Public Function chkfilegone WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilegone, 0 msgbox "Filen er blevet slettet" & chr(13) & date & chr(13) & time End Function
Public Function chkfilecreate WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilecreate, 0 msgbox "Filen er blevet oprettet" & chr(13) & date & chr(13) & time End Function
I øvrigt. Hvis du kører det første script, skal du ind i joblisten for at deaktivere det igen. Man kan selvfølgelig indbygge en mere handy udstignings-rutine, men det har jeg ikke gjort, da du ikke nævnte det (og jeg tror du hurtigt vil kassere denne løsning alligevel ;-) )
... ser lovende ud ... har først mulighed for at afprøve sidst på ugen...
PS: Den ruller altså rundt i en Loop - eller hyr ? Der må (=skal) være en form for pause på X sekunder mellem hvert filcheck aht. resourser. Det er i praksis et netværkssted der skal checkes ved...
Det havde jeg ikke lige tænkt på. Variablen "inter" afgør hvor mange millisekunder, der skal være mellem hvert check (så bliver ressourceforbruget også noget lavere...):
--------------------------------- Dim Wshshell, fso Set WshShell = Wscript.CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject")
Dim chkfile, musicfilegone, musicfilecreate, syst, inter chkfile = "c:\log.txt" musicfilegone = """C:\windows\Media\Windows XP Start.wav""" musicfilecreate = """C:\windows\Media\Windows XP Start.wav""" Syst = fso.GetSpecialFolder(1) inter = 1000
do until 1 = 2 If fso.FileExists(chkfile) = TRUE Then chkfilegone Else chkfilecreate End if loop
Public Function chkfilegone do until fso.FileExists(chkfile) = FALSE wscript.sleep inter loop WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilegone, 0 msgbox "Filen er blevet slettet" & chr(13) & date & chr(13) & time End Function
Public Function chkfilecreate do until fso.FileExists(chkfile) = TRUE wscript.sleep inter loop WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilecreate, 0 msgbox "Filen er blevet oprettet" & chr(13) & date & chr(13) & time End Function
Ang. pkt1, så kan det lade sig gøre, men det bliver rimelig kompliceret, hvis du også vil have pkt2 med. Det hænger sammen med, at der i vbs ikke findes en funktion, der kan fjerne en besked på den måde. Enten skal der klikkes noget, eller også skal der gå et bestemt tidsinterval. Det simpleste ville helt klart være, hvis du kunne lægge disse loops ind i selve lydfilen.
Ang. pkt2, så kan jeg tilnærme det du ønsker. Men det kommer til at fremstå således at popuppen kort forsvinder, og hurtigt dukker op igen. Så vidt jeg ved kan man kun fjerne en meddelelse i vbscript ved enten at klikke noget, eller ved at have foruddefineret et antal sekunder, hvorefter den automatisk forsvinder. Så kan jeg lave det sådan at der i den korte tid, hvor popuppen er væk, bliver checket for forandringer.
Problemet er at vbscript simpelthen bremses sålænge der er en popup (uanset om du bruger echo, msgbox eller popup).
Hvis du holder fast i begge punkter, må du gerne skrive hvor mange sekunder dine lyd-filer kører over. Så vil jeg sætte popuppens efterprøvningsinterval efter denne tid.
Der holdes øje med chkfile ; eks med 30 sek. intervald.
Hvis den ikke findes (fra starten af) skal der sådan set ikke komme nogen besked eller lyd. Men bare checke igen efter de nævnte ~30 sek. Foreløbigt "lydløst/usynligt"...
Hvis den oprettes skal ALARM.WAV rulle én gang; vente ~10 sek.; check om chkfile stadig er der skal ALARM.WAV rulle én gang; vente ~10 sek.; osv... Gerne med en eller anden visuel besked på skærmen, som selv skal forsvinde (eller ihvertifald ikke forhindre videre kørsel).
Hvis/når chkfile forsvinder skal ovenstående ALARM.WAV/besked stoppe og OK.WAV rulle én gang. Gerne med en eller anden visuel besked på skærmen, som selv skal forsvinde (eller ihvertifald ikke forhindre videre kørsel).
Derefter til starten igen...
PS: Beskeden på skærmen - ka' det gøres med STOR tekst/font ?
PS(2): chkfile + dette VBS program + *.WAV filerne ligger i praksis på en server - det virker fint nok...
Nu tror jeg, at jeg fik det på plads. Det med ændringer i fonten kan (så vidt jeg ved) ikke lade sig gøre.
------------------------ Dim Wshshell, fso Set WshShell = Wscript.CreateObject("Wscript.Shell") Set fso = CreateObject("Scripting.FileSystemObject")
Dim chkfile, musicfilegone, musicfilecreate, syst, inter, timestamp chkfile = "c:\log.txt" musicfilegone = """C:\windows\Media\Windows XP Start.wav""" musicfilecreate = """C:\windows\Media\Windows XP Start.wav""" Syst = fso.GetSpecialFolder(1) inter = 3000
do until fso.FileExists(chkfile) = TRUE wscript.sleep inter loop
do until 1 = 2 If fso.FileExists(chkfile) = TRUE Then fileexist Else filenotexist End if wscript.sleep inter loop
Public Function fileexist timestamp = date & chr(13) & time do until fso.FileExists(chkfile) = FALSE WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilecreate, 0 WshShell.popup "Filen eksisterer" & chr(13) & "Siden:" & chr(13) & timestamp, 10,"Filen eksisterer", 64 loop End Function
Public Function filenotexist timestamp = date & chr(13) & time WshShell.Run Syst & "\sndrec32.exe /play /close " & musicfilegone, 0 WshShell.popup "Filen eksisterer ikke mere" & chr(13) & "Siden:" & chr(13) & timestamp, 10,"Filen eksisterer ikke", 64 do until fso.FileExists(chkfile) = TRUE wscript.sleep inter loop End Function
Tallet 10 i samme linie indikerer, hvor længe popuppen skal stå, inden et nyt check laves. Den kan du også stille på som du vil. Men i "fileexist"-funktionen vil jeg nok anbefale dig ikke at gøre den kortere end længden på wav-filen. Ellers vil der nemlig efterhånden opstå en "kø" af lydfiler, der spiller videre, selvom filen er blevet fjernet.
Takker for point :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.