GUI剖析之 获取屏保控制窗口显示模式的实现(屏保应用)

本文介绍了一个用于确定屏幕保护程序运行模式的函数实现。该函数通过解析命令行参数来判断当前是否处于配置模式、预览模式、密码模式或是启动屏幕保护程序模式,并据此返回相应的枚举值。

获取屏保控制窗口显示模式的实现(屏保应用)

#include <scrnsave.h>

enum SCRMODE { SMNONE, SMCONFIG, SMPASSWORD, SMPREVIEW, SMSAVER };

 

//-----------------------------------------------------------------------------

SCRMODE GetScrMode(HWND &hWnd)

{

        

       SCRMODE ScrMode = SMNONE;

       hWnd = NULL;

 

       TCHAR *pc = ::GetCommandLine();

 

       if (*pc == _T('\"'))

       {

              pc++;

              while (*pc != _T('\0') && *pc != _T('\"'))

                     pc++;

       }

       else

       {

              while (*pc != _T('\0') && *pc != _T(' '))

                     pc++;

       }

 

       if (*pc != _T('\0'))

              pc++;

 

       while (*pc == _T(' '))

              pc++;

 

       if (*pc == _T('\0'))

       {

              ScrMode = SMCONFIG;

              hWnd = NULL;

       }

       else

       {

              if (*pc == _T('-') || *pc == _T('/'))

                     pc++;

 

              if (*pc == _T('s') || *pc == _T('S'))

              {

                     ScrMode = SMSAVER;

              }

              else

                     if (*pc == _T('p') || *pc == _T('P') ||

                            *pc == _T('l') || *pc == _T('L'))

                     {

                            pc++;

                            while (*pc == _T(' ') || *pc == _T(':'))

                                   pc++;

 

                            ScrMode = SMPREVIEW;

                            hWnd = reinterpret_cast<HWND>(::_ttoi(pc));

                     }

                     else

                            if (*pc == _T('c') || *pc == _T('C'))

                            {

                                   pc++;

                                   while (*pc == _T(' ') || *pc == _T(':'))

                                          pc++;

 

                                   ScrMode = SMCONFIG;

                                   hWnd = *pc == _T('\0')

                                          ? ::GetForegroundWindow()

                                          : reinterpret_cast<HWND>(::_ttoi(pc));

                            }

                            else

                                   if (*pc == _T('a') || *pc == _T('A'))

                                   {

                                          pc++;

                                          while (*pc == _T(' ') || *pc == _T(':'))

                                                 pc++;

 

                                          ScrMode = SMPASSWORD;

                                          hWnd = reinterpret_cast<HWND>(::_ttoi(pc));

                                   }

       }

 

       return ScrMode;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值