1.自动关机软件1.0-自动开机时如何获得全路径


该定时关机主要是三种定时模式(仅定时一次,每天一次和每周一次)和三种定时操作(定时关机,定时重启和定时注销)可以将其最小化到托盘或隐藏在后台运行,设置好以后按“设置定时”将使得定时选择按钮不可用,只有按“取消定时”后方能再重新设置定时参数,为了保证定时模式“每天一次”和“每周一次”能够正常关机,必须将关机的各种参数写到配置文件中去,这样才能让关机再开机后打开软件(在本软件中设置为开机启动)还能够“记得以前的设置”。


但是在本软件的开发过程中遇到了这样一个问题,我在如鹏网上也提出来了,就是软件开机自动启动时读取配置文件失败,经过多方查质料,先将相关知识讲一下:
用vc写程序时经常要获取程序的路径主要有以下三种方法
1,.\\是的到应用程序的当前目录,但当前目录不一定等于应用程序执行文件的所在目录,一个应用程序被启动时,当前目录是可以被任意设置的。
2,GetCurrentDirectory同.\\
3,GetModuleFileName()得到模块的完整路径名,例如,你载入c:\windows\system32\mfc.dll,得到模块句柄h,则你可以用GetModuleFileName()得到h模块的完整路径名
其中1和2获取的是路径名,而3获取的是全路径名(包括文件名)


这里我犯的错误就是用GetCurrentDirectory获取当前目录,但是请注意这里的目录不一定是当前可执行程序的目录,例如,开机该软件自动启动会创建一个Svhost.exe进程来运行本软件,那么 此时GetCurrentDirectory获得的路径就是C:\Windows\System32,这就是为什么正常情况下可以读取配置文件,但是关机重启以后就出现打开错误

那么应该怎样正确的获得配置文件的全路径名呢
方法有两种:
1.
//定义一个字符串数据,长度为MAX_PATH ,MAX_PATH是预定义的宏,一般是个数字常量如256
char szCurPath[MAX_PATH];

GetModuleFileName(NULL,szCurPath,_MAX_PATH);
 char* p = szCurPath;
 while(strchr(p,'\\'))
{
         p = strchr(p,'\\');
         p++;
}
 
*p = '\0';
CString strSwfname = szCurPath; 
szCurPath就是去除文件名的路径名
2.
用GetModuleFileName和_splitpath函数
TCHAR sthPath[MAX_PATH] ;                                      //程序本身路径
TCHAR szBuffer[MAX_PATH] ;                                     //临时存储可执行文件全路径
TCHAR szDrive[10] ;                                            //可执行文件盘符
TCHAR szDir[256] ;                                             //可执行文件目录
TCHAR szFilename[64] ;                                         //可执行文件文件名
TCHAR szExt[10] ;                                              //可执行文件文件后缀

GetModuleFileName(NULL, szBuffer, MAX_PATH) ;
_splitpath(szBuffer, szDrive, szDir, szFilename, szExt) ;      //分割全路径
wsprintf(sthPath, "%s%sshutdown.dat", szDrive, szDir) ;        //得到配置文件路径    


最新定时关机软件可执行文件和源代码链接


原创,转载请注明来自http://blog.csdn.net/wenzhou1219

你可能感兴趣的:(小工具,自动关机软件)