Man kunne starte med:
#include <windows.h>
#include <psapi.h>
#include <stdlib.h>
#include <stdio.h>
void GetFileAndExt(const char *FullPath, char *Name)
{
char Ext[MAX_PATH];
_splitpath(FullPath, NULL, NULL, Name, Ext);
strcat(Name, Ext);
}
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
char Text[1024] = "";
GetWindowText(hwnd, Text, sizeof(Text));
if(Text[0])
{
printf(">>%s\n", Text);
}
EnumChildWindows(hwnd, EnumChildProc, lParam);
return TRUE;
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM Param)
{
DWORD ProcessID = -1;
GetWindowThreadProcessId(hwnd, &ProcessID);
if(ProcessID == (DWORD )Param)
{
char Text[1024] = "";
GetWindowText(hwnd, Text, sizeof(Text));
if(Text[0])
{
printf(">%s\n", Text);
}
EnumChildWindows(hwnd, EnumChildProc, 0);
}
return TRUE;
}
int main(int argc, char *argv[])
{
DWORD Processes[1024], ProcessesNeeded;
DWORD NumProcesses, i;
if(argc != 2)
{
printf("You have to specify which program you want to bring to front\n");
return EXIT_FAILURE;
}
if(!EnumProcesses(Processes, sizeof(Processes), &ProcessesNeeded))
return EXIT_FAILURE;
NumProcesses = ProcessesNeeded/sizeof(DWORD);
for(i = 0; i < NumProcesses; i++)
{
HMODULE ModHandle[1024];
DWORD ModulesNeeded;
HANDLE ProcessHandle;
ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, FALSE, Processes[i]);
if(EnumProcessModules(ProcessHandle, ModHandle, sizeof(ModHandle), &ModulesNeeded))
{
char ModuleName[MAX_PATH], FileName[MAX_PATH];
if(GetModuleFileNameEx(ProcessHandle, ModHandle[0], ModuleName, sizeof(ModuleName)))
{
GetFileAndExt(ModuleName, FileName);
if(!stricmp(FileName, argv[1]))
{
printf("Found a match: %s\n", ModuleName);
EnumWindows(EnumWindowsProc, (LPARAM )Processes[i]);
return EXIT_SUCCESS;
}
}
}
CloseHandle(ProcessHandle);
}
return EXIT_FAILURE;
}
Det lister alle vindue's titler for alle vinduer ejet af et program (angivet som parameter til programmet, f.ex. explorer.exe).
Se også:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/psapi_functions.asp