win32将当前目录切换到程序所在目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int pathGetContainer(const char *path, string &dir)
{
	const char *p;
	for (p = path + strlen(path); p >= path; p--)
	{
		if (*p == '/' || *p == '\\')
			break;
	}
	dir = string(path).substr(0, p - path + 1);
	return 1;
}
 
...
	char curPath[1024];
	GetModuleFileNameA(AfxGetApp()->m_hInstance, curPath, sizeof(curPath));
	string curDir;
	pathGetContainer(curPath, curDir);
	SetCurrentDirectoryA(curDir.c_str());
...

注:此方法对于Windows shell编程不适用,因为是运行在资源管理器进程里的插件,返回的都是explorer.exe所在路径,此种情况下,一般是通过注册表里写死的配置获取进程路径。