首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求计算机上已打开的文件路径、网页地址

2012-06-25 
求电脑上已打开的文件路径、网页地址下面代码已实现:当前电脑正在运行的文件/应用程序的名称、对应的EXE路径

求电脑上已打开的文件路径、网页地址
下面代码已实现:当前电脑正在运行的文件/应用程序的名称、对应的EXE路径。
但现还要求文件路径(网页的求网页地址)?
目的:监视本机在查看哪些东东。

bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView)
{
char WindowName[80]="\0", ClassName[80]="\0",strFilePath[255]="\0";
GetWindowText(hWnd, WindowName, 80);
TListItem *item=NULL;
if(IsWindowVisible(hWnd) && AnsiString(WindowName).Length()!=0)
{
  item=ListView->Items->Add();
  item->Caption = AnsiString(WindowName);

  GetClassName(hWnd,ClassName,80);
  item->SubItems->Add(StrPas(ClassName));

  //通过窗体句柄求其进程ID
  unsigned long pid;
  GetWindowThreadProcessId(hWnd,&pid);

  //通过进程ID获取进程句柄  
  HANDLE pHandle=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,pid);//第一参数必须这样,否则GetModuleFileName返回失败

  //通过进程句柄求路径(对应的EXE路径,非文件路径)
  GetModuleFileNameEx(pHandle,NULL,strFilePath,255); // GetModuleHandle(NULL)
  //GetModuleFileName(pHandle,strFilePath,255); //用这句:strFilePath 结果为空的
  item->SubItems->Add(StrPas(strFilePath));
}
return true;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListView1->Items->Clear();
EnumDesktopWindows(NULL,(WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1);
}

[解决办法]
已打开的文件路径?这也太含糊了吧,我弄一个无窗口的进程用CreateFile打开一个文件,这算不算?或者弄一个无窗口的进程访问一个网页,枚举窗口这一招明显就失效。
[解决办法]
用钩子,监视每一个创建的窗口,判断其标题。
Google "SetWindowsHookEx WH_CBT"
[解决办法]
好像没有什么特别好的方法
文件可以从底层钩CreateFile吧
网页就不太清楚了
[解决办法]
监控正在访问哪些文件可以用文件监控方式,拦截ZwCreateFile等API,或者驱动,看看filemon
监控访问的网站,可以用网络监控方法,拦截connect,send,recv等方法,或者就是驱动,NDIS

热点排行