tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルフォルダ共有のチェック
記事No14375
投稿日: 2010/01/15(Fri) 11:21
投稿者るしーる
フォルダが共有されているかをチェックしたいので
色々探したのですが、VB.NETで書いた物しかみつかりませんでした。

単にコピーして動かすとエラーするのですが、教えて頂けますでしょうか。
Dim gchPath As GCHandle
ユーザー定義型は定義されていません。


'共有チェック
Declare Function NetShareCheck Lib "netapi32.dll" _
(ByVal servername As String, _
ByVal device As Integer, _
ByVal dwtype As Integer) As Integer
Public Const STYPE_DISKTREE As Integer = 0
Public Const NERR_Success As Integer = 0


Sub MAIN()
Dim lngWin32apiResultCode As Integer
Dim strServerName As String
Dim strDevice As Integer
Dim lngType As Integer
Dim gchPath As GCHandle
' サーバー名を設定(空文字の場合はローカルコンピュータ)
strServerName = ""
' 選択されたデバイス名設定
gchPath = GCHandle.Alloc("C:\tmp", GCHandleType.Pinned)
strDevice = gchPath.AddrOfPinnedObject().ToInt32()

' デバイスが共有されているかどうかをチェック
lngWin32apiResultCode = NetShareCheck(vbNullString, strDevice, lngType)
' 共有のチェックに成功したときは
If lngWin32apiResultCode = NERR_Success Then
MsgBox ("共有されています。")
Else
MsgBox ("共有されていません。")
Call ShareDel
End If
End Sub

[ツリー表示へ]
タイトルRe: フォルダ共有のチェック
記事No14376
投稿日: 2010/01/15(Fri) 12:28
投稿者花ちゃん
> フォルダが共有されているかをチェックしたいので
> 色々探したのですが、VB.NETで書いた物しかみつかりませんでした。
>
> 単にコピーして動かすとエラーするのですが、教えて頂けますでしょうか。
> Dim gchPath As GCHandle
> ユーザー定義型は定義されていません。

中身については、知りませんが、VB.NET のコードであれば、まず、変数の型を変更して
みて下さい。(ご自分で出来る範囲はご自分でやるようにしましょう)

下記に掲載の逆をすればいいかと。
http://hanatyan.sakura.ne.jp/dotnet/vb6tonet.htm

Integer → Long や ByRef と ByVal 違い等にユーザー定義型を含めて変換してから、
エラーが出る個所や波線がでるところ等について解らなければ、質問されるように
して下さい。

又、API 関数名で検索すれば、VB6.0 のサンプルも見つかるはずですが。
http://www.google.co.jp/search?hl=ja&rlz=1I7RNWN_ja&q=VB6+NetShareCheck&btnG=%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=


上記から探すと
http://www.vbstation.net/sample/0215.htm
のようなサンプルが。


他人が作成されたコードを無断でコピー&ペーストで投稿されると問題になりますので
そのような場合は、参照先のリンクを貼るようにして下さい。
(元々は、有限会社 ガリバー さんが作ったサンプルのようですね、lngWin32apiResultCode
の 変数名の書き方からして、VB6.0 のコードをVB.NET 用に書き換えたもののようですね)

検索していたら、下記のような方法も(試してはいません)

共有 でない場合は、エラーが発生。(エラー処理で取得)
If Dir("\\コンピュータ名\共有フォルダ名\", vbDirectory) = "." Then
  '共有フォルダーです。
End if

[ツリー表示へ]
タイトルRe^2: フォルダ共有のチェック
記事No14433
投稿日: 2010/01/28(Thu) 09:55
投稿者るしーる
返信大変遅くなり失礼致しました。
結局
If Dir("\\コンピュータ名\共有フォルダ名\", vbDirectory) = "." Then
にて出来ましたので、シンプルなのでこれにしました。
また魔界の仮面弁士 さんの物もためしたところ、全ての共有フォルダが
表示され便利なので、使わせていただこうと思います。

[ツリー表示へ]
タイトル質問したなら、必ず返事を。
記事No14393
投稿日: 2010/01/19(Tue) 21:40
投稿者花ちゃん
質問したなら、たとえ、気に入らないレスであっても返事をするようにして下さい。

返事がなければ、解決されたものとしてこれ以上のレスもつきませんよ。

[ツリー表示へ]
タイトルRe: フォルダ共有のチェック
記事No14394
投稿日: 2010/01/19(Tue) 22:21
投稿者魔界の仮面弁士
> フォルダが共有されているかをチェックしたいので
> 色々探したのですが、VB.NETで書いた物しかみつかりませんでした。

これでどうでしょう。

Private Sub Command1_Click()
    Dim shareList As Object
    Set shareList = GetObject("winmgmts:").ExecQuery( _
        "SELECT * FROM Win32_Share WHERE Type=0")
    Dim share As Object
    For Each share In shareList
        Debug.Print share.Path, share.Name, share.Description, share.Status
    Next
End Sub

[ツリー表示へ]