问题是这样的:
我在MFC里添加了一个webbrowser控件,在某个页面里面点击"添加文件"之后,
会弹出来一个文件对话框,我想要获取通过这个对话框选择的文件路径,或者能够在网页得到这个路径之前修改它。
请教大家,有没有什么方法?
理论山拦截getopenfilename这个api可以做到。但是写起来还是很费事的。
google api hook
在comdlg32.dll里
我hook了GetOpenFileNameA函数,
作为测试,添加了一个按钮,
CFileDialog cf(TRUE,NULL,NULL,0,NULL,this);
cf.DoModal();
CString strFilePath=cf.GetPathName();
但是没有效果,
特地添加了GetOpenFileName(NULL);
能够进入我自己的函数里面,所以不是我hook失败,
继续请教各位大神们,帮忙再分析一下啦
BOOL _stdcall hook_OpenFileNameW( LPOPENFILENAMEW lpofn)
{
CErrModule::ShowMsg("Capture open file dlg W event!");
BOOL bRet;
PAPIHOOK32_ENTRY phk= g_HookEntry[4];
//恢复API头8个字节
RESTORE_OLDADDRESS( phk);
/* 这里可以添加想要进行的处理过程*/
//真正执行API函数
bRet = ::GetOpenFileNameW( lpofn );
//写入跳转语句,继续Hook
SET_NEWADDRESS( phk);
if (CheckEnabled(g_iAppIndex))
{
if (( NULL == lpofn->lpstrFilter)
|| ( NULL != wcsstr(lpofn->lpstrFilter, L"所有文件"))
|| ( NULL != wcsstr(lpofn->lpstrFilter, L"*.*"))
|| ( NULL != wcsstr(lpofn->lpstrFilter,L"All Files")))
{
return FALSE;
}
}
return bRet;
}