比如说有一个文件夹中有一个default.txt,我双击这个文件夹就直接打开这个default.txt
有没有这个可能性?
最好是能不能在目录下加个配置文件什么的
我看到在根目录下加autorun,但如果不是根目录怎么处理?

解决方案 »

  1.   

    你是说资源管理器吗?不是根目录也可以autorun吧?
      

  2.   

    用脚本肯定可以实现,但是我不会写。
    你参考看看windows目录和system32目录下的脚本,你打开这个目录的时候都不是直接显示文件的。
      

  3.   

    用IShellExecuteHook,属于shell扩展,这个接口只有一个函数Execute,在系统执行ShellExecute或ShellExecuteEx之前执行IShellExecuteHook的Execute函数,并把ShellExecute或ShellExecuteEx的SHELLEXECUTEINFO参数传给Execute这里有个例子,是用IShellExecuteHook记录执行历史的
    Execute History Bar使用说明
    http://www.geocities.jp/webcrazyjp/execbar.htm
    STDMETHODIMP CExecBarHook::Execute( LPSHELLEXECUTEINFO pei )
    { if( pei->fMask & SEE_MASK_IDLIST ){  // not process shell namespace
    pei->hInstApp = reinterpret_cast< HINSTANCE >( 123 );
    return S_FALSE; // continue to ShellExecute
    }
    PEXECBARINFO pebi=(PEXECBARINFO)new UCHAR[sizeof EXECBARINFO];
    memset(pebi,0,sizeof(EXECBARINFO)); if(pei->lpFile){ TCHAR path[ MAX_PATH ];
    LPTSTR lpFilePart;
    if( SearchPath(NULL, pei->lpFile, __TEXT(".exe"), MAX_PATH, path, &lpFilePart )){
    lstrcpy(pebi->File,lpFilePart);
    lstrcpy(pebi->FileDirectory,path);
    lstrcpy(pebi->Parameters,pei->lpParameters);
    lstrcpy(pebi->Verb,pei->lpVerb);
    DWORD len=MAX_PATH;
    GetUserName(path,&len);
    lstrcpy(pebi->Who,path);
    GetLocalTime(&pebi->ExecConfig.ExecuteTime);
    if(ExecSaveRegistry(pebi))
    if(pebi->ExecConfig.DisableIt){
    wsprintf(path,_T("Sorry,%s disable by WebCrazy Execute Bar!\nWelcome to http://webcrazy.yeah.net for more information!"),pebi->File);
    ::MessageBox(::GetDesktopWindow(),path,_T("Execute Bar"),MB_ICONSTOP|MB_OK);
    pei->hInstApp = reinterpret_cast< HINSTANCE >( 123 );
    return S_OK; // Signal ShellExecute to abort normal processing
    }
    }
    } pei->hInstApp = reinterpret_cast< HINSTANCE >( 123 );
    return S_FALSE; // Signal ShellExecute to continue normal processing
    }这个虽然是C#的,但更容易看明白
    用C#创建SHELL扩展
    http://dotnet.chinadir.net/10887.htm
      

  4.   

    在Execute里判断参数里传来的文件夹是否是你相要处理的文件夹,文件夹里是否有default.txt文件,然后再ShellExecute打开default.txt,这些就很简单了
      

  5.   

    楼主的意思好像是安装HOOK之类的东东,只要在目录下放一个配置文件,就可以在资源管理器里实现如上功能。我是这样理解的
      

  6.   

    ShellExecute是一个可行的方法
    不过能不能通过配置文件来解决呢?
    那样直接一点
      

  7.   

    Folder.htt 自定义文件夹 + WScript.Shell或Shell.Application
      

  8.   

    hook ShellExecute是非正常的方法。
    最简单的常规方法就是我说的,在folder.htt里写脚本,javascript或者是vbscript。可以参照windows目录下的。(当然了,我不会写,但肯定可以实现)
    另外就是shell扩展的方法。
      

  9.   

    To honker110(honker) 
    IShellExecuteHook只能侦测到execute,换句话说只能捕捉到exe被执行的情况
    但具体哪个目录打开他是无能为力的
    并不是没进一个文件夹都会响应的To vcmute,idAnts
    刚刚否定掉IShellExecuteHook,现在开始学习一下Folder.htt 自定义文件夹 + WScript.Shell或Shell.Application不过还没方向,哈哈
      

  10.   

    我了解了一下htt方面的内容
    其实这个解决办法不错
    98,2000都很好使,xp应该也可以,不过好像2003就不那么容易,我还没搞定
    但问题是htt会很容易被误认为脚本病毒的吧,那用户哪还敢用啊