![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
uuf pued llevo dia y he buscado pero cuando he estado cerca pues retorno al inicio, mi problema es que kisiera hacer una lista de procesos en mi programa.
bueno gracias por adelantado ![]() |
|
#3
|
||||
|
||||
|
Aquí también tratamos del tema, pero en C. Puede que te sea de utilidad.
http://www.clubdelphi.com/foros/showthread.php?t=37988 |
|
#4
|
|||
|
|||
|
tengo este codigo, que le traduje desde delphi a builder, pero ahora me da un error al compilar con esta lines si pudieran ayudarme una ves mas
gracias.. void GetMemoryProcess() { HANDLE foto; tagPROCESSENTRY32 datos; int r=1; datos.dwSize = sizeof(tagPROCESSENTRY32); foto = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); while (Process32Next(foto, &datos)!=0) { //en esta linea del listview me da un error Form1->ListView1->Items->Add(IntToStr(datos.th32ProcessID)); Form1->ListView1->Items->Item[r]->SubItems->Add(datos.szExeFile); r++; } CloseHandle(foto); } |
|
#5
|
||||
|
||||
Lo que seria estupendo es que nos dijeras que error te da al compilar |
|
#6
|
|||
|
|||
|
bueno estu mirando y cambien lo que tenia.
ya no me da el error pero no me sale los nombre de los procesos while (Process32Next(foto, &datos)!=0) { Form1->ListView1->AddItem(IntToStr(datos.th32ProcessID),NULL); Form1->ListView1->Items->Item[r]->SubItems->Add(".EXE"); r++; } |
|
#7
|
|||
|
|||
|
Hola:
Si solo necesitas listar los procesos sin la ruta puedes hacerlo con el siguiente código, la ventaja es que funciona en todas las versiones de Windows con cualquier versión de C++Builder. Para probarlo solo necesitas añadir un TListBox (ListBox1) y lo siguiente en el constructor del form: Código:
// Añadimos: #include<Tlhelp32.h>
PROCESSENTRY32 proc = { sizeof(proc) };
HANDLE hSysSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if ( hSysSnapshot != reinterpret_cast<HANDLE>(-1)
&& Process32First(hSysSnapshot, &proc) )
{
ListBox1->Clear();
do
{
char str[512];
wsprintf(str, "%s (id=%lu)", proc.szExeFile, proc.th32ProcessID);
ListBox1->Items->Add(str);
} while ( Process32Next(hSysSnapshot, &proc) );
}
CloseHandle (hSysSnapshot);
Código:
//--- Cargamos dinamicamente la libreria "psapi.dll"
// (En versiones mas actualizadas (BCB6) no necesitamos hacer esto.
// Solo añadir #include<psapi.h> y la libreria "psapi.lib")
typedef BOOL (__stdcall *PFEnumProcesses)(DWORD*,DWORD,DWORD*);
typedef BOOL (__stdcall *PFEnumProcessModules)(HANDLE,HMODULE*,DWORD,LPDWORD);
typedef DWORD (__stdcall *PFGetModuleFileNameEx)(HANDLE,HMODULE,LPTSTR,DWORD);
PFEnumProcesses fEnumProcesses;
PFEnumProcessModules fEnumProcessModules;
PFGetModuleFileNameEx fGetModuleFileNameEx;
HINSTANCE hLib = LoadLibrary("psapi.dll");
if (hLib)
{
fEnumProcesses = reinterpret_cast<PFEnumProcesses>(
GetProcAddress(hLib, "EnumProcesses") );
fEnumProcessModules = reinterpret_cast<PFEnumProcessModules>(
GetProcAddress(hLib, "EnumProcessModules") );
fGetModuleFileNameEx = reinterpret_cast<PFGetModuleFileNameEx>(
GetProcAddress(hLib, "GetModuleFileNameExA") );
if (fEnumProcesses && fEnumProcessModules && fGetModuleFileNameEx)
{
//--- Obtenemos la lista de indentificadores de proceso
DWORD aProcesses[1024], cbNeeded, cProcesses, i;
if (!fEnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded))
return;
//--- Calculamos cuantos indentificadores fueron devueltos
cProcesses = cbNeeded / sizeof(DWORD);
//--- Mostramos información de cada proceso
ListBox1->Clear();
for (i=0; i<cProcesses; i++)
{
char szProcessName[MAX_PATH] = "desconocido";
DWORD processID = aProcesses[i];
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION
| PROCESS_VM_READ, FALSE, processID);
HMODULE hMod;
if (hProcess)
{
if (fEnumProcessModules(hProcess, &hMod,
sizeof(hMod), &cbNeeded))
{
fGetModuleFileNameEx(hProcess, hMod,
szProcessName, sizeof(szProcessName));
String str("");
str.sprintf("%s (Process ID: %u)",
szProcessName, processID);
ListBox1->Items->Add(str);
}
CloseHandle(hProcess);
} // if hProcess
} // for i
} // if
FreeLibrary(hLib);
} // if hLib
Saludos Cordiales |
|
#8
|
|||
|
|||
|
bueno aki dejo lo que finalmente obtuve ademas busque otros hilos en este sitio que me sirvieron para mi final.
hay que poner un listview y adicionarle dos columnas ademas en viewstyle ponele vsreport bueno ojala le sirva a alguien void GetMemoryProcess()//Para listar los procesos { HANDLE foto; tagPROCESSENTRY32 datos; int Indice=0; datos.dwSize = sizeof(tagPROCESSENTRY32); foto = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); while (Process32Next(foto, &datos)!=0) { Form1->ListView1->Items->Add()->Caption=IntToStr(datos.th32ProcessID); Form1->ListView1->Items->Item[Indice]->SubItems->Add(datos.szExeFile); Indice++; } CloseHandle(foto); } |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Acceder a la lista de procesos | IZO | API de Windows | 9 | 25-04-2007 20:31:44 |
| ¿Cómo ocultar programa de lista de procesos de xp? | israelgs | C++ Builder | 13 | 27-04-2006 14:14:37 |
| ¿Mejor heredar de una Lista o mejor introducir la Lista en un campo? | Jome | OOP | 8 | 24-11-2005 17:11:16 |
| Ocultar una aplicacion de la lista procesos w2000 | marceloalegre | Varios | 0 | 02-05-2005 16:26:19 |
|