線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4334
推到 Plurk!
推到 Facebook!

如何用程式指定路徑並連線網路磁碟機

答題得分者是:axsoft
Roach
中階會員


發表:61
回覆:104
積分:98
註冊:2002-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-25 19:17:48 IP:210.68.xxx.xxx 未訂閱
各位先進好 我有找到這一篇連結 http://delphi.ktop.com.tw/topic.php?topic_id=21954 不過 Delphi 我可是有看沒有懂 不曉得有沒有 BCB 的,還是有其他的方法 請前輩指點一下 謝謝 -------------- 試車總是問題多
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-26 10:25:57 IP:61.218.xxx.xxx 未訂閱
Roach您好:
試試看這是否是您想要的東西
資料來源: src="http://www.bytesandmore.de/rad/cpp/main/img/connectdrives.png">    DWORD ConnectNetworkDrive(AnsiString slNetPath, char clDrive,
bool blPermanent)
{
  char cPath[3] = { char(0), ':', char(0) };
  cPath[0] = toupper(clDrive);
  AnsiString slRemotePath = slNetPath;
  NETRESOURCE nr;
  ZeroMemory(&nr, sizeof(nr));
  nr.dwScope= RESOURCE_GLOBALNET;
  nr.dwType = RESOURCETYPE_DISK;
  nr.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
  nr.dwUsage=RESOURCEUSAGE_CONNECTABLE;
  nr.lpLocalName=cPath;
  nr.lpRemoteName=slRemotePath.c_str();
  nr.lpComment=NULL;
  nr.lpProvider=NULL;
  int ilResult = WNetAddConnection2(&nr, (LPSTR) NULL, (LPSTR) NULL,
  blPermanent ? CONNECT_UPDATE_PROFILE : 0);
  return ilResult;
}    DWORD DisconnectNetworkDrive(char clDrive, bool blPermanent)
{
  char cPath[3] = { char(0), ':', char(0) };
  cPath[0] = toupper(clDrive);
  return WNetCancelConnection2(cPath, blPermanent ?
   CONNECT_UPDATE_PROFILE : 0,TRUE);
}
範例下載:http://www.bytesandmore.de/rad/cpp/files/ConnectDrivesSrc.zip Demo Download: http://www.bytesandmore.de/rad/cpp/files/ConnectDrivesExe.zip
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2003/09/26 10:26:54
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-26 10:31:47 IP:61.218.xxx.xxx 未訂閱

