松尾です。 r9405で、デスクトップのパスを得るために SHGetSpecialFolderPathW() を使用していました。 これで良かったっけ?と調べだすと、 いろいろなAPIがあって混乱したので調べました。 デスクトップなどのパスを特殊ディレクトリと呼ぶようです。 今のところ、 戻り値が wchar_t(PWSTR) の SHGetKnownFolderPath() か 戻り値が PIDLIST の SHGetKnownFolderIDList() の どちらかを使うのがよさそうです。 Tera Term 内では文字列で扱うことがほとんどなので SHGetKnownFolderPath() になるでしょうか。 ということで、たいていのWindowsで動作する _SHGetKnownFolderPath() を作って compat_win に追加して SHGetSpecialFolderLocation() などを置き換えました。 # 特殊ディレクトリを取得するWindowsのAPI一覧 先(上)に出てくるほうが新しいAPIです。 - SHGetKnownFolderPath() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath - 引数 - KNOWNFOLDERID - 戻り値 - PWSTR - Shell32.dll - version 6.0.6000 or later - Vista 以降 - SHGetKnownFolderIDList() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderidlist - 引数 - KNOWNFOLDERID - 戻り値 - PIDLIST - Shell32.dll - version 6.0.6000 or later - Vista 以降 - SHGetFolderPathA() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetfolderpatha - 引数 - CSILD - 戻り値 - LPSTR - SHGetFolderPathW() あり - Shell32.dll - version 5.0 or later - Windows 2000, Me - 注 - vista から SHGetKnownFolderPath() へのラッパになった - SHGetKnownFolderPath() へ切り替えろと、のこと - SHGetFolderLocation() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetfolderlocation - 引数 - CSILD - 戻り値 - PIDLIST - Shell32.dll - version 5.0 or later - Windows 2000 - 注 - vista から SHGetKnownFolderIDList() へのラッパになった - SHGetKnownFolderIDList() へ切り替えろ、とのこと - SHGetSpecialFolderPathA() - https://docs.microsoft.com/ja-jp/windows/win32/api/shlobj_core/nf-shlobj_core-shgetspecialfolderpatha - 引数 - CSILD - 戻り値 - LPSTR - SHGetSpecialFolderPathW() あり - Shell32.dll - version 4.71 or later - Windows 95 + IE4でok (NT4も?) - Windows 98 はokそう - 注 - SHGetFolderPath() を使用しろ、のこと - SHGetSpecialFolderLocation() - https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetspecialfolderlocation - 引数 - CSILD - 戻り値 - PIDLIST - Shell32.dll - version 4.0 or later - NT 4.0, 95 - 将来なくなるから SHGetFolderLocation() 使えとのこと - いまのところ Windows 10 の 32,64bitどちらで使用できている # shell32.dll のバージョン どのAPIが利用可能かはshell32.dllのバージョンに依存するようです。 https://docs.microsoft.com/ja-jp/windows/win32/shell/versions の表を元に加筆修正 Version OS(+IE) 4.0 Windows 95,NT 4.0 4.71 Windows 95,NT 4.0 + Microsoft Internet Explorer 4.0 4.72 Windows 98 / 95,NT 4.0 + Internet Explorer 4.01 5.0 Windows 2000,Me 6.0 Windows XP 6.0.1 Windows Vista 6.1 Windows 7