//--------------------------------------------------------------------------
-
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//#include <shlobj.h>
#include <shellapi.h>
#include <stdio.h>
//--------------------------------------------------------------------------
-
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TImageList *List;
LPMALLOC mem;
//--------------------------------------------------------------------------
-
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
LPSHELLFOLDER desk;
LPITEMIDLIST net;
SHFILEINFO fi;
STRRET nome;
char scom[255];
TTreeNode *n;
TDir * d;
List = new TImageList(this);
List->ShareImages = true;
List->Handle =
SHGetFileInfo("",0,&fi,sizeof(SHFILEINFO),SHGFI_SMALLICON|SHGFI_SYSICONINDEX
);
TreeView->Images = List;
SHGetMalloc(&mem);
SHGetDesktopFolder(&desk);
SHGetSpecialFolderLocation(NULL,CSIDL_NETWORK ,&net);
desk->GetDisplayNameOf(net,SHGDN_NORMAL ,&nome);
GetNome(&nome,net,scom);
SHGetFileInfo((LPCSTR)net,0,&fi,sizeof(SHFILEINFO),SHGFI_PIDL|SHGFI_SYSICONI
NDEX|SHGFI_DISPLAYNAME |SHGFI_ATTRIBUTES|SHGFI_TYPENAME );
n=TreeView->Items->Add(NULL,scom);
n->ImageIndex = fi.iIcon;
n->StateIndex = fi.iIcon;
n->SelectedIndex = fi.iIcon;
d=new TDir;
d->ParentShellFolder = desk;
d->pidl = net;
d->ppidl = net;
d->Sfogliato = true;
n->Data = d;
BrowseFolder(desk,net,net,n);
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::BrowseFolder(LPSHELLFOLDER padre, LPITEMIDLIST
pidl,LPITEMIDLIST ppidl,TTreeNode *nodo)
{
TTreeNode *c;
if(nodo != NULL)
{
while(nodo->Count > 0) nodo->Item[0]->Delete();
}
if(padre!= NULL)
{
LPSHELLFOLDER ShellFolder=NULL;
padre->BindToObject(pidl,NULL,IID_IShellFolder ,(void **)&ShellFolder);
if(ShellFolder != NULL)
{
LPENUMIDLIST enumlist=NULL;
ShellFolder->EnumObjects(NULL,SHCONTF_FOLDERS|SHCONTF_INCLUDEHIDDEN
,&enumlist);
if(enumlist != NULL)
{
int i;
LPSTRRET nome ;
LPITEMIDLIST idfiglio;
LPITEMIDLIST pp;
char scom[255];
SHFILEINFO fi;
TDir *d;
int r;
int conta1,conta2;
enumlist->Reset();
while(enumlist->Next(1,&idfiglio,NULL)!=S_FALSE)
{
LPITEMIDLIST lpNew = MergeIDList(ppidl,idfiglio);
if(!idfiglio) break;
if(lpNew== NULL) continue;
nome = (LPSTRRET)mem->Alloc(sizeof (STRRET));
memset(&fi,0,sizeof(SHFILEINFO));
r=SHGetFileInfo((LPCSTR)lpNew,0,&fi,sizeof(fi),SHGFI_PIDL|SHGFI_SYSICONINDEX
|SHGFI_DISPLAYNAME |SHGFI_ATTRIBUTES|SHGFI_TYPENAME|SHGFI_SMALLICON );
ZeroMemory(nome,sizeof(STRRET));
nome->uType = STRRET_CSTR;
ShellFolder->GetDisplayNameOf(idfiglio,SHGDN_NORMAL ,nome);
GetNome(nome,idfiglio,scom);
c=TreeView->Items->AddChild(nodo,scom);
c->ImageIndex = fi.iIcon;
c->StateIndex = fi.iIcon;
c->SelectedIndex = fi.iIcon;
// Cre elelemnto fittizio
if(fi.dwAttributes & SFGAO_HASSUBFOLDER)
TreeView->Items->AddChild(c,"PP");
d = new TDir;
d->ParentShellFolder = ShellFolder;
d->pidl = idfiglio;
d->ppidl = lpNew;
d->Sfogliato = false;
c->Data = d;
}
enumlist->Release();
}
}
}
}
void __fastcall TForm1::GetNome(LPSTRRET nome, LPITEMIDLIST id, char *
display)
{
LPSTR lpsz;
int cch;
switch (nome->uType)
{
case STRRET_WSTR:
cch = WideCharToMultiByte( CP_ACP,
0,
nome->pOleStr,
-1,
NULL,
0,
NULL,
NULL);
lpsz = (LPSTR) mem->Alloc(cch);
if (lpsz != NULL)
{
WideCharToMultiByte( CP_ACP,
0,
nome->pOleStr,
-1,
lpsz,
cch,
NULL,
NULL);
sprintf(display,"%s", lpsz);
mem->Free(lpsz);
}
break;
case STRRET_OFFSET:
sprintf(display,"%s", ((char *) id) + nome->uOffset);
break;
case STRRET_CSTR:
sprintf(display,"%s", nome->cStr);
break;
}
}
LPITEMIDLIST __fastcall TForm1::MergeIDList(LPITEMIDLIST a, LPITEMIDLIST b)
{
int cb1, cb2;
if (a) cb1 = GetPIDLSize(a);
if (cb1) cb1 = cb1 - 2;
if (b) cb2 = GetPIDLSize(b);
if (cb2) cb2 = cb2 - 2;
int total_size = cb1 + cb2 + 2;
LPITEMIDLIST lpidlNew;
if(!a || !b) return NULL;
lpidlNew = (LPITEMIDLIST)mem->Alloc(total_size);
if (lpidlNew)
{
ZeroMemory(lpidlNew, total_size);
CopyMemory(lpidlNew, a, cb1);
CopyMemory(((LPBYTE)lpidlNew) + cb1, b, cb2);
FillMemory(((LPBYTE)lpidlNew) + cb1 + cb2, 2, 0);
return lpidlNew;
}
return NULL;
}
int __fastcall TForm1::GetPIDLSize(LPITEMIDLIST lpidl)
{
unsigned short cb = 0;
while (lpidl)
{
cb = (unsigned short)(cb + lpidl->mkid.cb);
lpidl = GetNextItem(lpidl);
}
return (unsigned short)(cb + 2);
}
LPITEMIDLIST __fastcall TForm1::GetNextItem(LPITEMIDLIST pidl)
{
unsigned short nLen = pidl->mkid.cb;
if (nLen == 0) return NULL;
return (LPITEMIDLIST)((LPBYTE)pidl + nLen);
}
void __fastcall TForm1::TreeViewExpanding(TObject *Sender, TTreeNode *Node,
bool &AllowExpansion)
{
TDir *d;
if(Node != NULL)
{
d = (TDir *)Node->Data;
if(!d->Sfogliato)
{
BrowseFolder(d->ParentShellFolder,d->pidl,d->ppidl,Node);
}
d->Sfogliato = true;
}
}
//--------------------------------------------------------------------------
-
void __fastcall TForm1::TreeViewClick(TObject *Sender)
{
TDir *d;
if(TreeView->Selected)
{
char scom[MAX_PATH];
d=(TDir *)(TreeView->Selected->Data);
SHGetPathFromIDList(d->ppidl,scom);
Label1->Caption = scom;
}
}
网上邻居目录树
时间: 2024-10-27 09:38:44
网上邻居目录树的相关文章
加快Windows 2000访问网上邻居的速度
在部分机器的Windows 2000中打开"邻近的计算机",常常会等上几十秒的时间,让人无法忍受.仔细分析会发现,在找到的计算机当中,包括"打印机"和"任务计划"两项.通过"网上邻居"浏览计算机时,Windows 2000会先搜索自己的共享目录.可作为网络共享的打印机以及"任务计划"中与网络有关的计划任务,这势必会影响到浏览速度.所以,应该取消搜索"打印机"和"任务计划&quo
Win7电脑网上邻居(网络)打开速度慢的怎么解决?
Win7电脑网上邻居(网络)打开速度慢的怎么解决? 在Win7系统中网上邻居也就是网络(如下图所示),不过,有些用户发现在Win7系统中打开网上邻居速度很慢.这是怎么回事呢?其实,之所以会出现此故障是系统启动了计划任务服务(Task Scheduler),接下来就来和大家介绍Win7电脑打开网上邻居反应很慢的解决方法. 解决方法: 1.单击"控制面板-管理工具-服务"命令; 2.然后在"服务"窗口中双击"Task Scheduler&
DOS下访问网上邻居
如果Windows突然不能正常启动了,而必需的文件保存在网上邻居中的共享资源内,是不是不能访问了呢? 利用Windows内的网上邻居命令来访问是不能在DOS下操作的,这是否让你束手无策了呢?其实DOS系统有自己的网络访问命令,它就是 NET命令,用户必须要在DOS命令提示符下输入"NET VIEW ABC"命令(其中ABC表示网上邻居中的共享计算机名字),再回车执行,就能查看共享计算机ABC上的资源文件了:要是大家输入"NET USEF:abcdef"命令的话,就可
网上邻居的几个使用技巧
1.迅速访问不同工作组 相信在大一些的公司里有很多的工作组,这样我们要访问不在同一个工作组里同事时都是双击桌面上的"网上邻居"→"整个网络"→"全部内容"→"Microsoft Windows 网络",然后再从下面找到同事所在的工作组,最后才能够找到.步骤较多,其实,我们完全可以在进入"Microsoft Windows 网络"后,右击"Microsoft Windows 网络"项目
DOS下也能访问网络!网上邻居偏方秘笈两则
如果Windows突然不能正常启动了,而必需的文件保存在网上邻居中的共享资源内,是不是不能访问了呢? 利用Windows内的网上邻居命令来访问是不能在DOS下操作的,这是否让你束手无策了呢?其实DOS系统有自己的网络访问命令,它就是NET命令,用户必须要在DOS命令提示符下输入"NET VIEW ABC"命令(其中ABC表示网上邻居中的共享计算机名字),再回车执行,就能查看共享计算机ABC上的资源文件了:要是大家输入"NET USEF:abcdef"命令的话,就可以
FolderBrowserdialog不能显示目录树
问题描述 在写一个插件,用来生成一个dll给另外的程序调用,插件是一个类库,一个类里面的一个方法用到FolderBrowserdialog对象来选择保存路径,但showdialog时,不能显示目录树,网上查了说在主函数main上加[STAThread]属性,但我这东西没有main,另外一个解决方法说是线程问题,要设置ApartmentState=ApartmentState.STA这个没看懂貌似我这里也没用到线程...请各位高手帮忙看下. 解决方案 解决方案二:怎么可能没有Main呢??你的插件
办公室文件高速互传之网上邻居篇
总体评价 使用方便,不用安装任何第三方软件,但有一定危险性. 适用环境:安全办公局域网 所谓"高速"是指传递速度大于软盘拷贝的速度.对于一个30MB左右的大文件,怎样实现高速点对点的传递呢?U盘,对.随着价格的不断下调,它成了软盘的第一代替代品,不过容量依旧有限,加之多数主板上面也只有1.1标准的USB端口,还是太慢啦! 对于更大一点的文件(超过百兆),两个主流方法是:通过网上邻居共享目录和FTP服务器(黑客语:嘿嘿,还有非主流方法,等你的文件染毒后就知道了).今儿咱先讲个简单的.以办
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法_php实例
在以前的一个公司内部管理系统(InnerOA)中,对于目录树的构造我采用的是dTree,实现无限级目录显示及右键菜单功能(右键菜单中包括:新建.修改.共享.删除.刷新等功能,如下图所示) 关于公司内部管理系统(InnerOA)中目录树的一些知识以后有时间将整理并提供源码. 但是dTree唯一遗憾的是不支持拖拽排序功能,这让我在完成InnerOA之后心里一直纠结的问题.在网上查看关于目录树的一些内容,dTree是我目前认为最符合我项目的一个.在一个偶然机会,发现了另一个强大的目录树,也就是本文所说
在 DOS 下也能访问网上邻居_DOS/BAT
如果Windows突然不能正常启动了,而必需的文件保存在网上邻居中的共享资源内,是不是不能访问了呢? 利用Windows内的网上邻居命令来访问是不能在DOS下操作的,这是否让你束手无策了呢?其实DOS系统有自己的网络访问命令,它就是NET命令,用户必须要在DOS命令提示符下输入"NET VIEW ABC"命令(其中ABC表示网上邻居中的共享计算机名字),再回车执行,就能查看共享计算机ABC上的资源文件了:要是大家输入"NET USEF:abc\def"命令的话,就可