Для файлового браузера, над которым я работаю, мне нужно создать список открытых файлов в системе Windows. Я подумываю использовать C++ (или C), чтобы сделать это быстро.
Я начал с кода, который успешно генерирует список идентификаторов процессов. Есть ли способ превратить это в нечто, в котором будут перечислены все файлы, открытые каждым процессом?
#include
#include
#include
#include
#include
#include
#include
using namespace std;
void PrintProcessNameAndID(DWORD processID) {
TCHAR szProcessName[MAX_PATH] = TEXT("");
// Get a handle to the process.
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID);
// Get the process name.
if (NULL != hProcess) {
HMODULE hMod;
DWORD cbNeeded;
if (EnumProcessModules(hProcess, &hMod, sizeof (hMod),
&cbNeeded)) {
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof (szProcessName) / sizeof (TCHAR));
}
}
// Print the process name and identifier.
_tprintf(TEXT("%s (PID: %u)\n"), szProcessName, processID);
// Release the handle to the process.
CloseHandle(hProcess);
}
int startup(void) {
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if (!EnumProcesses(aProcesses, sizeof (aProcesses), &cbNeeded)) {
return 1;
}
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof (DWORD);
// Print the name and process identifier for each process.
for (i = 0; i < cProcesses; i++) {
if (aProcesses != 0) {
PrintProcessNameAndID(aProcesses);
}
}
return 0;
}
int main(int argc, char** argv) {
startup();
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... open-files