在c#中执行此操作时
// get the current process
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
我能做到
currentProcess.MainModule
c ++中是否有类似的功能?
答案 0 :(得分:4)
我假设你指的是Windows。如果是这样,那么你需要这个:
GetModuleHandle(NULL);
这将返回用于创建进程的模块的模块句柄。在GetModuleHandle
的文档中查找完整的详细信息。
如果你想要模块的文件名而不是模块句柄,那么你需要GetModuleFileName
代替。
答案 1 :(得分:0)
在GetProcess()
的反编译来源ILSpy查看,它说:
public static Process GetCurrentProcess()
{
return new Process(".", false, NativeMethods.GetCurrentProcessId(), null);
}
将NativeMethods.GetCurrentProcessId()
声明为
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetCurrentProcessId();
哪个引用GetCurrentProcessId
function。
MainModule
定义为
public ProcessModule MainModule
{
get
{
if (this.OperatingSystem.Platform == PlatformID.Win32NT)
{
this.EnsureState((Process.State)3);
ModuleInfo firstModuleInfo =
NtProcessManager.GetFirstModuleInfo(this.processId);
return new ProcessModule(firstModuleInfo);
}
ProcessModuleCollection processModuleCollection = this.Modules;
this.EnsureState(Process.State.HaveProcessInfo);
foreach (ProcessModule processModule in processModuleCollection)
{
if (processModule.moduleInfo.Id == this.processInfo.mainModuleId)
{
return processModule;
}
}
return null;
}
}
反过来似乎可以归结为EnumProcessModules
native function。
因此,通过使用GetCurrentProcessId
和EnumProcessModules
函数,您应该能够获得类似的结果
currentProcess.MainModule