Hoppa till innehåll

  • Logga in via Facebook Logga in via Twitter Logga in via Windows Live Log In with LinkedIn Log In with Google      Logga in   
  • Registrera dig nu!

Scripta skärmsläckare + låsning på olika tider


Den här tråden har blivit arkiverad. Det betyder att du inte kan skriva något inlägg i tråden.
15 svar i denna tråden

#1 Padde

Padde

  • 1626 inlägg

Skriven 19 August 2009 - 15:38

Hejsan
 
Har en scriptfråga som jag behöver hjälp med. Ska dra igång en skärmsläckare efter 1 minut och sedan låsa datorn (eller ts-sessionen) efter 30 minuter.
Har lyckats skrapa ihop följande för test men märkte att även om jag rör musen efter 2 sekunder så låser datorn sig iaf efter 5.
Detta är ju självklart när man tittar på koden en gån till men hur kommer man runt det?

  On Error Resume Next

 Set objShell = CreateObject("Wscript.Shell")

 objShell.Run "%windir%\System32\ssText3d.scr"

 WScript.Sleep 5000

 objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation"

 
 
 
Tänkte att man kunde lägga in någon form av kontroll så att Sleep bara körs så länge ssText3d.scr körs och annars så är det exit från hela scriptet. Men hur?
Har sett att andra frågat efter hur man sätter olika tider på skärmsläckare/låsning men inga lösningar. Kan detta fixas med script så skulle det kanske hjälpa fler?
 
Antar att detta är en barnlekt för vissa här så upp till bevis ;)
 
/Patrik

#2 Markus Lassfolk

Markus Lassfolk

  • 2654 inlägg

Skriven 20 August 2009 - 13:08

Hmm, den funkar nog bara på consolen är jag rädd.

men varför vill du ha en skärmsläckare alls i en TS/Citrix session? Best practice brukar vara att disabla skärmsläckaren där för att den inte ska dra en massa onödiga resurser...

Berätta lite mer hur du tänker.

Vänligen klicka på "Gilla" om inlägget löste ditt problem.


// Markus Lassfolk
Microsoft MVP - System Center Cloud and Datacenter Management
Principal Technical Architect - TrueSec Datacenter & Cloud Team
LinkedIn | MVP | Blog | Microsoft Certified Trainer | @Lassfolk | ITProffs.se Admin

#3 Padde

Padde

  • 1626 inlägg

Skriven 20 August 2009 - 14:12

Hej igen.
 
Skärmsläckaren skall användas för att visa information om företaget från tex ledningen.
Detta kommer att göras genom att använda bildpelsskärmsläckaren i windows som visar bilder skapade från ett powerpointdokument som uppdateras ofta.
 
Därför vill de ha att den går igång efter 30sek idle men inte att datorn låser sig efter detta.
Vi har bl.a tunna terminaler därav skall den köras i citrix. Har kontrollerat och den verkar inte dra några större resurser vad jag kunde se.

Verkar som om skriptet är ända lösningen. Om nu bara någon kunde fylla i raderna som jag inte klarar skriva :)
/Patrik

#4 Padde

Padde

  • 1626 inlägg

Skriven 20 August 2009 - 11:46

Litet problem.
Ska rulla på citrixservrar men det är inte för alla användare detta skall gälla.
Provade att sätta nyckeln i HKCU men den verkar inte bita där.

Edit: Provat i HKLM med men det funkar inte där heller. Pga TS/Citrix ?
 
Även provat under shadowkeys men det funkar inte där heller.
/Patrik

#5 Markus Lassfolk

Markus Lassfolk

  • 2654 inlägg

Skriven 20 August 2009 - 11:24

Får jag tipsa om en "bättre" eller i alla fall annan lösning på problemet?

Använd den här Registry nyckeln,
http://technet.micro.../cc785331(WS.10).aspx

Om jag fattade rätt, så kan du då ha skärmsläckaren så den slår igång efter 1 minut, men först 10 minuter senare krävs det att man låser upp datorn. Rör du musen innan dess så behöver du inte ange lösenord.


