Я знаю, что есть процесс. Список модулей в System.Diagnostics, который содержит некоторые модули процесса, но у меня возникли некоторые проблемы с ним, потому что я не могу найти здесь некоторые библиотеки:
Process process = Memory.GetProcessByName("csgo");
foreach (ProcessModule pm in process.Modules)
Console.WriteLine(pm.ModuleName);
Поэтому я искал решение, чтобы оно заработало, и я нашел кое-что интересное в pinvoke. net, но оно также не работало:
var snapshot = CreateToolhelp32Snapshot(SnapshotFlags.Module, (uint)process.Id);
MODULEENTRY32 mod = new MODULEENTRY32() {
dwSize = (uint)Marshal.SizeOf(typeof(MODULEENTRY32))
};
if (!Module32First((IntPtr)snapshot, ref mod))
return;
do { Console.WriteLine(mod.szModule); } while (Module32Next((IntPtr)snapshot, ref mod));
Затем я искал реализацию того же кода в C ++, и он работал
#include <windows.h>
#include <iostream>
#include <TlHelp32.h>
#include <string>
#include <sstream>
using namespace std;
int main() {
int a;
cin >> a;
HANDLE snapshot = CreateToolhelp32Snapshot(0x00000008, a);
MODULEENTRY32 mod;
mod.dwSize = sizeof(mod);
if (!Module32First(snapshot, &mod))
return 0;
do { cout << mod.szModule << endl; } while (Module32Next(snapshot, &mod));
system("pause");
return 0;
}
Итак, мои вопросы: в чем разница между вторым и третьим вариантами и как я могу заставить его работать в C #? Я также пытался использовать OpenProcess () из user32.dll и GetModuleHandle () из kernel32.dll, но это не сработало.