六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用C++Builder 5開發Windows下的屏保

[摘要]E_Mail:codehunter@sohu.com網址:http://codehunter.1yes.net摘要:本文通過一個具體的程序演示了Windows下的屏幕保護程序的實現過程。一. ...
E_Mail:codehunter@sohu.com
網址:http://codehunter.1yes.net
摘要:本文通過一個具體的程序演示了Windows下的屏幕保護程序的實現過程。
一. 引言
視窗系統下的屏幕保護程序是一個基于命令行(Command Line)的應用程序。當屏保
程序被調用時操作系統就用具體的命令行執行該程序。本文組織和處理了所有的命令行,包
括“/p”,“/s”,“/c”,“/a”,其中“/p”表示讓屏保在預覽窗口中顯示;“/s”表示真正運行
屏保;“/c”表示調用設置對話框;而“/a”表示調用密碼設置對話框(WinNT中無效)。本
程序盡可能簡單地實現一個全功能的屏保,運行Windows的屏保設置程序時你既可以修改
密碼(WinNT中無效)又可以設置圖片顯示的頻率并把頻率數值保存到注冊表里。當屏保
運行時圖片以你設置的頻率改變顯示位置。筆者還留了個作業給讀者,請看圖1中的選擇圖
片文件夾這個項目,按下瀏覽按鈕可以設置圖片的路徑,筆者已經實現了瀏覽按鈕的功能并
把得到的路徑也保存到注冊表中,并讓屏保啟動時讀picdir的值,picdir等于"no"時的代碼
筆者已實現了,picdir不等于"no"時的代碼由讀者實現。也就是讓讀者實現一個能把picdir
目錄里的圖片輪流顯示的屏保程序。

二. 實現方法
首先介紹幾個API函數。
WinMain函數:
int WINAPI WinMain(
        HINSTANCE hInstance, // 當前實例句柄
    HINSTANCE hPrevInstance, // 前一個實例句柄
    LPSTR lpCmdLine, // 指向命令行參數的指針(本程序要利用的參數)
    int nCmdShow  // 窗口的狀態
   );
GetWindowLong函數:得到指定窗口信息的函數
    LONG GetWindowLong(
         HWND hWnd, //窗口句柄
         int nIndex  //指定返回的信息
       );
SetWindowLong函數:改變窗口屬性
    LONG SetWindowLong(
    HWND hWnd, //窗口句柄
    int nIndex, // 指定要設定的值的信息
    LONG dwNewLong  // 新值
   );
SetParent函數:改變指定窗口的父窗口
   HWND SetParent(
    HWND hWndChild, //要改變父窗體的窗口句柄
    HWND hWndNewParent  //新的父窗體的句柄
   );
GetClientRect函數:得到窗口的客戶區
    BOOL GetClientRect(
    HWND hWnd, // 窗口句柄
    LPRECT lpRect  //RECT結構的地址
   );
SetWindowPos函數:改變窗口的大小,位置,頂級窗口等
BOOL SetWindowPos(
HWND hWnd, // 窗口句柄
    HWND hWndInsertAfter, // 布置窗口順序的句柄(Z order)
    int X, // horizontal position
    int Y, // vertical position
    int cx, // width
    int cy, // height
    UINT uFlags  // 窗口位置等標記
   );
SystemParametersInfo函數:訪問或設置系統級的參數
    BOOL SystemParametersInfo(
    UINT uiAction, // 指定要獲取或設置的系統參數
    UINT uiParam, // depends on action to be taken
    PVOID pvParam, // depends on action to be taken
    UINT fWinIni  // 用戶配置文件是否改變標記
   );
ShowCursor函數:顯示或隱藏光標
int ShowCursor(
BOOL bShow  // 鼠標可見度標記  
   );
GetVersion函數:獲取系統的版本信息
DWORD GetVersion(VOID)