Description
Specifies when password protection of a screen saver becomes effective. This entry specifies the delay between the appearance of a password-protected screen saver and the enforcement of the password requirement.

Password protection of a screen saver is not effective immediately. By default, a brief period elapses within which the user can use the mouse or the keyboard to stop the screen saver without entering the password. This delay is designed to minimize the disruption that results when the screen saver starts while the user is working.

You can add this entry to the registry to adjust the length of the delay. To make password protection effective immediately, set the value of this entry to 0x0.

Vänligen klicka på "Gilla" om inlägget löste ditt problem.


// Markus Lassfolk
Microsoft MVP - System Center Cloud and Datacenter Management
Principal Technical Architect - TrueSec Datacenter & Cloud Team
LinkedIn | MVP | Blog | Microsoft Certified Trainer | @Lassfolk | ITProffs.se Admin

#6 Padde

Padde

  • 1626 inlägg

Skriven 20 August 2009 - 11:27

Nämen, det är ju underbart om det funkar.
Hur f*n kunde jag missa detta.
 
Återkommer efter test.
/Patrik

#7 Markus Lassfolk

Markus Lassfolk

  • 2654 inlägg

Skriven 20 August 2009 - 11:33

heheh, det är väl inte direkt en av de mest kända registrynycklarna, så var inte för hård mot dig själv  :)

Vänligen klicka på "Gilla" om inlägget löste ditt problem.


// Markus Lassfolk
Microsoft MVP - System Center Cloud and Datacenter Management
Principal Technical Architect - TrueSec Datacenter & Cloud Team
LinkedIn | MVP | Blog | Microsoft Certified Trainer | @Lassfolk | ITProffs.se Admin

#8 martenrune

martenrune

  • 622 inlägg

Skriven 20 August 2009 - 15:45

Se nästa inlägg istället.

Admin kan ta bort detta inlägget om de vill.

/Mårten

#9 martenrune

martenrune

  • 622 inlägg

Skriven 20 August 2009 - 15:57

Men skärmsläckaren försvinner efter den tid du satt (ca 30 min ville du ju ha)

Så detta script fixar om du vill att det skall rulla tills någon gör något annat:

 On Error Resume Next

 Set objShell = CreateObject("Wscript.Shell")

 objShell.Run "%windir%\System32\ssText3d.scr"

 WScript.Sleep 5000

 if fCheckIfProcessIsRunning("ssText3d.scr",".") = 1 then

 'Här är problemet att låsningen tar bort skärmsläckaren så en loop till blir lösningen

 do until fCheckIfProcessIsRunning("ssText3d.scr",".") = 0

 WScript.Sleep 500

 loop

 objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation", 0, False

 

 end if

 

 

 

 function fCheckIfProcessIsRunning(strName,strComputer)

 dim objWMIService, colProcessList, objProcess 

 Set objWMIService = GetObject("winmgmts:" _

  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

 Set colProcessList = objWMIService.ExecQuery _

  ("SELECT * FROM Win32_Process WHERE Name = '" & strName & "'")

 For Each objProcess in colProcessList

  fCheckIfProcessIsRunning = objProcess.HANDLE

  If fCheckIfProcessIsRunning = Null Then

 	 fCheckIfProcessIsRunning = 0

  Else

 	 fCheckIfProcessIsRunning = 1

  End if 

 Next

 end Function

 

/Mårten

#10 Padde

Padde

  • 1626 inlägg

Skriven 20 August 2009 - 16:10

Hej
 
Väldigt tacksam men blir det där verkligen rätt?
 
Jag hade tänkt mig någonting som
1 startar skärmsläckaren
2 väntar 30 minuter och sedan låser datorn såvida under dessa 30min man inte rör musen och skärmsläckaren stoppar, då skall skriptet avslutas.
 
Ser inget med 30 min i ditt script.
Kommer inte ditt skript även att fortsätta köra fast man har rört musen och skärmsläckaren stoppat? (Mina programeringskunskaper är riktigt usla så ha tålamod ;) )
 
 
/Patrik

#11 martenrune

martenrune

  • 622 inlägg

Skriven 20 August 2009 - 16:28

