我们在Windows的命令提示符(控制台)环境中如果想进入某个目录,一般要先进入目录所在的盘符,然后使用"cd"命令逐层进入这个目录,例如要进入F:/eBook/C++/,可能的步骤如下:
C:/Documents and Settings/Administrator>F:
F:/>cd eBook
F:/eBook>cd C++
F:/eBook/C++
如果目录的结构层次比较深,并且目录名中还包括非英文字符,如:F:/电子书/C++/经典书籍/国外名著/Lippman/C++ Primer
这样操作起来就很不方便了,对于有空格的目录,在输入的时候还得加上引号。但我们在Windows的资源管理器中进入这个目录却非常容易,用鼠标点几下就可以了。能不能先在资源管理器中进入这个目录,然后提供一个接口由资源管理器中直接跳转到命令提示符的相应目录?答案是肯定的。我们可以通过修改注册表来完成。对于程序员来说,可以用编程的方法实现,代码如下:
void AddCommandLine()
{
CString strSet1("Folder//shell//CmdHere//command");
CString strSet2("Folder//shell//CmdHere");
HKEY hKeyInterface;
DWORD dwDisposition;
LONG ret = RegCreateKeyEx(HKEY_CLASSES_ROOT,
strSet2,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKeyInterface,
&dwDisposition);
if (ret != ERROR_SUCCESS)
return;
ret = RegCreateKeyEx(HKEY_CLASSES_ROOT,
strSet1,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hKeyInterface,
&dwDisposition);
if (ret != ERROR_SUCCESS)
return;
HKEY hKey1;
ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, strSet1, 0, KEY_ALL_ACCESS, &hKey1);
if (ret != ERROR_SUCCESS)
return;
HKEY hKey2;
ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, strSet2, 0, KEY_ALL_ACCESS, &hKey2);
if (ret != ERROR_SUCCESS)
return;
CString strData1("cmd.exe /k cd /"%1/"");
ret = RegSetValueEx(hKey1, "", 0, REG_SZ, (LPBYTE)strData1.GetBuffer(strData1.GetLength()), strData1.GetLength()+1);
if (ret != ERROR_SUCCESS)
return;
CString strData2("命令提示符");
ret = RegSetValueEx(hKey2, "", 0, REG_SZ, (LPBYTE)strData2.GetBuffer(strData2.GetLength()), strData2.GetLength()+1);
if (ret!=ERROR_SUCCESS)
{
return;
}
RegCloseKey(hKey1);
RegCloseKey(hKey2);
}
这样,在某个文件夹上点击鼠标右键,在弹出的右键快捷菜单中就多出一项"命令提示符",选中它,就直接进入命令提示符的相应目录了。