Page 175 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼パス名取得 たけ 02/10/3(木) 14:54 ┣Re:パス名取得 ichinose 02/10/3(木) 16:51 ┃ ┗Re:パス名取得 たけ 02/10/4(金) 11:37 ┃ ┣Re:パス名取得 yu-ji 02/10/4(金) 13:41 ┃ ┃ ┗Re:パス名取得 たけ 02/10/4(金) 15:28 ┃ ┗Re:パス名取得 ichinose 02/10/8(火) 2:54 ┗Re:パス名取得 yu-ji 02/10/3(木) 16:54 ─────────────────────────────────────── ■題名 : パス名取得 ■名前 : たけ ■日付 : 02/10/3(木) 14:54 -------------------------------------------------------------------------
いつもおせわになっております。 今回は、パス名の取得について伺いたいのですが、 "Temporary Internet Files"の絶対パスの取得方法が どうしても分からないのですが、ご教授願えないでしょうか。 宜しくお願い致します。 環境は、 Windows2000 Excel2000 IE5.5です。 |
▼たけ さん: こんにちは。 >いつもおせわになっております。 > >今回は、パス名の取得について伺いたいのですが、 >"Temporary Internet Files"の絶対パスの取得方法が >どうしても分からないのですが、ご教授願えないでしょうか。 >宜しくお願い致します。 > >環境は、 >Windows2000 >Excel2000 >IE5.5です。 FileSystemObject オブジェクトを使用してはいかがでしょうか? 事前バインディングの例ですが、 '====================================================== Dim myfso As New FileSystemObject Sub test() MsgBox myfso.GetAbsolutePathName("Temporary Internet Files") End Sub 尚、上の例では、参照設定で「Microsoft Scripting Runtime」にチェックが必要です。 |
▼ichinose さん:yu-ji さん: ご返事ありがとうございます。 >FileSystemObject オブジェクトを使用してはいかがでしょうか? >事前バインディングの例ですが、 >'====================================================== >Dim myfso As New FileSystemObject >Sub test() > MsgBox myfso.GetAbsolutePathName("Temporary Internet Files") >End Sub > >尚、上の例では、参照設定で「Microsoft Scripting Runtime」にチェックが必要です。 ichinoseさんの方法でやってみたのですが、以下のように C:\Documents and Settings\User\MyDocument\Temporary Internet Filesと表示されます。 僕のPCでは「Temporary Internet Files」は C:\Documents and Settings\User\Local Settings\Temporary Internet Files にあり,パス名があいません。 ちなみにExcelファイルはMyDocument以下のフォルダにあります。 すいませんが、またご教授願います。 |
すみません、自分のやり方では全然ダメですね(^^; えと、API使ってレジストリの値を参照する方法を見つけたので、 そいつを利用してIEのレジストリからパスを取得する方法を記述します。 *********************** 'レジストリのハンドルを解放する Public Declare Function RegCloseKey Lib "ADVAPI32" (ByVal hKey&) As Long 'レジストリのキーを開ける(ハンドルの確保) Public Declare Function RegOpenKeyEx Lib "ADVAPI32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&) As Long 'レジストリの値を取得する Public Declare Function RegQueryValueExstr Lib "ADVAPI32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&) As Long Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const ERROR_SUCCESS = 0& Sub test() Dim FName As String Dim Length As Long Dim Name As String RootKey = HKEY_CURRENT_USER SubKey = "SoftWare\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" Ret = RegOpenKeyEx(RootKey, SubKey, 0, 1, Hensu) Name = "Cache" FName = String(250, Chr(0)) Length = Len(FName) Ret = RegQueryValueExstr(Hensu, Name, 0, 0, FName, Length) MsgBox FName Call RegCloseKey(Hensu) End Sub |
▼yu-ji さん: こんにちは。 > >'レジストリのハンドルを解放する >Public Declare Function RegCloseKey Lib "ADVAPI32" (ByVal hKey&) As Long >'レジストリのキーを開ける(ハンドルの確保) >Public Declare Function RegOpenKeyEx Lib "ADVAPI32" Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal ulOptions&, ByVal samDesired&, phkResult&) As Long >'レジストリの値を取得する >Public Declare Function RegQueryValueExstr Lib "ADVAPI32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&) As Long > >Public Const HKEY_CLASSES_ROOT = &H80000000 >Public Const HKEY_CURRENT_USER = &H80000001 >Public Const HKEY_CURRENT_CONFIG = &H80000005 >Public Const HKEY_DYN_DATA = &H80000006 >Public Const HKEY_LOCAL_MACHINE = &H80000002 >Public Const HKEY_USERS = &H80000003 >Public Const ERROR_SUCCESS = 0& > >Sub test() > > Dim FName As String > Dim Length As Long > Dim Name As String > > RootKey = HKEY_CURRENT_USER > SubKey = "SoftWare\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" > > Ret = RegOpenKeyEx(RootKey, SubKey, 0, 1, Hensu) > Name = "Cache" > FName = String(250, Chr(0)) > Length = Len(FName) > Ret = RegQueryValueExstr(Hensu, Name, 0, 0, FName, Length) > > MsgBox FName > > Call RegCloseKey(Hensu) > >End Sub どうもありがとうございました。 おかげできちんと取得できました。 また、宜しくお願い致します。 |
▼たけ さん: こんばんは。 投稿が遅れてすみませんでした。 既にyu-ji さんの回答で解決しているようですが・・・。 >>'====================================================== >>Dim myfso As New FileSystemObject >>Sub test() >> MsgBox myfso.GetAbsolutePathName("Temporary Internet Files") >>End Sub こんな簡単には、Fsoではいきませんでした(表示が速すぎたときに気が付くべきでした)。私は、APIは知らないので、再帰ロジックにしてみました。 '==================================================== Dim fso As New FileSystemObject '==================================================== Sub test() s_fldnm$ = "Temporary Internet Files" MsgBox search_folder(s_fldnm$) End Sub '==================================================== Function search_folder(foldnm As String) As String Dim drv As Drive Dim flds As Folders Dim fold As Folder Dim s_path As String If foldnm <> "" Then svfoldnm = foldnm End If For Each drv In fso.Drives If drv.DriveType = 2 Then Set flds = drv.RootFolder.SubFolders If s_fold(flds, s_path, foldnm) = True Then search_folder = s_path Exit For End If End If Next End Function '======================================================================== Function s_fold(flds As Folders, s_path As String, s_fldnm As String) As Boolean On Error Resume Next Dim fold As Folder Dim foldss As Folders s_fold = False For Each fold In flds If fold.Name = s_fldnm Then s_path = fold.Path s_fold = True Exit For End If Set foldss = fold.SubFolders If Err.Number <> 0 Then Err.Clear End If If s_fold(foldss, s_path, s_fldnm) = True Then s_fold = True s_path = s_path Exit For End If Next On Error GoTo 0 End Function もし、このレスを御覧になるときがありましたら、確認してみて下さい。 |
▼たけ さん: >今回は、パス名の取得について伺いたいのですが、 >"Temporary Internet Files"の絶対パスの取得方法が >どうしても分からないのですが、ご教授願えないでしょうか。 >宜しくお願い致します。 Environ("windir")で、Windowsのパスが分かるので、 Environ("windir") & "\Temporary Internet Files\" でパスの取得ができると思います。 |