Domanda

Come attivare lo screensaver (windows 7) con un codice (in cmd)?

È stato utile?

Soluzione 5

using System;
using System.Runtime.InteropServices;

public static class LockDesktop
{
    [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    private static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

    private const int SC_SCREENSAVE = 0xF140;
    private const int WM_SYSCOMMAND = 0x0112;

    public static void SetScreenSaverRunning()
    {
        SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
    }

    public static void Main()
    {
        LockDesktop.SetScreenSaverRunning();
    }
}

Funziona - l'unico aspetto negativo è che non puoi interagire con il PC per qualcosa come 7 secondi, ma immagino che i suoi 7 siano in grado di dare tempo al ppl prima di rendere lo screensaver 'permanente'.

Altri suggerimenti

Quanto segue soddisfa i tuoi requisiti?

start logon.scr /s

Finché .scr è sul PERCORSO, il comando sopra dovrebbe funzionare.

EDIT: non so se Windows 7 viene fornito con logon.scr , assicurati di testarlo con un .scr che è effettivamente installato in Windows 7.

Nota che mi è venuta l'idea di invocare .scr con / s da Opzioni della riga di comando di esempio per il salvaschermo :

  

Quando Windows esegue lo screensaver, esso   lo avvia con uno dei tre comandi   opzioni di linea:

     
      
  • / s - Avvia lo screensaver in modalità schermo intero.
  •   
  • / c - Mostra la finestra di dialogo delle impostazioni di configurazione.
  •   
  • / p #### - Visualizza un'anteprima dello screensaver usando il valore specificato   maniglia della finestra.
  •   

MODIFICA 2:

Ho fatto qualche ricerca aggiuntiva e ho scoperto che potresti creare lock.cmd :

@start /wait logon.scr /s & rundll32 user32.dll,LockWorkStation

O lock.vbs :

Set objShell = CreateObject("Wscript.Shell")
' The "True" argument will make the script wait for the screensaver to exit
returnVal = objShell.Run("logon.scr", 1, True)
' Then call the lock functionality
objShell.Run "rundll32.exe user32.dll,LockWorkStation"

Nessuna di queste risposte è perfetta, entrambe rivelano uno sfarfallio del desktop dopo che lo screen saver è disabilitato e appena prima che la workstation venga bloccata.

Potrebbe non essere possibile riprodurre il comportamento del sistema di avvio dello screen saver e della protezione con password al riavvio. Anche la risposta a Avvia Screensaver di sistema da Windows Form C # avvia solo lo screen saver, non protegge con password al riavvio .

Mettere insieme le idee di script cmd e vbs con il codice di la risposta a Avvia Screensaver di sistema da C # Windows Form ho trovato quanto segue:

using System;
using System.Runtime.InteropServices;

public static class LockDesktop
{
    [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    private static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

    [DllImport("user32.dll", EntryPoint = "LockWorkStation")]
    private static extern IntPtr LockWorkStation();

    private const int SC_SCREENSAVE = 0xF140;
    private const int WM_SYSCOMMAND = 0x0112;

    public static void SetScreenSaverRunning()
    {
        SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
        LockWorkStation();
    }

    public static void Main()
    {
        LockDesktop.SetScreenSaverRunning();
    }
}

Per costruirlo, installa .NET Framework , copia e incolla il codice sopra in lock. cs , quindi esegui:

%SystemRoot%\Microsoft.NET\Framework\v3.5\csc.exe lock.cs

Inserisci il lock.exe creato nel tuo percorso, dopodiché, digitando lock dovresti attivare lo screen saver configurato e bloccare la tua workstation.

Ho Windows 7. Ho posizionato la linea:

@start / wait% windir% \ ExtraPath \ ScreenSaverName.scr / s & amp; rundll32 user32.dll, LockWorkStation

in un file batch (.bat), posizionalo in una directory appropriata e crea un collegamento che punta a questo, con il tasto di scelta rapida desiderato. In questa riga, \ ExtraPath è il percorso aggiuntivo sotto la tua cartella win (di solito si tratta di \ system32) in cui si trovano gli screen saver e ScreenSaverName.scr è il nome dello screen saver desiderato stesso.

Funziona perfettamente.

Ora posso premere i tasti di scelta rapida per eseguire lo screen saver e bloccare il pc.

Grazie davvero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top