過去ログ

                                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です。
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : ichinose  ■日付 : 02/10/3(木) 16:51  -------------------------------------------------------------------------
   ▼たけ さん:
こんにちは。
>いつもおせわになっております。
>
>今回は、パス名の取得について伺いたいのですが、
>"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」にチェックが必要です。
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : たけ  ■日付 : 02/10/4(金) 11:37  -------------------------------------------------------------------------
   ▼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以下のフォルダにあります。

すいませんが、またご教授願います。
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : yu-ji  ■日付 : 02/10/4(金) 13:41  -------------------------------------------------------------------------
   すみません、自分のやり方では全然ダメですね(^^;

えと、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
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : たけ  ■日付 : 02/10/4(金) 15:28  -------------------------------------------------------------------------
   ▼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

どうもありがとうございました。
おかげできちんと取得できました。
また、宜しくお願い致します。
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : ichinose  ■日付 : 02/10/8(火) 2:54  -------------------------------------------------------------------------
   ▼たけ さん:
こんばんは。
投稿が遅れてすみませんでした。
既に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

もし、このレスを御覧になるときがありましたら、確認してみて下さい。
 ───────────────────────────────────────  ■題名 : Re:パス名取得  ■名前 : yu-ji  ■日付 : 02/10/3(木) 16:54  -------------------------------------------------------------------------
   ▼たけ さん:
>今回は、パス名の取得について伺いたいのですが、
>"Temporary Internet Files"の絶対パスの取得方法が
>どうしても分からないのですが、ご教授願えないでしょうか。
>宜しくお願い致します。

Environ("windir")で、Windowsのパスが分かるので、
Environ("windir") & "\Temporary Internet Files\"

でパスの取得ができると思います。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 175