@@ -399,7 +399,7 @@ DWORD ExtractPID(const char* str) {
399399
400400void ExtractProcessName (const char * str , char * processName , size_t bufferSize ) {
401401 if (!str || !processName || bufferSize == 0 ) {
402- return ; // Manejo básico de errores de parámetros nulos o tamaño de buffer cero
402+ return ;
403403 }
404404
405405 const char * start = str ; // El inicio del nombre del proceso
@@ -409,14 +409,14 @@ void ExtractProcessName(const char* str, char* processName, size_t bufferSize) {
409409 size_t length = end - start ;
410410 if (length < bufferSize - 1 ) {
411411 strncpy (processName , start , length );
412- processName [length ] = '\0' ; // Asegurar que la cadena termina con '\0'
412+ processName [length ] = '\0' ;
413413 } else {
414414 strncpy (processName , start , bufferSize - 1 );
415- processName [bufferSize - 1 ] = '\0' ; // Asegurar que la cadena termina con '\0'
415+ processName [bufferSize - 1 ] = '\0' ;
416416 }
417417 } else {
418418 // No se encontró el nombre del proceso en el formato esperado
419- processName [0 ] = '\0' ; // Cadena vacía
419+ processName [0 ] = '\0' ;
420420 }
421421}
422422
@@ -453,7 +453,7 @@ void UpdateToolTipText(HWND hwndControl, LPSTR text)
453453 toolInfo .hwnd = GetParent (hwndControl ); // Obtener el HWND del control padre
454454 toolInfo .uFlags = TTF_IDISHWND | TTF_SUBCLASS ;
455455 toolInfo .uId = (UINT_PTR )hwndControl ;
456- toolInfo .lpszText = text ; // Cambiado a text (LPSTR)
456+ toolInfo .lpszText = text ;
457457
458458 SendMessage (hwndToolTip , TTM_UPDATETIPTEXT , 0 , (LPARAM )& toolInfo );
459459}
@@ -938,21 +938,85 @@ void SetProcessCritical(DWORD dwProcessId, BOOL Critical){
938938 CloseHandle (hProcess );
939939}
940940
941- DWORD GetProcInfo (DWORD dwProcessId , LPSTR lpPath , DWORD nSize )
942- {
943- HANDLE hProcess = OpenProcess (PROCESS_QUERY_LIMITED_INFORMATION , FALSE, dwProcessId );
941+ char * GetProcessCommandLine (DWORD dwProcessId ) {
942+ HANDLE hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ , FALSE, dwProcessId );
943+ if (!hProcess ) {
944+ return NULL ;
945+ }
946+
947+ PROCESS_BASIC_INFORMATION pbi ;
948+ ULONG returnLength ;
949+ NTSTATUS status = NtQueryInformationProcess (hProcess , ProcessBasicInformation , & pbi , sizeof (pbi ), & returnLength );
950+ if (status != 0 ) {
951+ CloseHandle (hProcess );
952+ return NULL ;
953+ }
954+
955+ PEB peb ;
956+ if (!ReadProcessMemory (hProcess , pbi .PebBaseAddress , & peb , sizeof (peb ), NULL )) {
957+ CloseHandle (hProcess );
958+ return NULL ;
959+ }
960+
961+ RTL_USER_PROCESS_PARAMETERS procParams ;
962+ if (!ReadProcessMemory (hProcess , peb .ProcessParameters , & procParams , sizeof (procParams ), NULL )) {
963+ CloseHandle (hProcess );
964+ return NULL ;
965+ }
966+
967+ UNICODE_STRING commandLineUnicode = procParams .CommandLine ;
968+ WCHAR * commandLineBuffer = (WCHAR * )malloc (commandLineUnicode .Length + sizeof (WCHAR ));
969+ if (!commandLineBuffer ) {
970+ CloseHandle (hProcess );
971+ return NULL ;
972+ }
973+
974+ if (!ReadProcessMemory (hProcess , commandLineUnicode .Buffer , commandLineBuffer , commandLineUnicode .Length , NULL )) {
975+ free (commandLineBuffer );
976+ CloseHandle (hProcess );
977+ return NULL ;
978+ }
979+
980+ commandLineBuffer [commandLineUnicode .Length / sizeof (WCHAR )] = L'\0' ; // Asegurarse de que está terminada en null
981+
982+ // Convertir UNICODE_STRING a char*
983+ int bufferSize = WideCharToMultiByte (CP_UTF8 , 0 , commandLineBuffer , -1 , NULL , 0 , NULL , NULL );
984+ char * commandLine = (char * )malloc (bufferSize );
985+ if (!commandLine ) {
986+ free (commandLineBuffer );
987+ CloseHandle (hProcess );
988+ return NULL ;
989+ }
990+ WideCharToMultiByte (CP_UTF8 , 0 , commandLineBuffer , -1 , commandLine , bufferSize , NULL , NULL );
991+
992+ free (commandLineBuffer );
993+ CloseHandle (hProcess );
994+ return commandLine ;
995+ }
996+
997+ void GetProcInfo (DWORD dwProcessId , LPSTR lpPath , DWORD nSize ) {
998+ HANDLE hProcess = OpenProcess (PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ , FALSE, dwProcessId );
944999 if (hProcess == NULL ) {
945- return 0 ;
1000+ return ;
9461001 }
9471002
9481003 DWORD dwLength = nSize ;
9491004 if (!QueryFullProcessImageName (hProcess , 0 , lpPath , & dwLength )) {
9501005 CloseHandle (hProcess );
951- return 0 ;
1006+ return ;
1007+ }
1008+
1009+ char * commandLine = GetProcessCommandLine (dwProcessId );
1010+ if (commandLine == NULL ) {
1011+ CloseHandle (hProcess );
1012+ return ;
9521013 }
9531014
1015+ // Concatenar la línea de comando a la ruta completa del proceso
1016+ strcat (lpPath , "\n\nCommandLine:\n" );
1017+ strcat (lpPath , commandLine );
1018+ free (commandLine );
9541019 CloseHandle (hProcess );
955- return dwLength ;
9561020}
9571021
9581022void CheckMenuItemProcess (HMENU hMenu , char * ProcessName , DWORD dwProcessId ){
@@ -1312,10 +1376,10 @@ void CALLBACK WinEventProc(
13121376)
13131377
13141378{
1315- if (dwEvent == EVENT_SYSTEM_FOREGROUND && hwnd != NULL && idObject == OBJID_WINDOW && hwnd != HWNDPrev || dwEvent == EVENT_OBJECT_CREATE && hwnd != NULL && idObject == OBJID_WINDOW && hwnd != HWNDPrev )
1379+ if (dwEvent == EVENT_OBJECT_CREATE && hwnd != NULL && hwnd != HWNDPrev )
13161380 {
13171381
1318- if (idChild != CHILDID_SELF ) {
1382+ if (idObject != OBJID_WINDOW && idChild != CHILDID_SELF ) {
13191383 return ;
13201384 }
13211385
0 commit comments