Что такое C ++ эквивалент текущего .Process.MainModule .net? - PullRequest
0 голосов
/ 21 марта 2012

при выполнении этого в c #

// get the current process
Process currentProcess  = System.Diagnostics.Process.GetCurrentProcess();

Я могу сделать

currentProcess.MainModule

Есть ли подобная функция в c ++?

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Я предполагаю, что вы имеете в виду Windows. Если это так, то вам нужно это:

GetModuleHandle(NULL);

Возвращает дескриптор модуля, использованного для создания процесса. Найти полную информацию в документации для GetModuleHandle.

Если вам нужно имя файла модуля, а не дескриптор модуля, вам нужно вместо него GetModuleFileName.

0 голосов
/ 21 марта 2012

Глядя ILSpy на декомпилированный источник GetProcess(), он говорит:

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 функции .

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встроенная функция .

Таким образом, используя функцию GetCurrentProcessId и EnumProcessModules, вы сможете получить результат, аналогичный

currentProcess.MainModule
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...