描述:
IE,当添加到收藏夹的时候,系统应该会知道的吧? 那么有没有什么消息被触发? 或者说哪个连接点里有? 我看DISPID_ADDFAVORITE,但是不知道他在哪个连接点里,MSDN都找不到
解决方案1:
我曾用单独的一个线程监视收藏夹目录。如果有新的记录,则做相应的处理。
在下面的片段中用到了两个事件。
一个是由主线程传入的,用于通知子线程什么时候退出。
另一个事件用于检测收藏夹是否有改变。
//
//先检测一次是否有新的条目,可能第一遍时间会很长,期间要检测一次退出事件。
//再对目录进行监视
unsigned __stdcall FunctionForFavoriteMonitor( void* pArguments )
{
//由主线程传入的参数
CParam_Favorite_Monitor* pParam=(CParam_Favorite_Monitor*)pArguments;
//取得收藏夹所在的目录
CString szPath;
CFavorite::GetFavoritePathName(szPath);
//先执行一遍检测
CFavorite::CheckFavorites(szPath,pParam->m_hEventQuit);
//再等待两个事件中的一个返回
DWORD dwWaitStatus;
HANDLE dwChangeHandles[2];
dwChangeHandles[0]=pParam->m_hEventQuit; //退出事件
//新建收藏夹目录的监视事件
HANDLE hNotify=FindFirstChangeNotification(szPath,TRUE,FILE_NOTIFY_CHANGE_LAST_WRITE);
while(INVALID_HANDLE_VALUE!=hNotify)
{
//
dwChangeHandles[1]=hNotify;
//检测两个事件是否有一个返回
dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,
FALSE, INFINITE);
//
if(dwWaitStatus==WAIT_OBJECT_0+1)
{
//先取得下一个通知句柄
if(!FindNextChangeNotification(hNotify))
break;
//check
CFavorite::CheckFavorites(szPath,pParam->m_hEventQuit);
}
else if(dwWaitStatus==WAIT_OBJECT_0)
{
//退出
break;
}
else
{
//退出
break;
}
}
//close handle
if(hNotify!=INVALID_HANDLE_VALUE)
{
FindCloseChangeNotification(hNotify);
}
//再次等待
::WaitForSingleObject(pParam->m_hEventQuit,INFINITE);
//通知主线程可以正常退出
::SetEvent(pParam->m_hEventQuit_back);
return 0;
}
=============================
全新设计的CSDN助手,支持CSDN所有功能,支持监视、收藏、历史
http://community.csdn.net/expert/topicview1.asp?id=4806193