- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VisualC屏保程序
用VisualC++编写完整的屏幕保护程序屏幕保护程序是一个Win32应用程序,与一般的Win32应用程序不同之处在于:1、扩展名要求为 SCR ;2、命令行要有一定的格式,以便操作系统向其传递信息,如运行模式,父窗口句柄(Handle to Parent Window)等;3、其他一些消息相应方面的要求。本文将首先介绍屏幕保护程序的命令行格式及实现的方法,然后介绍各个相应函数,并通过Window主函数WinMin()勾画出屏幕保护程序的主框架,最后介绍编译步骤和注意事项屏幕保护程序的命令行格式:文件名 \ [运行模式] \[窗口句柄]。其中运行模式有五种选择: 1.“运行模式”= ‘c’或‘C ’,句柄为一串数字, 或文件名后没有任何参数。屏保程序设置方式,Window 显示属性_屏幕保护程序_设置按钮调用,数字为调用函数的窗口句柄(Handle to Parent Window)(十进制),如果没有数字,句柄为NULL。 2.“运行模式”=‘t’或‘T’。测试方式,忽略句柄数字。 3.“运行模式”=‘p’或‘P’。预览方式,Window 显示属性_屏幕保护程序_预览按钮调用,句柄为调用函数的窗口句柄。 4.“运行模式”=‘a’或‘A’。5.其它(通常“运行模式”=‘s’)屏幕保护程序正常运行模式。因此,编写屏幕保护程序的首要任务是过滤命令行,提取对应的系统调用方式和其他信息,本文用自定义函数ParseCommandline( )实现://用enum定义五种调用方式:enum SaverMode{ sm_config, sm_preview, sm_full, sm_test, sm_passwordchange}; //命令行过滤函数,命令行获得函数是用API GetCommandLine( )。SaverMode ParseCommandLine( TCHAR* pstrCommandLine )//命令行过滤函数,TCHAR为字符串类型{ g_hWndParent = NULL; //全局变量(global varibale) 在头函数或主文件开始处定义。// 跳过长文件名中的路径和空格。 if (*pstrCommandLine == TEXT(\))// 若命令行指针为“\’’”,双引号字符{ pstrCommandLine++; while (*pstrCommandLine != TEXT(\0) *pstrCommandLine != TEXT(\))//不是空字符且不是 pstrCommandLine++; If( *pstrCommandLine == TEXT(\) ) pstrCommandLine++;} else{ while (*pstrCommandLine != TEXT(\0) *pstrCommandLine != TEXT( )) pstrCommandLine++; if( *pstrCommandLine == TEXT( ) ) pstrCommandLine++;} // 跳过/ 或 - while ( *pstrCommandLine != TEXT(\0) *pstrCommandLine != TEXT(/) *pstrCommandLine != TEXT(-) ) pstrCommandLine++; // 如果没有任何参数,为设置模式。 if ( *pstrCommandLine == TEXT(\0) ) return sm_config; // 如果有参数,查看参数内容。 switch ( *(++pstrCommandLine) ) { case c: case C: pstrCommandLine++; while ( *pstrCommandLine !isdigit(*pstrCommandLine) ) pstrCommandLine++; if ( isdigit(*pstrCommandLine) ) { #ifdef _WIN64 //考虑64位编译情况。 CHAR strCommandLine[2048]; DXUtil_ConvertGenericStringToAnsiCb( strCommandLine, pstrCommandLine, sizeof(strCommandLine)); //该函数仅在64位编译情况下使用。 g_hWndParent = (HWND)(_atoi64(strCommandLine)); #else g_hWndParent = (HWND)LongToHandle(_t
原创力文档


文档评论(0)