du får ändra:
WScript.Sleep 5000
vilket är 5 sekunder till
WScript.Sleep 1800000
vilket är 30 minuter

Nu körs start av skärmsläckaren.
Sedan väntar scriptet 30 minuter
Sedan görs valet:
Om skärmsläckaren inte är igång, händer inget
Annars
Ny loop som känner av när skärmsläckaren försvinner, den kollar med intervallet
WScript.Sleep 500
Dvs 1/2 sekunds intervall.
När skärmsläckaren försvinner körs
objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation", 0, False
DVS datorn låses
Och scriptet har inte fler rader = slut på skriptet.

MVH Mårten

#12 Padde

Padde

  • 1626 inlägg

Skriven 20 August 2009 - 17:27

Ok, men vad händer om samma användare idlar 2 min, arbetar, idlar 2 min, arbetar,  idlar 2min
Kommer det ligga 3st script att sleepa 30,28,26 min då i väntan på att den skall kolla om skärmsläckaren fortfarande körs ?
 
 
/Patrik

#13 martenrune

martenrune

  • 622 inlägg

Skriven 21 August 2009 - 00:34

Naturligtvis blir det så. Alltså måste processens status kontrolleras under resans gång, dvs medan man väntar på att de 30 minuterna eller vad man väljer löper ut. För att sedan vänta tills processen avslutas innan den låser burken. Eftersom skärmsläckaren försvinner när burken låses.

Nåt i stil med:

 Option explicit

 dim intTimeBeforeComputerLocks, intThresholdTest, objShell, strProcessName

 strProcessName = "ssText3d.scr"

 intTimeBeforeComputerLocks = 1800000

 intThresholdTest = 0

 

 Set objShell = CreateObject("Wscript.Shell")

 objShell.Run "%windir%\System32\" & strProcessName, 0, False

 

 do until intThresholdTest > intTimeBeforeComputerLocks 

 if fCheckIfProcessIsRunning(strProcessName,".") = 0 then

 Set objShell = nothing

 wscript.quit

 end if

 WScript.Sleep 500

 intThresholdTest = intThresholdTest + 500

 loop

 

 'Här är problemet att låsningen tar bort skärmsläckaren så en loop till blir lösningen

 do until fCheckIfProcessIsRunning(strProcessName ,".") = 0

 WScript.Sleep 500

 loop

 

 objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation", 0, False

 Set objShell = nothing

 

 

 

 function fCheckIfProcessIsRunning(strName,strComputer)

 dim objWMIService, colProcessList, objProcess 

 Set objWMIService = GetObject("winmgmts:" _

  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

 Set colProcessList = objWMIService.ExecQuery _

  ("SELECT * FROM Win32_Process WHERE Name = '" & strName & "'")

 For Each objProcess in colProcessList

  fCheckIfProcessIsRunning = objProcess.HANDLE

  If fCheckIfProcessIsRunning = Null Then

 	 fCheckIfProcessIsRunning = 0

  Else

 	 fCheckIfProcessIsRunning = 1

  End if 

 Next

 end Function

 

Mer anpassningar kostar minst ett par bira :-)
/Mårten

(Will code for beer) *smile*

#14 Padde

Padde

  • 1626 inlägg

Skriven 21 August 2009 - 08:38

Hej och tack så jättemycket.
 
Verkar funka precis så som jag vill. Har bara testat lite snabbt nu genom att köra vbs-filen men skall göra ett riktigt test senare idag.
Kommer du till falkenberg ska du få några öl.
/Patrik

#15 martenrune

martenrune

  • 622 inlägg

Skriven 21 August 2009 - 11:37

Kul att det fungerar.

Falkenberg ser ju fint ut. Om jag kommer inärheten hör jag av mig. Kul att ses AFK.

/Mårten

#16 Padde

Padde

  • 1626 inlägg

Skriven 02 October 2009 - 09:42

Hej
 
Har upptäckt ett problem när två användare på samma TS använder detta.
Misstänker att skriptet inte tar hänsyn till att det körs på terminalserver med flera användare ?
/Patrik