| 发表于:2007-03-17 13:47:353楼 得分:0 |
//************************************************************************************* [dllimport( "shell32.dll ")] public static extern int extracticon(intptr h,string strx,int ii); [dllimport( "shell32.dll ")] public static extern int shgetfileinfo(string pszpath,uint dwfileattributes,ref shfileinfo psfi,uint cbfileinfo, uint uflags); public struct shfileinfo { public intptr hicon; public int iicon; public uint dwattributes; public char szdisplayname; public char sztypename; } string strfilepath= " "; //************************************************************************************* protected virtual icon myextracticon(string filename,int iindex) { try { intptr hicon=(intptr)extracticon(this.handle,filename,iindex); if(! hicon.equals(null)) { icon icon=icon.fromhandle(hicon); return icon; } } catch(exception ex) { messagebox.show(ex.message, "错误提示 ",0,messageboxicon.error);} return null; } //************************************************************************************* protected virtual void seticon(imagelist imagelist,string filename,bool tf) { shfileinfo fi=new shfileinfo(); if(tf==true) { int itotal=(int)shgetfileinfo(filename,0,ref fi,100, 16640);//shgfi_icon ¦shgfi_smallicon try { if(itotal > 0) { icon ic=icon.fromhandle(fi.hicon); imagelist.images.add(ic); //return ic; } } catch(exception ex) { messagebox.show(ex.message, "错误提示 ",0,messageboxicon.error);} } else { int itotal=(int)shgetfileinfo(filename,0,ref fi,100, 257); try { if(itotal > 0) { icon ic=icon.fromhandle(fi.hicon); imagelist.images.add(ic); //return ic; } } catch(exception ex) { messagebox.show(ex.message, "错误提示 ",0,messageboxicon.error);} } // return null; } //************************************************************************************* public void getdrive() { treeview1.imagelist=treeimagelist; treeview1.beginupdate(); treeview1.nodes.clear(); treenode rootnode=new treenode( "我的电脑 ",0,0); treeview1.nodes.add(rootnode); int iimageindex=2; int iselectedindex=2; string[] astrdrives = directory.getlogicaldrives(); foreach (string str in astrdrives) { if(str == "a:\\ ") { iimageindex=1; iselectedindex=1;} else if(str == "g:\\ ") { iimageindex=3; iselectedindex=3;} else { iimageindex=2; iselectedindex=2;} treenode tndrive = new treenode(str, iimageindex,iselectedindex); treeview1.nodes[0].nodes.add(tndrive); adddirectories(tndrive); if(str == "c:\\ ") { treeview1.selectednode=tndrive;} } treeview1.endupdate(); } //************************************************************************************* void adddirectories(treenode tn) { tn.nodes.clear(); string strpath=tn.fullpath; strpath=strpath.remove(0,5); //获得当前目录 directoryinfo dirinfo = new directoryinfo(strpath); directoryinfo[] adirinfo; try { adirinfo = dirinfo.getdirectories(); } catch { return;} int iimageindex=4; int iselectedindex=5; foreach (directoryinfo di in adirinfo) { if(di.name== "recycler " ¦ ¦di.name== "recycled " ¦ ¦di.name== "recycled ") {iimageindex=6; iselectedindex=6;} else {iimageindex=4; iselectedindex=5;} treenode tndir = new treenode(di.name, iimageindex, iselectedindex); tn.nodes.add(tndir); } /* //获得当前目录下的所有文件 fileinfo[] dirfiles; dirfiles=dirinfo.getfiles(); int icount=7; foreach (fileinfo fi in dirfiles) { //得到每个文件的图标 string str=fi.fullname; try { seticon(treeimagelist,str,false); } catch(exception ex) { messagebox.show(ex.message, "错误提示 ",0,messageboxicon.error);} treenode tndir = new treenode(fi.name, icount, icount); tn.nodes.add(tndir); icount++; } */ } //************************************************************************************* //在大图标、小图标、详细列表切换时调用 protected virtual void listviewab(int iii) { if(iii==1) { lisrimagelist2.imagesize=new size(32,32); listview1.largeimagelist=lisrimagelist2; if(listview1.view==view.details ¦ ¦listview1.view==view.smallicon) {listview1.view=view.largeicon;} } else if(iii==2) { if(listview1.view==view.details ¦ ¦listview1.view==view.largeicon) {listview1.view=view.smallicon;} } else { if(listview1.view==view.largeicon ¦ ¦listview1.view==view.smallicon) {listview1.view=view.details;} } } //************************************************************************************* private void treeview1_beforeexpand_1(object sender, system.windows.forms.treeviewcanceleventargs e) { //base.onbeforeexpand(e); treeview1.beginupdate(); foreach (treenode tn in e.node.nodes) { adddirectories(tn);} treeview1.endupdate(); } //************************************************************************************* protected virtual void initlist(treenode tn) { this.statusbarpanel1.text= "正在刷新文件夹,请稍等..... "; this.cursor=cursors.waitcursor; this.lisrimagelist2.images.clear(); this.lisrimagelist.images.clear(); listview1.smallimagelist=lisrimagelist; icon ic0=myextracticon( "%systemroot%\\system32\\shell32.dll ",3); lisrimagelist.images.add(ic0);。 lisrimagelist2.images.add(ic0); listview1.clear(); //设置列表框的表头 listview1.columns.add( "文件名 ",160,horizontalalignment.left); listview1.columns.add( "文件大小 ",120,horizontalalignment.left); listview1.columns.add( "创建时间 ",120,horizontalalignment.left); listview1.columns.add( "访问时间 ",200,horizontalalignment.left); string strpath=tn.fullpath; strpath=strpath.remove(0,5); //获得当前目录下的所有文件 directoryinfo curdir=new directoryinfo(strpath);//创建目录对象。 fileinfo[] dirfiles; try { dirfiles=curdir.getfiles(); } catch { return;} string []arrsubitem=new string[4]; //文件的创建时间和访问时间。 int icount=0; int iconindex=1;//用1,而不用0是要让过0号图标。 foreach(fileinfo fileinfo in dirfiles) { string strfilename=fileinfo.name; //如果不是文件pagefile.sys if(! strfilename.equals( "pagefile.sys ")) { arrsubitem[0]=strfilename; arrsubitem[1]=fileinfo.length+ " 字节 "; arrsubitem[2]=fileinfo.creationtime.tostring(); arrsubitem[3]=fileinfo.lastaccesstime.tostring(); } else { arrsubitem[1]= "未知大小 "; arrsubitem[2]= "未知日期 "; arrsubitem[3]= "未知日期 ";} //得到每个文件的图标 string str=fileinfo.fullname; try { seticon(lisrimagelist,str,false); seticon(lisrimagelist2,str,true); } catch(exception ex) { messagebox.show(ex.message, "错误提示 ",0,messageboxicon.error);} | | |
|