1. 多线程式技术,防止界面出现死锁。
2. 使用了网络枚举来枚举在线的网络用户。
3. 使用了Unicode的转换函数进从AnsiString到Unicode的转换。
4. 使用了简单的不规则窗口的技术。
5. 自动安装,将自己加入系统起动中。
6. 系统托盘技术。
编程方法:
1. 如图所示在窗体上加入的有的控件:TListView,TTreeView,TMemo,菜单、托盘、按钮、状态栏
2. 针对各控件按本文所写加入代码即可。
3. 以下是发送函数
| void __fastcall TFormMain::ButtonSendClick(TObject *Sender) { AnsiString Message,UserName,FromName; TListItem *ListItem; if(CheckBoxAnony->Checked)FromName=EditAnony->Text; else FromName=""; Message=Memo1->Text; if(Message==""){ShowMessage("Please Enter words to send");return;} if(!ListView1->SelCount){ if(TreeView1->Selected==NULL){ShowMessage("Please select destnation");return;} UserName=TreeView1->Selected->Text; if(TreeView1->Selected->Level==1)UserName=UserName "*"; new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked); return; } ListItem=ListView1->Selected; UserName=ListItem->Caption; if(TreeView1->Selected->Level==0)UserName ="*"; while(UserName[1]=='\\') UserName=UserName.SubString(2,UserName.Length()-1); new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked); for(int i=1;i ListItem=ListView1->GetNextItem(ListItem,sdAll,TItemStates()< if(TreeView1->Selected->Level==0)UserName ="*"; while(UserName[1]=='\\')UserName=UserName.SubString(2,UserName.Length()-1); new NetMessageSend(false,UserName,FromName,Message,CheckBoxGetRet->Checked); } } |
以下是网络结点枚举函数,是个线程
| bool __fastcall EnumNetResource::GetNetRes( TTreeNodes *Nodes,TTreeNode * Node,NETRESOURCE *pNetResource,int Depth) { #define ENUMBUFSIZE (16*1024) #define ENUMCOUNT 10 NETRESOURCE buff[1024]; AnsiString UserName; if(Terminated) return false; if(Nodes==NULL) return false; if(Depth==0) return true; HANDLE hEnum; bool reValue=true; NETRESOURCE *pNetRes,NetRes; if(WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0, pNetResource,&hEnum)!=NO_ERROR)return false; DWORD ECount=ENUMCOUNT; DWORD ESize=ENUMBUFSIZE; DWORD Error_num; do{ Error_num=WNetEnumResource(hEnum,&ECount,buff,&ESize); if (ESize>ENUMBUFSIZE) return false; if (Error_num==NO_ERROR){ for (DWORD num=0;num pNetRes=&buff[num]; file://if(Node)Node->ImageIndex=1-Depth; UserName=AnsiString(pNetRes->lpRemoteName); while(UserName[1]=='\\') UserName=UserName.SubString(2,UserName.Length()-1); TTreeNode *tNode=Nodes->AddChild(Node,UserName); if(tNode) switch(pNetRes->dwType){ case RESOURCETYPE_ANY: switch(tNode->Level){ case 0:tNode->ImageIndex=1;break; case 1: case 2:tNode->ImageIndex=2;break; } break; case RESOURCETYPE_DISK:tNode->ImageIndex=3;break; case RESOURCETYPE_PRINT:tNode->ImageIndex=4;break; } if(pNetRes->dwDisplayType!=RESOURCEDISPLAYTYPE_SHARE){ if(!GetNetRes(Nodes,tNode,pNetRes,Depth-1)) reValue=false; } } } }while(ECount==ENUMCOUNT); if (Error_num!=ERROR_NO_MORE_ITEMS && Error_num!=NO_ERROR) reValue=false; WNetCloseEnum(hEnum); return reValue; } |
以下是多线程发送函数,是个线程
| void __fastcall NetMessageSend::Execute() { file://---- Place thread code here ---- const maxlen=1600; wchar_t *pMsgBuff; AnsiString retstr; long int retvalue,msglen,sendlen; msglen=FMessage.WideCharBufSize(); pMsgBuff=(wchar_t *)malloc(msglen*2 10); FMessage.WideChar(pMsgBuff,msglen); for(long int i=0;i else sendlen=msglen*2-i; retvalue=NetMessageBufferSend(NULL,FUserName,pFromName,(char *)pMsgBuff i,sendlen); } if(FGetRet){ switch(retvalue){ case NERR_Success: retstr="@_@ Sent OK!"; break; case ERROR_ACCESS_DENIED: retstr=":( Has no access"; break; case ERROR_INVALID_PARAMETER: retstr=":( Parameter error."; break; case ERROR_NOT_SUPPORTED: retstr=":( Network not supported."; break; case NERR_NameNotFound: retstr=":( Parameter is invalid."; break; case NERR_NetworkError: retstr=":( General failure network hardware."; break; default: retstr=":( Unknow error"; break; }
文章整理:西部数码--专业提供域名注册、虚拟主机服务 相关文章
热点关注
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源 网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧 行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒 网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它 服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护 软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer 网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash 程序设计 Java技术 C/C++ VB delphi 网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术 操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD |




