有没有可能像打开文件一样打开文件夹? 比如说有一个文件夹中有一个default.txt,我双击这个文件夹就直接打开这个default.txt有没有这个可能性?最好是能不能在目录下加个配置文件什么的我看到在根目录下加autorun,但如果不是根目录怎么处理? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是说资源管理器吗?不是根目录也可以autorun吧? 用脚本肯定可以实现,但是我不会写。你参考看看windows目录和system32目录下的脚本,你打开这个目录的时候都不是直接显示文件的。 用IShellExecuteHook,属于shell扩展,这个接口只有一个函数Execute,在系统执行ShellExecute或ShellExecuteEx之前执行IShellExecuteHook的Execute函数,并把ShellExecute或ShellExecuteEx的SHELLEXECUTEINFO参数传给Execute这里有个例子,是用IShellExecuteHook记录执行历史的Execute History Bar使用说明http://www.geocities.jp/webcrazyjp/execbar.htmSTDMETHODIMP 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 在Execute里判断参数里传来的文件夹是否是你相要处理的文件夹,文件夹里是否有default.txt文件,然后再ShellExecute打开default.txt,这些就很简单了 楼主的意思好像是安装HOOK之类的东东,只要在目录下放一个配置文件,就可以在资源管理器里实现如上功能。我是这样理解的 ShellExecute是一个可行的方法不过能不能通过配置文件来解决呢?那样直接一点 Folder.htt 自定义文件夹 + WScript.Shell或Shell.Application hook ShellExecute是非正常的方法。最简单的常规方法就是我说的,在folder.htt里写脚本,javascript或者是vbscript。可以参照windows目录下的。(当然了,我不会写,但肯定可以实现)另外就是shell扩展的方法。 To honker110(honker) IShellExecuteHook只能侦测到execute,换句话说只能捕捉到exe被执行的情况但具体哪个目录打开他是无能为力的并不是没进一个文件夹都会响应的To vcmute,idAnts刚刚否定掉IShellExecuteHook,现在开始学习一下Folder.htt 自定义文件夹 + WScript.Shell或Shell.Application不过还没方向,哈哈 我了解了一下htt方面的内容其实这个解决办法不错98,2000都很好使,xp应该也可以,不过好像2003就不那么容易,我还没搞定但问题是htt会很容易被误认为脚本病毒的吧,那用户哪还敢用啊 注册窗口类的时候,哪个参数是控制“有无边框”的? 关于CTypedPtrList<CObList, CFriend*> m_frdList; 关于3D的openjel技术 SOCKET中==号的意思 默认处理所有异常类是那个? 关于图形控件,搞图形的朋友可以看下,可能会有点帮助。 CreateWindow()创建按钮---她咋就出不来呢?谢谢!(题是没有错误,但费希不出原因) 请教:怎么样才能做好一个服务器程序 请介绍一下hook api的技术,up有分 !!!高手救命啊!!! 我刚做软件这个问题没做过??? 关于HWND的一个小问题
你参考看看windows目录和system32目录下的脚本,你打开这个目录的时候都不是直接显示文件的。
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
不过能不能通过配置文件来解决呢?
那样直接一点
最简单的常规方法就是我说的,在folder.htt里写脚本,javascript或者是vbscript。可以参照windows目录下的。(当然了,我不会写,但肯定可以实现)
另外就是shell扩展的方法。
IShellExecuteHook只能侦测到execute,换句话说只能捕捉到exe被执行的情况
但具体哪个目录打开他是无能为力的
并不是没进一个文件夹都会响应的To vcmute,idAnts
刚刚否定掉IShellExecuteHook,现在开始学习一下Folder.htt 自定义文件夹 + WScript.Shell或Shell.Application不过还没方向,哈哈
其实这个解决办法不错
98,2000都很好使,xp应该也可以,不过好像2003就不那么容易,我还没搞定
但问题是htt会很容易被误认为脚本病毒的吧,那用户哪还敢用啊