如何在Windows上的C ++中实现cd命令

问题描述

是否可以从Windows上的C ++程序内部在调用CMD控制台中更改目录?

我知道有很多方法可以在程序范围内更改工作目录,例如使用_chdir(),但我希望在程序退出时保留目录更改。

我希望行为类似于:

C:\Some\Path>MyProgram.exe

C:\Some\Other\Path>

(类似于在控制台中调用cd

一种解决方案是将程序包装在.bat文件中,然后将程序的输出用作cd命令的输入。但是,我希望这不是必需的。

解决方法

好吧,我还没有检查,但是我很确定您可以使用SetCurrentDirectoryW在父进程中执行CreateRemoteThread

SetCurrentDirectorylpStartAddress签名匹配,因此应该可以在父进程存储空间中分配带有新目录路径的z终止字符串,并将其作为{{1} }至lpParameter。技巧是在父进程中获取CreateRemoteThread的地址 。您应该枚举父流程模块,并使用SetCurrentDirectory的基地址来计算SetCurrentDirectory函数的适当偏移量。

要分配字符串,您应该使用VirtualAllocEx并使用WriteProcessMemory将值写入分配的内存。远程线程完成后,应使用Kernel32.dll释放内存。

您确定该批次不是更简单的解决方案吗?