ユーザープロファイルディレクトリの取得          <TOP>


ユーザープロファイルディレクトリを取得します。

GetAllUsersProfileDirectory 全ユーザー(All Users)プロファイルのルートのパスを取得

GetDefaultUserProfileDirectory 既定ユーザー(Default User)プロファイルのルートのパスを取得

GetProfilesDirectory ユーザープロファイルが格納されているルートディレクトリのパスを取得

GetUserProfileDirectory 現在ログインしているユーザのプロファイルディレクトリを取得

GetCurrentProcess 現在のプロセスに対応する疑似ハンドルを取得

OpenProcessToken アクセストークンをオープン

 

 

'================================================================
'= プロファイルディレクトリの取得
'=    (GetUserProfileDirectory.bas)
'================================================================
#include "Windows.bi"

#define TOKEN_QUERY &H8                 'アクセストークンをクエリする

' 全ユーザープロファイルのルートのパスを取得
Declare Function Api_GetAllUsersProfileDirectory& Lib "userenv" Alias "GetAllUsersProfileDirectoryA" (ByVal lpProfileDir$, lpcchSize&)

' 現在のプロセスの擬似ハンドルを取得
Declare Function Api_GetDefaultUserProfileDirectory& Lib "userenv" Alias "GetDefaultUserProfileDirectoryA" (ByVal lpProfileDir$, lpcchSize&)

' 全てのユーザープロフィールが蓄えられているルートディレクトリパスを取得
Declare Function Api_GetProfilesDirectory& Lib "userenv" Alias "GetProfilesDirectoryA" (ByVal lpProfileDir$, lpcchSize&)

' 全ユーザー(All Users)プロファイルのルートのパスを取得
Declare Function Api_GetUserProfileDirectory& Lib "userenv" Alias "GetUserProfileDirectoryA" (ByVal hToken&, ByVal lpProfileDir$, lpcchSize&)

' 現在のプロセスに対応する疑似ハンドルを取得
Declare Function Api_GetCurrentProcess& Lib "Kernel32" Alias "GetCurrentProcess" ()

' プロセスと結び付けられたアクセストークンを開く
Declare Function Api_OpenProcessToken& Lib "advapi32" Alias "OpenProcessToken" (ByVal ProcessHandle&, ByVal DesiredAccess&, TokenHandle&)

Var Shared List1 As Object
List1.Attach GetDlgItem("List1") : List1.SetFontSize 14

'================================================================
'=  
'================================================================
Declare Function StripTerminator(sInput As String) As String
Function StripTerminator(sInput As String) As String
    Var zPos As Long

    zPos = InStr(1, sInput, Chr$(0))
    If zPos > 0 Then
        StripTerminator = Left$(sInput, zPos - 1)
    Else
        StripTerminator = sInput
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var sBuffer As String
    Var Ret As Long
    Var hToken As Long

    List1.ResetContent

    '全ユーザー(All Users)プロファイルのルートのパスを取得
    sBuffer = String$(255, 0)
    Ret = Api_GetAllUsersProfileDirectory(sBuffer, 255)
    List1.AddString StripTerminator(sBuffer)

    '既定ユーザー(Default User)プロファイルのルートのパスを取得
    sBuffer = String$(255, 0)
    Ret = Api_GetDefaultUserProfileDirectory(sBuffer, 255)
    List1.AddString StripTerminator(sBuffer)

    'ユーザープロファイルが格納されているルートディレクトリのパスを取得
    sBuffer = String$(255, 0)
    Ret = Api_GetProfilesDirectory(sBuffer, 255)
    List1.AddString StripTerminator(sBuffer)

    '指定したユーザーのプロファイルのルートディレクトリのパスを取得
    sBuffer = String$(255, 0)
    Ret = Api_OpenProcessToken((Api_GetCurrentProcess), TOKEN_QUERY, hToken)

    '現在ログインしているユーザのプロファイルディレクトリを取得
    Ret = Api_GetUserProfileDirectory(hToken, sBuffer, 255)
    List1.AddString StripTerminator(sBuffer)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End