全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1288
推到 Plurk!
推到 Facebook!

搜尋電腦

答題得分者是:HomeSound
johnny2212
初階會員


發表:34
回覆:65
積分:39
註冊:2003-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-25 18:25:45 IP:61.226.xxx.xxx 未訂閱
請問我要如何在Delphi中,像Windows中直接搜尋電腦是否存在,也就是被搜尋的電腦不必安裝類似Indy Server的應用程式,謝謝您的幫忙
HomeSound
中階會員


發表:44
回覆:178
積分:94
註冊:2002-08-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-25 22:05:26 IP:61.30.xxx.xxx 未訂閱
很笨的回答 用Ping可知電腦是否存在,引一下文章    1.怎麼搜索局網上的電腦?   2.怎樣使用一個電腦的IP位址獲得其網卡物理地址?      例如,我的電腦為A,局域網上的有另外一台電腦為B,怎樣在A上通過B的IP地址獲取B的網卡物理地址?      如何用C++Builder實現? 
//------------來自JiShiPing(JSP季世平)的代碼:---------------
#include 
#include 
//---------------------------------------------------------------------------  
__fastcall  TForm1::TForm1(TComponent*  Owner)  
               :  TForm(Owner)  
{  
}  
//---------------------------------------------------------------------------  
void  __fastcall  TForm1::FormCreate(TObject  *Sender)  
{  
   TStrings *netList=new  TStringList();
   TListItem *NewItem;
   ListView1->Items->Clear();
   Screen->Cursor=crHourGlass;
   EnumNetResource(netList,NULL,RESOURCE_GLOBALNET,RESOURCETYPE_ANY);
   for(int i=0;iCount;i  )
   {
     NewItem=ListView1->Items->Add();
     NewItem->Caption=netList->Strings[i];
     NewItem->SubItems->Add(gethostip(netList->Strings[i]));
   }
   Screen->Cursor=crDefault;
   delete netList; 
}  
//---------------------------------------------------------------------------  
bool __fastcall TForm1::EnumNetResource(TStrings *rcList,LPNETRESOURCE lpNR, DWORD dwScope,DWORD dwType)
{
   HANDLE hEnum = 0; //  resource-handle
   DWORD dwResult = WNetOpenEnum(
   dwScope,  //  scope  of  enumeration
   dwType,  //  resource  types  to  list
   0,  //  enumerate  all  resources
   lpNR,  //  pointer  to  resource  structure  (NULL  at  first  time)
   &hEnum  //  handle  to  resource
   );
   if(dwResult!=NO_ERROR) return false;
   bool bRet=true;
   DWORD dwEntries = 0xFFFFFFFF; //enumerate  all  possible  entries
   NETRESOURCE NR[1024];
   DWORD dwBuffer=1024*sizeof(NETRESOURCE);
   while(1)
   { dwResult = WNetEnumResource(hEnum,&dwEntries,(LPVOID)NR,&dwBuffer);
     if(dwResult==ERROR_NO_MORE_ITEMS) break;
     else if(dwResult!=NO_ERROR) {bRet=false; break;}
     for(DWORD i = 0;iAdd(p);
       }
       else if((NR[i].dwUsage&RESOURCEUSAGE_CONTAINER)==RESOURCEUSAGE_CONTAINER)
       { bRet=EnumNetResource(rcList,&NR[i],dwScope,dwType);
         if(bRet==false) break;
       }
     }
     if(bRet==false)  break;
   }
   WNetCloseEnum(hEnum);
   return bRet;
}
//------獲取某主機的IP地址,如果主機名為空,則返回本機的名和IP地址---------
//AnsiString  gethostip(AnsiString  &host)
AnsiString __fastcall TForm1::gethostip(AnsiString &host)
{ WSADATA wsaData;
  AnsiString IP;
  WSAStartup(MAKEWORD(2,0),&wsaData);
  if(host.IsEmpty())
   { char hostname[128];
     if(gethostname(hostname,128)!=0) return AnsiString("  ");
     host=hostname;
   }
   try
   { struct hostent *hp=gethostbyname(host.c_str());
     if(WSAGetLastError()==WSAHOST_NOT_FOUND)
     { IP="無法獲取";
       return IP;
     }
     else
       IP=inet_ntoa(*(struct in_addr*)hp->h_addr_list[0]);
   }
   catch(...)
   { IP="  ";
   }
   WSACleanup();
   return IP;
}
//---------------------------------------------------------------------------
--==多看.多學.多聽==--
------
--==多看.多學.多聽==--
系統時間:2024-03-28 21:42:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!