以上API函數的具體信息可以查找有關MSSDK文檔。了解了基本函數后筆者簡述一
下實現方法。
1. 新建一工程,增加兩個窗體,將三個窗體分別取名為MainForm,FrmConfig,
FrmControl。在MainForm和FrmControl窗體上各添加一個Timer控件和TImage控件,
把兩窗體的BorderStyle設為bsNone,背景色設為黑色。在兩個窗體的TImage上各加一
張圖片,FrmControl大小設為:高130像素,寬160像素,Timage的Stretch屬性設為真
值。FrmConfig的樣式如圖1。
2. 保存工程文件為screensaver.cpp,其它單元分別存為Unitmain.cpp,
Unitcontrol.cpp,Unitconfig.cpp。
3. 編寫代碼,具體代碼見第三部分的源程序。
4. 編譯成可執行文件,并把文件擴展名改為scr。
5. 最后把屏保程序拷貝到windows目錄下就可以測試了。如果一切正常的話你將會看
到圖片在屏幕上以隨機的位置顯示。
                                    圖1
三. 源代碼
以下是本程序的所有的源代碼,其中screensaver.cpp, Unitmain.cpp是核心代碼。
/*{*******************************}*/
/*{***** screensaver.cpp  ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#include
#pragma hdrstop
USERES("screensaver.res");
USEFORM("Unitmain.cpp", Frmmain);
USEFORM("Unitconfig.cpp", FrmConfig);
USEFORM("Unitcontrol.cpp", FrmControl);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR p, int)//“p"是指向命令行參數的指針
{ String StartType;
  AnsiString Command=p,temp;
  HWND CPWindow =NULL;
  if(Command=="")
   StartType = "/c";
  else
   StartType=Command.SubString(1,2);//獲取命令行的前兩個參數
        try
        {
                 Application->Initialize();
                 if(StartType=="/c")//啟動設置窗口
                   Application->CreateForm(__classid(TFrmConfig), &FrmConfig);
                 else if(StartType=="/s")啟動屏保
                   Application->CreateForm(__classid(TFrmmain), &Frmmain);
                 else if(StartType=="/p")//預覽
                  {
                   Application->CreateForm(__classid(TFrmControl), &FrmControl);
                   temp=Command.SubString(3,Command.Length()-2);//獲取命令行中的屏保預覽窗
口句柄的字符串形式
                   CPWindow =(long *)temp.ToInt();//將預覽窗口句柄的字符串形式強制轉換為長整形
指針

                   RECT *lookrect;//建立一個RECT結構指針
                   Long style=GetWindowLong(Application->MainForm->Handle,GWL_STYLE);//獲
取FrmControl窗口的風格
                   style=style WS_CHILD;
                   SetWindowLong(Application->MainForm->Handle,GWL_STYLE,style);//設置窗口
為子窗口
                   SetParent(Application->MainForm->Handle,CPWindow);//設置屏保預覽窗口為
FrmControl的父窗口
                   GetClientRect(CPWindow,lookrect);//獲取屏保預覽窗口的客戶區
                   
SetWindowPos(Application->MainForm->Handle,HWND_TOP,0,0,lookrect->right,lookrect->bottom ,SW
P_NOZORDER SWP_NOACTIVATE SWP_SHOWWINDOW);//將FrmControl的窗口覆蓋屏保預覽窗口
的客戶區,并顯示它
                   }
                 else if(StartType=="/a")//啟動密碼設置窗口
                  {
                   temp=Command.SubString(3,Command.Length()-2);
                   CPWindow =(long *)temp.ToInt();
                  //以下是動態調用mpr.dll里的PwdChangePasswordA函數的過程
                   typedef UINT(CALLBACK *FUN)(LPSTR,HWND,UINT,UINT);
                   HINSTANCE hDll=LoadLibrary("mpr.DLL");
                   FUN myfun;
                   if(hDll!=NULL)
                    {
                     myfun=(FUN)GetProcAddress(hDll,"PwdChangePasswordA");
                     if(!myfun)FreeLibrary(hDll);
                     else
                     myfun("SCRSAVE", CPWindow, 0, 0);//函數的調用
                    }
                  }
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        return 0;
}
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****   Unitmain.h     ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------

#ifndef UnitmainH
#define UnitmainH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TFrmmain : public TForm
{
__published: // IDE-managed Components
        TTimer *Timer1;
        TImage *Image1;
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
        void __fastcall Timer1Timer(TObject *Sender);
private: // User declarations
       DWORD PWProtect;
       DWORD Version;
       String picdir;
       int frequence;
public: // User declarations
        __fastcall TFrmmain(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFrmmain *Frmmain;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****  Unitmain.cpp   ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unitmain.h"
#include
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmmain *Frmmain;
//---------------------------------------------------------------------------
__fastcall TFrmmain::TFrmmain(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::FormCreate(TObject *Sender)
{
    //使窗口成為最頂層的窗口
    SetWindowPos(this->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE SWP_NOSIZE);
    //時窗口覆蓋屏幕
    this->Width=Screen->Width;
    this->Height=Screen->Height;
    this->Top=0;
    this->Left=0;
    Version=GetVersion();
    TRegistry *Registry = new TRegistry;
  try
  {
    if(Version>0x80000000){
    Registry->RootKey =HKEY_CURRENT_USER;
    Registry->OpenKey("\\Control Panel\\Desktop",false);
    PWProtect=Registry->ReadInteger("ScreenSaveUsePassword");//檢測是否密碼保護
    Registry->CloseKey();}
    Registry->RootKey =HKEY_CURRENT_USER;
    Registry->OpenKey("\\Software\\CODEHUNTER", true);
    picdir=Registry->ReadString("PicDir");//得到圖片目錄
    frequence=Registry->ReadInteger("frequence");//得到圖像顯示的頻率
    if(picdir=="")picdir="no";
    if(frequence<0 frequence>6)
     frequence=2;
    Timer1->Interval=1000*frequence;設置定時器
  }
  __finally
  {
    delete Registry;
    picdir="no";
  }
    //檢測是否運行于 NT下
    if(Version!=0)
    if(PWProtect&&Version>0x80000000)//如果系統要求密碼保護并此系統為非NT那么把系統設為屏保
狀態
     SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
    //使光標消失
    while (!ShowCursor(false)< -5);
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if (PWProtect && Version>0x80000000)
      {
        bool PassChck;
       //顯示光標,并調用密碼對話框
        while(!ShowCursor(True) > 5);
       //以下是VerifyScreenSavePwd函數的動態調用
        typedef UINT(CALLBACK *FUN)(HWND);
                   HINSTANCE hDll=LoadLibrary("password.cpl");
                   FUN myfun;
                   if(hDll!=NULL)
                    {
                     myfun=(FUN)GetProcAddress(hDll,"VerifyScreenSavePwd");
                     if(!myfun)FreeLibrary(hDll);
                     else
                     PassChck=myfun(this->Handle);
                    }
        if(PassChck == false)
          {
            while(!ShowCursor(False) < -5);
            CanClose = false;
           }
      }
}
//---------------------------------------------------------------------------

void __fastcall TFrmmain::FormClose(TObject *Sender, TCloseAction &Action)
{
while(!ShowCursor(True) > 5);
    if(PWProtect&&Version>0x80000000)
        SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);//退出屏保狀態
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::Image1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{   static int MouseMoves=0;
    MouseMoves = MouseMoves + 1;
    if(MouseMoves >4)
     {
     this->Close();
     MouseMoves = 0 ;
     }
}
//---------------------------------------------------------------------------
void __fastcall TFrmmain::Timer1Timer(TObject *Sender)
{
if(picdir=="no")
{
int i ;
randomize();
i=rand()%2;
if(i==0)
i=-1;
else
i=1;
Image1->Top=i*(rand()%this->Height);
Image1->Left=i*(rand()%this->Width);
}
}
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****   Unitcontrol.h   ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#ifndef UnitcontrolH
#define UnitcontrolH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TFrmControl : public TForm
{
__published: // IDE-managed Components
        TImage *Image1;
        TTimer *Timer1;
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
        __fastcall TFrmControl(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFrmControl *FrmControl;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****   Unitcontrol.cpp ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unitcontrol.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmControl *FrmControl;
//---------------------------------------------------------------------------
__fastcall TFrmControl::TFrmControl(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFrmControl::Timer1Timer(TObject *Sender)
{
int i ;
randomize();
i=rand()%2;
if(i==0)
i=-1;
else
i=1;
Image1->Top=i*(rand()%this->Height);
Image1->Left=i*(rand()%this->Width);
}
//---------------------------------------------------------------------------
void __fastcall TFrmControl::FormCreate(TObject *Sender)
{
Image1->Top=0;
Image1->Left=0;
Image1->Height=this->Height ;
Image1->Width=this->Width ;
}
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****    Unitconfig.h   ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#ifndef UnitconfigH
#define UnitconfigH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TFrmConfig : public TForm
{
__published: // IDE-managed Components
        TPanel *Panel1;
        TButton *Button1;
        TPanel *Panel2;
        TLabel *Label1;
        TTrackBar *TrackBar1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private: // User declarations
  AnsiString picdir;
  int frequence;
public: // User declarations
        __fastcall TFrmConfig(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TFrmConfig *FrmConfig;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
/*{*******************************}*/
/*{*****   Unitconfig.cpp  ****}*/
/*{*******************************}*/
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unitconfig.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmConfig *FrmConfig;
//---------------------------------------------------------------------------
__fastcall TFrmConfig::TFrmConfig(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFrmConfig::Button1Click(TObject *Sender)
{
if(SelectDirectory("Select Picture Dir","",picdir))
   Panel2->Caption=picdir;
}
//---------------------------------------------------------------------------
void __fastcall TFrmConfig::Button2Click(TObject *Sender)
{
//把信息寫入注冊表
if(picdir=="") picdir="no";
this->frequence=TrackBar1->Position;
TRegistry *Reg = new TRegistry;
  try
   {
    Reg->RootKey = HKEY_CURRENT_USER;
    if (Reg->OpenKey("\\Software\\CODEHUNTER", true))
    {
      Reg->WriteString("PicDir",picdir);
      Reg->WriteInteger("frequence",frequence);
      Reg->CloseKey();
    }
  }
  __finally
  {
    delete Reg;
  }
this->Close();
}
//---------------------------------------------------------------------------
                                                                  
源代碼下載(http://codehunter.1yes.net/download/lucysaver.zip)


主站蜘蛛池模板: 香蕉狠狠再啪线视频 | 欧美限制级在线 | 天天爱添天天爱添天天爱添 | 亚洲伊人久久在 | 五月婷婷丁香网 | 深夜视频在线播放视频在线观看免费观看 | 日本一道高清 | 亚洲欧美成人在线 | 日韩 欧美 亚洲 国产 | 四虎永久免费地址在线网站 | 日韩一级片免费在线观看 | 亚洲精品在线视频观看 | 婷婷综合五月中文字幕欧美 | 亚洲我不卡 | 天天综合射 | 亚洲第一页在线视频 | 四虎影库网址 | 日日躁夜夜躁狠狠天天 | 手机看片福利盒子久久 | 色综合久久久久久久久五月 | 午夜久久久久久 | 搜索一级黄色片 | 欧美野外性xxxxfeexxxx | 性感美女香蕉视频 | 欧美一级在线免费观看 | 色姝姝影院 | 天天成人综合网 | 一级女人18毛片免费 | 色综合久久中文字幕网 | 青青草免费在线 | 人人精品久久 | 日韩成人黄色片 | 亚洲欧洲精品视频 | 特一级黄 | 青青青国产精品手机在线观看 | 欧美性大战久久久久久 | 天天干夜夜欢 | 色www精品视频在线观看 | 在线视频欧美日韩 | 三级免费黄色片 | 天堂色区|