2010-09-09 3 views
1

Je cours ma propre application de kiosque en tant que shell (en remplacement de HKLM/Logiciel/Microsoft/Windows NT/winlogon/shell).Démarrer un économiseur d'écran lorsque l'explorateur n'est pas le shell

L'application doit pouvoir désactiver le moniteur et j'utilisais Process.Start ("scrnsave.scr") pour ce faire. Cela fonctionne sur ma machine de développement mais pas quand le shell est remplacé. Il est clair que UseShellExecute est défini sur true, mais lorsque je l'ai défini sur false, l'économiseur d'écran ne peut pas être exécuté. En utilisant explorer.exe comme commande et scrnsave.scr comme argument, une fenêtre de l'explorateur s'ouvre.

Existe-t-il un commutateur que je peux passer à l'explorateur pour qu'il exécute l'économiseur d'écran ou existe-t-il un autre moyen de réaliser la même chose?

Merci.

+0

Activez le moniteur * off * avec un économiseur d'écran? Google SC_MONITORPOWER. –

Répondre

3

Vous pouvez démarrer l'économiseur d'écran en envoyant un message Windows au système.

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0) 

Vous aurez besoin des définitions suivantes

static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff); 
static readonly IntPtr SC_SCREENSAVE = new IntPtr(0xf140); 
const uint WM_SYSCOMMAND = 0x112; 

[DllImport("User32",SetLastError=true)] 
extern static int SendMessage(
    IntPtr hWnd, 
    uint Msg, 
    IntPtr wParam, 
    IntPtr lParam); 

que vous pouvez ensuite utiliser comme suit

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, IntPtr.Zero); 
+0

Merci pour cela, il débute certainement l'économiseur d'écran. Il ne semble pas y avoir d'appel d'API pour définir l'économiseur d'écran sur l'écran vide par défaut, bien que ... supposons que cela doive juste faire partie de notre processus de construction. – Phill

Questions connexes