Article View: fj.lang.visualbasic
Article #372Re: [Q]: リモート名を所得する方法
From: Sato Masahiro
Date: Mon, 23 Mar 1998 00:00
Date: Mon, 23 Mar 1998 00:00
99 lines
4000 bytes
4000 bytes
#fj.lang.visualbasic と fj.os.ms-windows.programming にクロスポストします。 In article <6f022j$jeq$1@nn-tk002.ocn.ad.jp>, Kazuo Yamamoto wrote: >APIはわかったのですが >Declare Function WNetGetUniversalName Lib "mpr" Alias (中略) >Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" _ (中略) >の使い方が資料が足りなくてわかりません。 >どなたかわかる方いませんか とのことですが、やはり API 関数を使用する際には、何らかの資料を そろえる方が確実かと思います。 使い方についてですが、簡単に述べるとすると、以下のように なるでしょう。 まず、WNetGetUniversalName 関数の第三引数は、以下のユーザ定義型の 情報を受け取ります。 Type UNIVERSAL_NAME_INFO lpUniversalName As Long buf(100) As Byte End Type ここで、 Dim uni As UNIVERSAL_NAME_INFO Dim BufSize As Long BufSize = 100 という様に変数を用意して、 WNetGetUniversalName "x:\hogehoge", UNIVERSAL_NAME_INFO_LEVEL, uni, BufSize とすることによって、求める UNC 名(「ネットワークドライブ名」の ことです)の情報を取得できます。UNC 名は、uni.buf に格納され、格納位置の アドレスは uni.lpUniversalName に格納されます。 そこで、Win32 API の lstrcpy 関数を利用して、Visual Basic の文字列変数に 結果を複製します。 Dim RemoteName As String * 100 lstrcpy RemoteName, lpUniversalName ただし、lstrcpy の Declare 宣言中で、第二引数を Byval lpszSrc As Long と します。 以上によって、変数 RemoteName に、求める UNC 名を取得できました。 WNetEnumResource 関数の使用法も同様の手順に従います。まず、 WNetOpenEnum 関数によって列挙ハンドルをオープンします。 WNetOpenEnum RESOURCE_REMEMBERD, RESOURCETYPE_DISK, _ RESOURCEUSAGE_CONNECTABLE, vbNullString, hEnum あとは、例えば ERROR_NO_MORE_ITEMS が返されるまで WNetEnumResource 関数を 繰り返し実行することにより、記憶されている接続のローカル名と UNC 名を 次々と取得できます。 Entries = 1 BufSize = 1000 r = WNetEnumResource(hEnum, Entries, nr, BufSize) ここで、変数 nr は以下のユーザ定義型の変数です。 Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As Long lpRemoteName As Long lpComment As Long lpProvider As Long buf(1000) as Byte End Type WNetGetUniversalName の時と同様に、lpLocalName と lpRemoteName にそれぞれ ローカル名と UNC 名の格納位置のアドレスが代入されます。 あとは、調べるローカル名と、列挙された nr.lpLocalName を比較して、 一致した時の nr.lpRemoteName が、求める UNC 名です。 If lstrcmp(LocalName, nr.lpLocalName) = 0 Then lstrcpy RemoteName, nr.lpRemoteName MsgBox RemoteName End If ただし、上記で、lstrcmp は、lstrcpy と同様に第二引数を値渡しの Long 型に します。 なお、現在 Visual Basic を動かすことのできる環境にないため、 記述したコードが正しく動くかどうか、確認していませんのでご注意ください。 -- Computer Institute of Japan, Ltd. 佐藤正宏 masahiro@cij.co.jp
Technical Details
Message-ID:
<6f55ua$o1u$1@hawaii.ykhm.cij.co.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<6eqdet$hcb$1@nn-tk002.ocn.ad.jp> <6esjel$mnp$1@hawaii.ykhm.cij.co.jp> <6f022j$jeq$1@nn-tk002.ocn.ad.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 110a07,2b64c157a6ebfaef,start X-Google-Attributes: gid110a07,public X-Google-Thread: 105c2e,ac9e02ac2a64e0dd X-Google-Attributes: gid105c2e,public From: masahiro@cij.co.jp (Sato Masahiro) Subject: Re: [Q]: リモート名を所得する方法 Date: 1998/03/23 Message-ID: <6f55ua$o1u$1@hawaii.ykhm.cij.co.jp> X-Deja-AN: 336772995 References: <6eqdet$hcb$1@nn-tk002.ocn.ad.jp> <6esjel$mnp$1@hawaii.ykhm.cij.co.jp> <6f022j$jeq$1@nn-tk002.ocn.ad.jp> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP Organization: Computer Institute of Japan, Ltd. Newsgroups: fj.lang.visualbasic,fj.os.ms-windows.programming