Files
mimis/cpp/list/main.cpp

63 lines
1.6 KiB
C++

#include <windows.h>
#include <iostream>
#include <tlhelp32.h>
#include <tchar.h>
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam);
BOOL GetProcessList();
using namespace std;
int main(int argc, char **argv) {
if (argc == 2) {
if (*argv[1] == 'w') {
printf("handle\tpid\ttitle\n");
EnumWindows(EnumProc, 0);
return 0;
} else if (*argv[1] == 'p') {
printf("pid\tname\n");
GetProcessList();
return 0;
}
}
return 1;
}
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam) {
DWORD processId;
GetWindowThreadProcessId(hWnd, &processId);
TCHAR title[500];
ZeroMemory(title, sizeof(title));
GetWindowText(hWnd, title, sizeof(title) / sizeof(title[0]));
printf("%d\t%d\t%s\n", hWnd, processId, title);
return TRUE;
}
BOOL GetProcessList() {
HANDLE hProcessSnap;
HANDLE hProcess;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) {
return FALSE;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First( hProcessSnap, &pe32 ) ) {
CloseHandle(hProcessSnap);
return FALSE;
}
do {
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
if( hProcess != NULL ) {
CloseHandle( hProcess );
}
printf("%d\t%s\n", pe32.th32ProcessID, pe32.szExeFile);
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle( hProcessSnap );
return TRUE;
}