94104


PythonからWindowsの%APPDATA%のパスを取得しようとした場合、以下のコマンドで実行することが出来ます。

[code]

    import os
    os.getenv('APPDATA')
    
[/code]

ただし、これだと稀に正しいパスを取得できない環境があるのではないかと思う場面に遭遇したため、WindowsAPIを使用してパスの取得を試してみたいと考えています。

[Advanced Installerのドキュメント](https://www.advancedinstaller.com/msix-
introduction.html#install-location)に書かれている`Recommended API calls for
retrieving your AppData folder paths:`を参考に、次のコマンドを試してみましたが、取得できませんでした。

[code]

    from ctypes import *
    
    user32 = windll.user32
    AppDataPath = user32.Environment.GetFolderPath(user32.Environment.SpecialFolder.ApplicationData);
    print(AppDataPath)
    
[/code]

エラー内容は次の通りです。

[code]

    AttributeError: function 'Environment' not found
    
[/code]

PythonからWindowsAPIを呼び出し、%APPDATA%のパスを取得するにはどうすれば良いでしょうか。


CC BY-SA 4.0
2023-03-08T07:38:39.760
94102
2023-03-08T08:08:47.953
34471
question
python windows
PythonからWindowsAPIを呼び出して、%APPDATA%のパスを取得したい


WindowsAPIなら[SHGetFolderPath](https://learn.microsoft.com/ja-
jp/windows/win32/api/shlobj_core/nf-shlobj_core-
shgetfolderpatha?redirectedfrom=MSDN)で取得できます。  
なお、この場合`windll.user32`ではなく`win32com.shell`を利用します。

[code]

    from win32com.shell import shell, shellcon
    
    path = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, None, 0)
    print(path) # C:\Users\Hoge\AppData\Roaming
    
[/code]


CC BY-SA 4.0
2023-03-08T08:08:47.953
94104
2023-03-08T08:08:47.953
25830
94102
answer