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

原创 2012年03月29日 22:18:51

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


但是在本软件的开发过程中遇到了这样一个问题,我在如鹏网上也提出来了,就是软件开机自动启动时读取配置文件失败,经过多方查质料,先将相关知识讲一下:
用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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MFC 之 CButton 控件重绘(GDI+篇)

在写完GDI篇后我以为会很快就能把GDI+篇弄出来。

深入Windows窗体原理及控件重绘技巧

之前有学MFC的同学告诉我觉得Windows的控件重绘难以理解,就算重绘成功了还是有些地方不明白,我觉得可能很多人都有这样的问题,在这里我从Windows窗体的最基本原理来讲解控件的WM_DRAWIT...

windbg调试基本配置

总结下windbg的基本调试配置,供备忘。

英雄会第四届在线编程大赛·线上初赛:带通配符的数

给定一个带通配符问号的数W,问号可以代表任意一个一位数字。 再给定一个整数X,和W具有同样的长度。 问有多少个整数符合W的形式并且比X大? 输入格式 多组数据,每组...

1.COM基础概念

本文借助一个伪COM的实现来帮助理解COM的两个重要基本概念——接口查询和生存周期管理,文中介绍的伪COM实现也是很多厂商常用的模块化技巧。

深入解析Windows窗口创建和消息分发

在纯粹的Window32 SDK编程时代,人们还可以搞懂整个Windows窗体创建和消息的流通过程,但是在现在各种框架的包装下很多在Window32 SDK下很明显易懂的东西显得不是那么简单了。本文力...

GDI编程注意点-1

最近接触GDI编程比较多,就把常见的技巧和注意点整理成一个系列吧,希望对大家有帮助。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)