あるサーバのフォルダを共通にし、あるシステムよりそこにファイルを書き込み
に行きたいのですが、一度「ネットワークパスワードの入力」にてログイン?
すれば問題なくシステムからファイルが作成されるのですが、一度もログイン
していない状態では、ファイルオープンにてエラーが発生します。
そこで、「ネットワークパスワードの入力」をシステムから最初の一回のみ
でもいいので出したいのですが、出し方のアドバイス等のご教授お願いします。
この辺を参考にしてみてはいかがでしょう。
ttp://www.galliver.co.jp/writing/vbm_tokushu/api9031/
同じ問題につきあたっていました。参考書に下記のTipがありました。
(秀和システム「VisualBasic逆引き大全500の極意」)
私はこれで解決しました。
' API宣言
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
(lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
(ByVal pidList As Long, _
ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32.dll" Alias "lstrcatA" _
(ByVal lpString1 As String, _
ByVal lpString2 As String) As Long
' 構造体宣言
Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long ' 表示する範囲を指定
pszDisplayName As Long
lpszTitle As Long ' ダイアログボックスのタイトル
ulFlags As Long ' 選択可能範囲を指定
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
' 定数宣言
Private Const BIF_RETURNONLYFSDIRS = 1 ' 共有フォルダのみ選択可能
Private Const CSIDL_NETWORK = &H12 ' ネットワークのみ閲覧可能にする
Private Const MAX_PATH = 260
Private Sub Command1_Click()
Dim lngpidList As Long
Dim lngRes As Long
Dim strBuffer As String
Dim tBrowseInfo As BrowseInfo
Dim strNetPath As String
With tBrowseInfo
.hWndOwner = Me.hWnd
.pIDLRoot = CSIDL_NETWORK
.lpszTitle = lstrcat("ネットワークの参照", "")
.ulFlags = BIF_RETURNONLYFSDIRS
End With
lngpidList = SHBrowseForFolder(tBrowseInfo)
If (lngpidList) Then
strBuffer = Space$(MAX_PATH)
lngRes = SHGetPathFromIDList(lngpidList, strBuffer)
If (lngRes) Then
strNetPath = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
MsgBox strNetPath
Else
MsgBox "パス取得に失敗しました。"
End If
Else
MsgBox "表示に失敗しました"
End If
End Sub
礼が遅くなり申し訳ありません。
Maxさんの方を参考に使わせてもらいました。
Maxさん、junchanさん、教えていただいてありがとうございました