IE,当添加到收藏夹的时候,系统应该会知道的吧? 那么有没有什么消息被触发? 或者说哪个连接点里有? 我看DISPID_ADDFAVORITE,但是不知道他在哪个连接点里,MSDN都找不到

解决方案 »

  1.   

    IShellUIHelper接口有AddFavorite方法
      

  2.   

    我曾用单独的一个线程监视收藏夹目录。如果有新的记录,则做相应的处理。在下面的片段中用到了两个事件。
    一个是由主线程传入的,用于通知子线程什么时候退出。
    另一个事件用于检测收藏夹是否有改变。
    //
    //先检测一次是否有新的条目,可能第一遍时间会很长,期间要检测一次退出事件。
    //再对目录进行监视
    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