update
This commit is contained in:
+60
-23
@@ -1,42 +1,79 @@
|
|||||||
// GameAnalyzer.cpp : Ce fichier contient la fonction 'main'. L'exécution du programme commence et se termine à cet endroit.
|
// GameAnalyzer.cpp : Ce fichier contient la fonction 'main'. L'exécution du programme commence et se termine à cet endroit.
|
||||||
//
|
//
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cctype>
|
||||||
|
#include <cstring>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <psapi.h>
|
#include <psapi.h>
|
||||||
|
|
||||||
const bool affiche_process_handle = 0;
|
const bool affiche_process_handle = 1;
|
||||||
int main()
|
const bool affiche_pid = 1;
|
||||||
|
const bool affiche_image_filename = 1;
|
||||||
|
|
||||||
|
std::string GetProcessName(const char* imageFileName)
|
||||||
{
|
{
|
||||||
std::cout << "Hello World!\n";
|
const char* processName = strrchr(imageFileName, '\\');
|
||||||
|
return processName != nullptr ? processName + 1 : imageFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ToLower(std::string text)
|
||||||
|
{
|
||||||
|
std::transform(text.begin(), text.end(), text.begin(),
|
||||||
|
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContainsIgnoreCase(const std::string& text, const std::string& search)
|
||||||
|
{
|
||||||
|
return ToLower(text).find(ToLower(search)) != std::string::npos;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
if (argc > 2) {
|
||||||
|
std::cout << "Usage: GameAnalyzer.exe <process_name_part>" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool filterByProcessName = argc == 2;
|
||||||
|
std::string processNameArgument = filterByProcessName ? argv[1] : "";
|
||||||
|
std::ostringstream output;
|
||||||
DWORD lpidProcess[99999], lpcbNeeded;
|
DWORD lpidProcess[99999], lpcbNeeded;
|
||||||
BOOL ret_enum_process = EnumProcesses(lpidProcess,
|
BOOL ret_enum_process = EnumProcesses(lpidProcess,
|
||||||
sizeof(lpidProcess),
|
sizeof(lpidProcess),
|
||||||
&lpcbNeeded);
|
&lpcbNeeded);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 99999; i++) {
|
if (ret_enum_process == FALSE) {
|
||||||
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, lpidProcess[i]);
|
std::cout << "EnumProcesses failed." << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD processCount = lpcbNeeded / sizeof(DWORD);
|
||||||
|
for (DWORD i = 0; i < processCount; i++) {
|
||||||
|
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, lpidProcess[i]);
|
||||||
if (hProcess != NULL) {
|
if (hProcess != NULL) {
|
||||||
std::cout << i << ": " << "pid: " << lpidProcess[i];
|
char imageFileName[MAX_PATH] = {};
|
||||||
|
DWORD lengthBuffer = MAX_PATH;
|
||||||
|
BOOL hasImageFileName = QueryFullProcessImageNameA(hProcess, 0, imageFileName, &lengthBuffer);
|
||||||
|
|
||||||
|
if (hasImageFileName == TRUE
|
||||||
|
&& affiche_image_filename == 1
|
||||||
|
&& (!filterByProcessName || ContainsIgnoreCase(GetProcessName(imageFileName), processNameArgument))) {
|
||||||
|
if (affiche_pid == 1)
|
||||||
|
output << "pid: " << lpidProcess[i];
|
||||||
if (affiche_process_handle == 1)
|
if (affiche_process_handle == 1)
|
||||||
std::cout << "-->" << hProcess;
|
output << "-->" << hProcess;
|
||||||
LPSTR lpImageFileName = new char[256];
|
if (affiche_process_handle || affiche_pid)
|
||||||
DWORD nSize = 256;
|
output << "--->";
|
||||||
DWORD lenght_buffer = GetProcessImageFileNameA(hProcess, lpImageFileName, nSize);
|
output << imageFileName << std::endl;
|
||||||
if (lenght_buffer != 0)
|
}
|
||||||
std::cout << "--->" << lpImageFileName << std::endl;
|
|
||||||
CloseHandle(hProcess);
|
CloseHandle(hProcess);
|
||||||
delete[] lpImageFileName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << output.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exécuter le programme : Ctrl+F5 ou menu Déboguer > Exécuter sans débogage
|
|
||||||
// Déboguer le programme : F5 ou menu Déboguer > Démarrer le débogage
|
|
||||||
|
|
||||||
// Astuces pour bien démarrer :
|
|
||||||
// 1. Utilisez la fenêtre Explorateur de solutions pour ajouter des fichiers et les gérer.
|
|
||||||
// 2. Utilisez la fenêtre Team Explorer pour vous connecter au contrôle de code source.
|
|
||||||
// 3. Utilisez la fenêtre Sortie pour voir la sortie de la génération et d'autres messages.
|
|
||||||
// 4. Utilisez la fenêtre Liste d'erreurs pour voir les erreurs.
|
|
||||||
// 5. Accédez à Projet > Ajouter un nouvel élément pour créer des fichiers de code, ou à Projet > Ajouter un élément existant pour ajouter des fichiers de code existants au projet.
|
|
||||||
// 6. Pour rouvrir ce projet plus tard, accédez à Fichier > Ouvrir > Projet et sélectionnez le fichier .sln.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user