Man kan gøre det på mange måder, alt efter hvor grundig det skal være og hvor meget man gider kode.
En simpel metode er at løbe alle vinduer igennem og se om den process der ejer dem er iexplore.exe og så udskrive det der står på title-baren, hvis det er:
#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 EnumWindowsProc(HWND hwnd, LPARAM Param)
{
DWORD ProcessID = -1;
GetWindowThreadProcessId(hwnd, &ProcessID);
if(ProcessID == (DWORD )Param)
{
char Text[1024];
GetWindowText(hwnd, Text, sizeof(Text));
if(strlen(Text))
printf("Title: %s\\n", Text);
}
return TRUE;
}
int main(int argc, char *argv[])
{
DWORD Processes[1024], ProcessesNeeded;
DWORD NumProcesses, x;
int ProcessIndex;
if(argc != 2)
{
printf("You have to specify which program you want to watch\\n");
return EXIT_FAILURE;
}
if(!EnumProcesses(Processes, sizeof(Processes), &ProcessesNeeded))
return EXIT_FAILURE;
NumProcesses = ProcessesNeeded/sizeof(DWORD);
for(x = 0, ProcessIndex = -1; x < NumProcesses && ProcessIndex == -1; x++)
{
HMODULE ModHandle[1024];
DWORD ModulesNeeded;
HANDLE ProcessHandle;
ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, Processes[x]);
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]))
{
ProcessIndex = x;
}
}
}
CloseHandle(ProcessHandle);
}
if(ProcessIndex == -1)
{
printf("Did not find a match for %s\\n", argv[1]);
return EXIT_FAILURE;
}
EnumWindows(EnumWindowsProc, Processes[ProcessIndex]);
return EXIT_SUCCESS;
}
Du får sikkert nogle falske hits.
En mere grundig metode er at løbe vinduernes child vinduer igennem og finde det vindue hvor man skriver url'en.
Til det skal man bruge EnumChildWindows og måske GetWindowLong (GWL_ID) og/eller GetClassName.
Derpå bruger man GetWindowText til at læse URL'en.
Ulempen er at popup vinduer ikke har et edit felt.
Skal det gøres ordentligt er man nødt til at overvåge trafik til & fra internet, men det er ikke helt let.
Har det noget fornuftigt formål ?
[Redigeret d. 07/11-04 20:11:47 af Bertel Brander]