在 Windows NT、 Windows 2000 與 Windows Server 2003 如何強制以一次關閉螢幕保護裝置啟動

文章翻譯 文章翻譯
文章編號: 140723 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

有時候應用程式需要終止已在執行中的螢幕保護裝置。在 Microsoft Windows 95 中,螢幕保護裝置可能會終止輕鬆藉由將 WM_CLOSE 訊息公佈到目前作用中的螢幕保護程式視窗,如下例所示:
postMessage (GetActiveWindow(),WM_CLOSE,0 0 L) ;
Microsoft Windows NT 不過,介紹個別桌上型電腦的概念,讓應用程式可以在其中一個上, 執行和螢幕保護裝置可以在另一個上執行。這使得在 [Windows NT、 Windows 2000 及 Windows Server 2003 的螢幕保護程式終止有點困難。

其他相關資訊

取得目前作用中的螢幕保護程式視窗的控制代碼的程序是不同的均晚於 Microsoft Windows 95 的作業系統。Microsoft Windows NT 上、 在 Microsoft Windows 2000 上及在 Microsoft Windows Server 2003 上,螢幕保護裝置可能會執行預設桌面或上一個個別的桌面依上的 [顯示屬性的設定而有所不同:
  • 如果您選取 [履歷表 (英文),密碼保護] 核取方塊,在 [顯示內容] 對話方塊的 [螢幕保護裝置] 索引標籤,螢幕保護裝置會在它自己的桌上型電腦上執行。
  • 如果您清除核取方塊所描述的前一個點,在預設桌面上會執行螢幕保護裝置。
您不能使用 GetForegroundWindow() 函式或 FindWindow 函式來判斷是否為目前作用中的螢幕保護裝置:
  • 因為螢幕保護裝置執行從桌上型電腦上執行呼叫的應用程式的不同桌面上 GetForegroundWindow() 函式會傳回 NULL。
  • FindWindow 功能 ("WindowsScreenSaverClass",NULL) 沒有運作任一個。
因此,Microsoft 建議如下:
  • 關閉螢幕保護裝置的程式碼首先會判斷螢幕保護裝置是否正在執行時在它自己的桌面。
  • 如果執行它自己的桌面上的螢幕保護裝置程式碼會關閉螢幕保護裝置那里。
  • 如果沒有桌面螢幕保護裝置的程式碼會使用預設桌面。


若要執行這項操作、 取得螢幕保護裝置的桌面的控制代碼、 列舉該桌面視窗並再張貼到螢幕保護程式視窗的 [一個 WM_CLOSE。

下列程式碼會示範如何執行這項操作。附註如果設定螢幕保護裝置密碼下列程式碼會開啟 [密碼] 對話方塊、 提示使用者輸入一個密碼與實際結束螢幕保護裝置應用程式
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) 
{ 
	if(IsWindowVisible(hwnd)) 
		PostMessage(hwnd, WM_CLOSE, 0, 0); 
	return TRUE; 
} 
HDESK hdesk; 
hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); 
if (hdesk) 
{ 
	EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
	CloseDesktop(hdesk); } 
else 
{ 
	// Windows 2000 and later: 
	// If there is no screen saver desktop, the screen saver 
	// is on the default desktop. Close it by sending a 
	// WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); 
} 
請注意正在終止已在執行如上述所示範的螢幕保護裝置是完全分開完全,停用螢幕保護程式使沒有螢幕保護裝置開始於指定時間期間過期後。 這可以輕易地使用來完成:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,
                      FALSE,
                      0,
                      SPIF_SENDWININICHANGE
                     );				
這個方法非常適合終止目前執行的螢幕保護裝置。 但是,您可能會遇到的問題是系統將不會重新啟動螢幕保護裝置除非使用者移動滑鼠或按下某按鍵。 如果您需要重新啟動螢幕保護裝置,您必須重新初始化逾時期間。如此做,請使用下列方法之一:
  • 呼叫 SystemParametersInfo (SPI_SETSCREENSAVEACTIVE,TRUE,0 SPIF_SENDWININICHANGE)。
  • 使用 SetCursorPos() 來模擬使用者輸入。
這兩種方法將使系統重新啟動螢幕保護裝置的 [逾時] 計數器。

屬性

文章編號: 140723 - 上次校閱: 2007年2月22日 - 版次: 3.2
這篇文章中的資訊適用於:
  • Microsoft Win32 Software Development Kit (SDK) 3.1?應用於:
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
關鍵字:?
kbmt kbcode kbhowto kbscreensaver KB140723 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:140723
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com