2010-09-09 97 views
1

我正在運行我自己的自助服務終端應用程序作爲shell(替換HKLM/Software/Microsoft/Windows NT/winlogon/shell)。當瀏覽器不是shell時啓動屏幕保護程序

應用程序需要能夠關閉顯示器,我使用Process.Start(「scrnsave.scr」)來執行此操作。它在我的開發機器上工作,但不是在更換外殼時。

很明顯,因爲UseShellExecute設置爲true,但是當我將它設置爲false時,我無法獲得運行的屏幕保護程序。使用explorer.exe作爲命令,scrnsave.scr作爲參數只會導致瀏覽器窗口打開。

是否有一個開關,我可以傳遞給資源管理器讓它來運行屏幕保護程序或有另一種方式來實現相同的事情?

謝謝。

+0

關閉顯示器* *關閉使用屏幕保護程序? Google SC_MONITORPOWER。 – 2010-09-09 16:50:25

回答

3

您可以通過向系統發送Windows消息來啓動屏幕保護程序。

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_SCREENSAVE, 0) 

您需要定義如下

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); 

然後你可以使用如下

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

謝謝你,它肯定會啓動屏幕保護程序。默認情況下,似乎沒有API調用將屏幕保護程序設置爲空白屏幕,但是......猜測它必須只是我們構建過程的一部分。 – Phill 2010-09-09 16:07:45

相關問題