hook webbrowser文件对话框 5C

图片说明

问题是这样的:
我在MFC里添加了一个webbrowser控件,在某个页面里面点击"添加文件"之后,
会弹出来一个文件对话框,我想要获取通过这个对话框选择的文件路径,或者能够在网页得到这个路径之前修改它。
请教大家,有没有什么方法?

4个回答

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;

}


理论山拦截getopenfilename这个api可以做到。但是写起来还是很费事的。
google api hook

hwhaocool
Yellow_Tail 我hook了GetOpenFileNameA函数,添加了一个按钮,CFileDialog cf(TRUE,NULL,NULL,0,NULL,this); cf.DoModal(); CString strFilePath=cf.GetPathName(); 没有效果,
接近 5 年之前 回复
hwhaocool
Yellow_Tail hook API这个我会,我就是不确定要hook哪个,我之前以为是GetPathName,怎么定位这个API呢?
接近 5 年之前 回复

在comdlg32.dll里

hwhaocool
Yellow_Tail 额,我感觉我的智商受到了鄙视,我先试试看吧。我刚刚想问的是:怎么确定是哪个API?
接近 5 年之前 回复

我hook了GetOpenFileNameA函数,
作为测试,添加了一个按钮,

CFileDialog cf(TRUE,NULL,NULL,0,NULL,this); 
 cf.DoModal();
 CString strFilePath=cf.GetPathName();

但是没有效果,
特地添加了GetOpenFileName(NULL);
能够进入我自己的函数里面,所以不是我hook失败,

继续请教各位大神们,帮忙再分析一下啦

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问