讓應用程式禁止Windows螢幕保護 (轉)
讓應用程式禁止Windows螢幕保護 (轉)[@more@]讓應用禁止螢幕保護
2000-03-21· 周新棟·世界日報
如果在你的程式中需要一個很長的時間段來進行大量的資料處理,這段時間長得足以使Windows因檢測不到動作而啟用螢幕保護程式,一旦啟動了螢幕保護程式,你的程式執行實際上就變慢了,這會大大影響程式的正常執行。有沒有一種方法,使程式在進行長時間的資料處理前關掉螢幕保護呢?答案是肯定的。Windows在啟動螢幕保護程式前會向當前啟用的應用程式傳送WM_SYMMAND訊息,其中wParam引數指定了即將的命令型別,在本例中其值為SC_SCREENSAVE。問題在於程式如何捕獲這個訊息呢?在C++ Builder中可以利用TApplication類的OnMessage事件控制程式碼來處理這個訊息。應用程式在接收到任何Windows訊息後都會觸發TApplication類的OnMessage事件,透過定義這個事件的處理程式,可以捕獲傳送給應用程式的所有Windows訊息(這當然不包括在程式中用SendMessage傳送的訊息)。
OnMessage事件的定義如下:
typedef void__fastcall(__closure
*TMessageEvent)(tagMSG &Msg,bool&Handled);
__property TMessageEvent OnMessage=
{read=FOnMessage,write=FOnMessage};
其中TMessageEvent型別是OnMessage事件的型別,它定義了處理訊息的方法,Msg引數給出了Windows訊息的相關資訊,其結構如下:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
D time;
POINT pt;}
Handled引數決定了如何對訊息進行下一步處理,如果在接收到一個訊息後將Handled引數設為true,則這個訊息將不會得到進一步的處理,在本例中就是取消螢幕保護程式的啟用。
啟動C++ Builder,新建一工程,在標頭檔案中的Private段增加對成員函式CaptureMessage的宣告:
class TForm1 : public TForm
{
__published:
private:
void __fastcall CaptureMessage(tagMSG &Msg,bool &Handled);
public:
__fastcall TForm1(TComponent* Owner);
};
在.cpp檔案中增加CaptureMessage的定義:
void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled)
{
if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE)
Handled=true; //阻止螢幕保護的啟動
else
Handled=false; //進行該訊息的預設處理
}
再將定義好的CaptureMessage函式作為OnMessage事件的事件,將以下程式碼加到主窗體的OnCreate事件處理器中:
void __fastcall TForm1::FormCreate(T *Sender)
{
Application->OnMessage=CaptureMessage;
}
按F9編譯並執行程式,你可以事先將螢幕保護的等待時間設為一個儘可能小的值來檢驗程式的執行情況。你會發現在程式執行期間,螢幕保護程式將無法被啟用,關閉執行的程式後再等待一會兒,螢幕保護程式就會正常出現。以上程式碼在C++ Builder3、環境中執行透過。
2000-03-21· 周新棟·世界日報
如果在你的程式中需要一個很長的時間段來進行大量的資料處理,這段時間長得足以使Windows因檢測不到動作而啟用螢幕保護程式,一旦啟動了螢幕保護程式,你的程式執行實際上就變慢了,這會大大影響程式的正常執行。有沒有一種方法,使程式在進行長時間的資料處理前關掉螢幕保護呢?答案是肯定的。Windows在啟動螢幕保護程式前會向當前啟用的應用程式傳送WM_SYMMAND訊息,其中wParam引數指定了即將的命令型別,在本例中其值為SC_SCREENSAVE。問題在於程式如何捕獲這個訊息呢?在C++ Builder中可以利用TApplication類的OnMessage事件控制程式碼來處理這個訊息。應用程式在接收到任何Windows訊息後都會觸發TApplication類的OnMessage事件,透過定義這個事件的處理程式,可以捕獲傳送給應用程式的所有Windows訊息(這當然不包括在程式中用SendMessage傳送的訊息)。
OnMessage事件的定義如下:
typedef void__fastcall(__closure
*TMessageEvent)(tagMSG &Msg,bool&Handled);
__property TMessageEvent OnMessage=
{read=FOnMessage,write=FOnMessage};
其中TMessageEvent型別是OnMessage事件的型別,它定義了處理訊息的方法,Msg引數給出了Windows訊息的相關資訊,其結構如下:
typedef struct tagMSG{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
D time;
POINT pt;}
Handled引數決定了如何對訊息進行下一步處理,如果在接收到一個訊息後將Handled引數設為true,則這個訊息將不會得到進一步的處理,在本例中就是取消螢幕保護程式的啟用。
啟動C++ Builder,新建一工程,在標頭檔案中的Private段增加對成員函式CaptureMessage的宣告:
class TForm1 : public TForm
{
__published:
private:
void __fastcall CaptureMessage(tagMSG &Msg,bool &Handled);
public:
__fastcall TForm1(TComponent* Owner);
};
在.cpp檔案中增加CaptureMessage的定義:
void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled)
{
if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE)
Handled=true; //阻止螢幕保護的啟動
else
Handled=false; //進行該訊息的預設處理
}
再將定義好的CaptureMessage函式作為OnMessage事件的事件,將以下程式碼加到主窗體的OnCreate事件處理器中:
void __fastcall TForm1::FormCreate(T *Sender)
{
Application->OnMessage=CaptureMessage;
}
按F9編譯並執行程式,你可以事先將螢幕保護的等待時間設為一個儘可能小的值來檢驗程式的執行情況。你會發現在程式執行期間,螢幕保護程式將無法被啟用,關閉執行的程式後再等待一會兒,螢幕保護程式就會正常出現。以上程式碼在C++ Builder3、環境中執行透過。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989348/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用VB製作螢幕保護程式 (轉)
- 用C#Builder編寫螢幕保護程式 (轉)UI
- 利用VB編寫螢幕保護程式 (轉)
- 保護您的Flutter應用程式:實現隱私螢幕Flutter
- 呼叫系統螢幕保護 (轉)
- 智取螢幕保護密碼(轉)密碼
- Aerial for Mac鳥瞰螢幕保護程式Mac
- 金鋒螢幕保護程式2.0破解
- 從任務通知區啟動螢幕保護程式(轉)
- 從任務通知區啟動螢幕保護程式 (轉)
- 在桌面上建立螢幕保護程式圖示(轉)
- Mac簡單時鐘螢幕保護程式Mac
- Android 禁止螢幕旋轉Android
- w10螢幕保護怎麼取消_win10關閉螢幕保護的方法Win10
- Aerial for Mac(mac最美的鳥瞰螢幕保護程式)Mac
- 螢幕保護控制工具:ScreenSaverNow for MacMac
- Aerial for Mac(mac高畫質鳥瞰螢幕保護程式)Mac
- 禁止 Windows 98 自動執行應用程式(轉)Windows
- Word Clock for Mac(mac螢幕保護軟體) v1.0.7啟用版Mac
- 螢幕設定成淺綠色可以保護眼睛
- Windows的保護模式 (轉)Windows模式
- win10螢幕保護時間怎麼設定Win10
- win10系統怎麼設定螢幕保護?Win10
- 讓你的應用支援新iPad的Retina螢幕iPad
- Win10系統下怎麼禁止螢幕旋轉Win10
- 千兆應用入侵防護系統保護解決方案(轉)
- 夢想圖片螢幕保護V2.6破解簡要分析
- 雲應用程式如何加強隱私保護
- 關於螢幕程式設計(轉)程式設計
- HarmonyOS:應用隱私保護
- CSS 讓捲軸不佔用螢幕寬度CSS
- windows 10如何把螢幕翻轉過來_win10顯示螢幕翻轉怎麼操作WindowsWin10
- 國產OLED螢幕被認可,蘋果讓京東方獲得iPhone供應螢幕資格蘋果iPhone
- CSS 讓滾動條不佔用螢幕寬度CSS
- Swift橫豎屏切換、自動旋轉螢幕、手動旋轉螢幕、鎖定當前螢幕禁止轉屏、橫豎屏頁面跳轉過度、橫豎屏UI適配SwiftUI
- ubuntu螢幕旋轉Ubuntu
- 如何讓我們的Android應用程式保活?Android
- 用Delphi實現遠端螢幕抓取 (轉)