網絡資源的列舉

  
操作系統:Windows 98(95)/2000(NT)
編程語言:Borland C   Builder 5.0
日期: 2001年9月27日
作者: 古老傳說 djie_hhz@sina.com
主頁: HTTP://www.wxiang.net     歡迎你對本文的轉載,轉載請註明作者和出處    針對於局域網的編程中常常需要我們得到局域網上一些相關信息,本文即是用編程實現共享資源的列舉    首先來看一下我們要用到的兩個相關API函數:    ◆DWORD WNetOpenEnum(    DWORD dwScope, // 指定列舉範圍 
DWORD dwType, // 列舉資源的類型
DWORD dwUsage, // 指定列舉資源的使用情況
LPNETRESOURCE lpNetResource, // 指向NETRESOURCE結構的指針,指定要列舉的資源
LPHANDLE lphEnum //指向列舉句柄,用在後面的WnetEnumResource中
);    參數dwScope可以是下列值之一或其組合:    RESOURCE_CONNECTED 所有當前連接著的資源(將忽略dwUsage參數)
RESOURCE_GLOBALNET 所有的網絡資源
RESOURCE_REMEMBERED 所有記住的(永久)連接(將忽略dwUsage參數)    參數dwType可以是下列值之一或其組合:    RESOURCETYPE_ANY 所有資源(不能與RESOURCETYPE_DISK和RESOURCE_PRINT組合)
RESOURCETYPE_DISK 僅所有磁盤資源
RESOURCETYPE_PRINT 僅所有打印資源    參數dwUsage可以是下列值之一或其組合:    0 所有資源
RESOURCEUSAGE_CONNECTABLE 所有可連接的資源
RESOURCEUSAGE_CONTAINER 所有包容器資源    參數lpNetResource指向NETRESOURCE結構,該結構指定了要列舉的包容器(container),如果此參數為NULL則表示列舉網絡的根(root)    函數調用正確的話, 返回值為NO_ERROR,否則返回下列錯誤代碼之一:    ERROR_NOT_CONTAINER 表示lpNetResource參數沒有指向包容器
ERROR_INVALID_PARAMETER dwScope或dwType參數無效或參數組合錯誤
ERROR_NO_NETWORK 沒有網絡存在    ◆DWORD WNetEnumResource(    HANDLE hEnum, // 列舉句柄
LPDWORD lpcCount, // 列舉資源最大個數 
LPVOID lpBuffer, // 指向接收列舉結果的緩衝區,填充的實際是NETRESOURCE結構數組的形式
LPDWORD lpBufferSize // 指向一個DWORD變量,該變量指出了lpBuffer的大小
);     這兩個函數中都用到了一個重要的結構NETRESOURCE,NETRESOURCE結構如下:    typedef struct _NETRESOURCEA {
DWORD dwScope;// 指定列舉範圍 
DWORD dwType;// 列舉資源的類型
DWORD dwDisplayType;//網絡對像展示給用戶的類型
DWORD dwUsage;// 指定列舉資源的使用情況
LPSTR lpLocalName;//本地設備名
LPSTR lpRemoteName;//遠程設備名
LPSTR lpComment ;
LPSTR lpProvider;//資源提供者的名字
}NETRESOURCE;
參數dwDisplayType可以是下列值之一:
RESOURCEDISPLAYTYPE_DOMAIN 顯示為一個DOMAIN
RESOURCEDISPLAYTYPE_GENERIC 
RESOURCEDISPLAYTYPE_SERVER 顯示為一個服務器
RESOURCEDISPLAYTYPE_SHARE 顯示為一個共享資源    關於WNetEnumResource的調用參數都很簡單,這裡就不再詳細指出了,下面我們用編程實現列舉所有網絡資源,並將其填充到一個TTreeView中    首先打開C  Builder創建一個新程序    然後在Unit1.cpp的首部寫入下面的函數:    bool __fastcall GetNetRes(TTreeNodes *Nodes,TTreeNode * Node, NETRESOURCE * pNetResource, int Depth)
{
//這是一個嵌套函數,其中Nodes為指定TListView實例的Items,Node為從指定節點擴展NULL為跟節點,pNetResource為列舉根,
//Depth為列//舉深度,填入一個小於0的數,則深度為無窮,直到列舉完畢
#define ENUMBUFSIZE (16*1024)
#define ENUMCOUNT 10
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;
char Buf[ENUMBUFSIZE];
DWORD ECount=ENUMCOUNT;
DWORD ESize=ENUMBUFSIZE;
DWORD EnumRst;
do{
EnumRst=WNetEnumResource(hEnum,&ECount,Buf,&ESize);
if (ESize>ENUMBUFSIZE) return false;
if (EnumRst==NO_ERROR){
for (DWORD num=0;num pNetRes=((NETRESOURCE*)(Buf sizeof(NETRESOURCE)*num));
TTreeNode *tNode=Nodes->AddChild(Node,AnsiString(pNetRes->lpRemoteName));
if (pNetRes->dwDisplayType!=RESOURCEDISPLAYTYPE_SHARE)
if(!GetNetRes(Nodes,tNode,pNetRes,Depth-1)) reValue=false;
}
}
}while(ECount==ENUMCOUNT);
if (EnumRst!=ERROR_NO_MORE_ITEMS&&EnumRst!=NO_ERROR) reValue=false;
WNetCloseEnum(hEnum);
return reValue;
}    然後在TForm1的FormCreate事件中,寫入代碼,如下:    void __fastcall TForm1::FormCreate(TObject *Sender)
{
Caption="列舉網絡資源實例";
TTreeView *TreeView1=new TTreeView(this);//創建一個TTreeView實例
TreeView1->Parent=this;
TreeView1->Left=10;
TreeView1->Top=10;
TreeView1->Width=ClientWidth-20;
TreeView1->Height=ClientHeight-20;
if (!GetNetRes(TreeView1->Items,NULL,NULL,-1))//調用GetNetRes函數,從網絡的根列舉,並將數據添加到TreeView1的根節點
ShowMessage("列舉中出現了錯誤,可能是由一些資源的訪問需要用戶名和密碼引起的!");
if (TreeView1->Items->Item[0]!=NULL)
TreeView1->Items->Item[0]->Expand(false); //展開
}    
/*生活是一種藝術,用心生活才能享受生活*/
Roach
中階會員


發表:61
回覆:104
積分:98
註冊:2002-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-26 10:38:25 IP:210.68.xxx.xxx 未訂閱
感謝 Axsoft 大哥    我有查過 SDK 只是有看沒有懂 第一個回應的範例我 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=11888066&CC=265874"> -------------- 試車總是問題多
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-26 13:49:30 IP:61.220.xxx.xxx 未訂閱
那請問一下,我現在不知道遠端那個的名字,但知道ip 可是我寫 nr.lpRemoteName="\\192.168.2.52"; 結果不行ㄝ
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-26 15:21:14 IP:192.72.xxx.xxx 未訂閱
要是出現錯誤代碼是67,53的,請到這裏看... http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/assigning_a_drive_to_a_share.asp 重點是szRemoteName[MAX_PATH] = "\\\\products2\\relsys"; 有沒有看到它用4個 \\\我們一般不是都用兩個嗎?要是沒看到這篇文章的話我看我還解不出來吧...
liang-shien
一般會員


發表:15
回覆:21
積分:7
註冊:2005-05-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-28 14:34:47 IP:61.230.xxx.xxx 未訂閱
我現在有個問題,就是當我新增一個網路磁碟後,usb隨身碟卻不能用了...後來把那個網路磁碟中斷後,usb就自己跑出來了 ...該不會是因為佔到它的槽的名稱吧..可是usb自己不會往後跳嗎,一定要那個槽的名稱嗎?
系統時間:2024-05-03 4:47:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!