09. juni 2006 - 08:56 Der 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].

Yderliger info ???
09. juni 2006 - 13:01 #1
Hmmm...
Avatar billede ejvindh Ekspert
09. juni 2006 - 13:07 #2
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".

:-)
09. juni 2006 - 13:32 #3
... er der andre lette muligheder - som jeg selv ka' tilrette (=og forstå!) ?

Det skal bare rulle som en lav baggrunds process på en putter som også ruller andre baggrunds processer...
Avatar billede ejvindh Ekspert
09. juni 2006 - 13:58 #4
Jeg har nok desværre ikke rigtig nogle brugbare bud... Der findes jo nogle programmer, som kan gøre det allerede -- men dem jeg har kunne finde koster knaster:
http://www.activexperts.com/activmonitor/
http://www.network-eagle.com/
http://www.gfi.com/nsm/?adclickid=7480166

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.
Avatar billede ejvindh Ekspert
09. juni 2006 - 14:13 #5
Jeg er på vej ud af døren, men jeg faldt lige over noget her, som måske kunne være relevant:
http://www.newobjects.com/product.asp?ID=64

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å?
09. juni 2006 - 14:17 #6
... hmmm... bare en lille ~10-20 liniers VBCsript kode burde kunne gøre det...

Har nogle tanker om det via 'gammeldags' *.BAT/*.CMD programmering - mennnnn ...
Avatar billede ejvindh Ekspert
13. juni 2006 - 11:21 #7
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
Avatar billede ejvindh Ekspert
13. juni 2006 - 11:45 #8
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
Avatar billede ejvindh Ekspert
13. juni 2006 - 11:51 #9
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 ;-) )
Avatar billede ejvindh Ekspert
13. juni 2006 - 11:52 #10
...og det er processen Wscript.exe, der skal afsluttes (den ligger nok o. 95% i cpu-kraft)
13. juni 2006 - 12:13 #11
... 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...
Avatar billede ejvindh Ekspert
13. juni 2006 - 12:30 #12
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
16. juni 2006 - 08:21 #13
... afprøves i praksis i næste uge...
21. juni 2006 - 17:57 #14
Så er den lige ved at være der...

1) Lydfilen skal rulle X gange - evt. med mulighed for uendelig (jeg har fundet henholdsvis en ALARM.WAV + OK.WAV)

2) msgbox skal "automatisk" forsvinde/ændres når anden besked bliver aktuel - altså når chkfile skifter status (findes/ikke findes)
21. juni 2006 - 17:58 #15
Har lige opdateret POINT...
Avatar billede ejvindh Ekspert
21. juni 2006 - 20:20 #16
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.
21. juni 2006 - 21:16 #17
Tanken er:

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...
Avatar billede ejvindh Ekspert
22. juni 2006 - 13:09 #18
Det må være muligt. Jeg ser på det, men det bliver nok ikke i dag.
22. juni 2006 - 13:15 #19
(Ka' først afprøve fredag aften/nat)
Avatar billede ejvindh Ekspert
23. juni 2006 - 21:00 #20
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
23. juni 2006 - 22:46 #21
Den køber jeg - glimrende...

Fedter selv med chkfile, musicfilecreate, musicfilegone, inter efter tempement ...

PS: Hvad betyder de [64] i koden ?
23. juni 2006 - 22:48 #22
PS: http://www.eksperten.dk/spm/716209 ??? (Har du noget på den?)
Avatar billede ejvindh Ekspert
24. juni 2006 - 13:45 #23
Tallet 64 i popup-linien angiver dels hvor mange knapper der skal være at klikke på, dels hvilket ikon popuppen tilføjes. Se evt. her:
http://www.devguru.com/Technologies/wsh/quickref/wshshell_Popup.html

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 :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester