07 2013 档案

摘要:问题描述: 我们开发过程中可能会经常遇到,需要屏蔽EXE的双击运行功能,只能通过宿主程序(Service或EXE)来启动。比如腾讯的迷你弹窗,就只能通过主程序来启动,而不能直接通过双击来运行。实现原理:宿主程序可以通过向子程序命令行参数可以来启动,而子程序在初始化的时候,会去检测当前的命令行参数是否匹配;如果匹配,就启动;如果不匹配,就不启动。 因为宿主程序可以通过CreateProcess来传递命令行参数,所以可以顺利执行;而双击程序,没有传递任何命令行参数,自然程序也就没法启动了。程序示例:#define CMD_LINE _T("CommandLine")子程序在程序 阅读全文
posted @ 2013-07-18 14:55 nchxmoon 阅读(1302) 评论(0) 推荐(0) 编辑
摘要:问题描述: 我们开发过程中可能会经常遇到,只启动一个程序实例。即一个程序启动之后,如果再次执行该程序,将会恢复之前打开的程序,而不是打开一个新的程序。实现原理:利用FindWindow/FindWindowEx查找指定窗口的句柄,如果找到,则当前程序已经执行,只需重新显示到最前面即可;如果没有找到,表示程序没有运行, 继续执行程序初始化。程序示例:BOOL SingletonInstance(){ HWND hPreWnd; if ( hPreWnd = ::FindWindow(NULL, APP_NAME) ) { if ( IsIconic(hPreWnd... 阅读全文
posted @ 2013-07-18 14:37 nchxmoon 阅读(3226) 评论(2) 推荐(1) 编辑
摘要:问题描述: 我们在程序开发当中,经常会遇到某些子程序需要实现一天只启动一次的功能,该功能实现的方法有很多种,其原理都是通过记录标记为来实现的。本次要分享的也是利用程序标记为来实现的,而且只需要使用一个标记为:上次启动时间,并将这个标记为保存在注册表中!实现原理: 1. 子程序第一次启动的时候,在注册表中创建一个新的键值,并且保存当前系统时间; (此部分代码省略) 2. 通过定时器去监测是否启动子程序,并对当前时间与当天的最后时间(23:59:59)进行比较;如果当前时间小于当天最后时间,不执行;如果大于,执行子程序,并且将当前时间更新到注册表中; 3. 时间比较... 阅读全文
posted @ 2013-07-17 18:30 nchxmoon 阅读(1076) 评论(0) 推荐(0) 编辑
摘要:time_t -> tm: localtimetm -> time_t: mktime time_t curTime; time(&curTime); dwCurTime = curTime; struct tm *mytm = localtime(&curTime); time_t time2 = mktime(mytm); 阅读全文
posted @ 2013-07-17 18:10 nchxmoon 阅读(5587) 评论(0) 推荐(0) 编辑