none
Bildschirm sperren RRS feed

  • Frage

  • Hallo,

    ich würde gerne ein Skript schreiben, dass ich in eine Installationsroutine mit einbinde, sodass während der Installation keine Maus+Tastatureingaben möglich sind.

    Dazu habe ich nun folgendes bereits:

    Add-Type -AssemblyName PresentationFramework    
            function Lock-Screen([ScriptBlock] $Payload={Start-Sleep -Seconds 5}, $Title='Busy, go away.'){
        try
        {
          $window = New-Object Windows.Window
          $label = New-Object Windows.Controls.Label

          $label.Content = $Title
          $label.FontSize = 50
          $label.FontFamily = 'Consolas'
          $label.Background = 'Transparent'
          $label.Foreground = 'Red'
          $label.HorizontalAlignment = 'Center'
          $label.VerticalAlignment = 'Center'

          $Window.AllowsTransparency = $True
          $Window.Opacity = .7
          $window.WindowStyle = 'None'
          $window.Content = $label
          $window.Left = $window.Top = 0
          $window.WindowState = 'Maximized'
          $window.Topmost = $true

          $null = $window.Show()
          Invoke-Command -ScriptBlock $Payload
        }
       finally { $window.Close() }
    }
            
            $Job =
            {
            Execute-MSI -Action Install -Path 'Test.msi' -Parameters '/QN'
            }
            
            Lock-Screen -Payload $job -Title 'Programm wird installiert'

    Nun ist das Problem, dass der Bildschirm zwar grau wird und die Nachricht "Programm wird installiert" angezeigt wird, aber wenn ich nur einen Doppelklick in irgendeine beliebige Stelle drücke, hängt sich das Skript auf. Nun ist meine Frage, ob es ein Skript gibt, was den Bildschirm nicht grau macht, aber zumindest Maus+Tastatur definitiv sperrt.

    Gruß,

    excQ

    Freitag, 26. Juni 2015 08:08

Antworten

  • Also zum einen hängt sich dein Script mit an Sicherheit grenzender Wahrscheinlichkeit nicht wirklich auf, sondern deine Form kann auf das Click-Event nur nicht reagieren, da dein Script anderweitig (Installationsroutine?) beschäftig ist. Daher erscheint das "Wartesymbol" der Maus und das Fenster verfärbt sich gräulich. Das alles verschwindet aber sofort wieder, sobald deine Routine abgeschlossen ist und das Script wieder reagieren kann.

    Das ist ein bekanntes Problem, das du z.b. damit löst, das du deine Installationsroutine als Hintergrundjob startest. Somit bleibt das Fenster (die Form) reaktionsfähig.

    Zum anderen muß ich dir sagen das eine wirklich blöde Idee ist, dem Benutzer die Tastatur und Maus sperren zu wollen. :)
    Hast du schonmal eine Installationsroutine erlebt die das tut? Aus gutem Grund nicht. Sowas machen Trojaner, keine gutartigen Programme. Also mal abgesehen davon das das einfach nicht nötig sein darf (sonst hast du vorher was falsch gemacht), was passiert denn wenn z.b dein Script wirklich hängen sollte, dann kann der User den Rechner nur noch Hard-Resetten oder wie?
    Was auch immer dich zu dieser Überlegung geführt hat, es gibt ganz sicher einen besseren Weg.
     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v3: Link
    (Schneller, besser + einfacher scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.


    Freitag, 26. Juni 2015 15:19
    Moderator