Windows 10 PRO에서 진행하였습니다.
ctypes에 windll로 해결하면 됩니다.
import os
import ctypes
import winreg
def get_desktop_path():
"""Windows 특수 폴더 API를 사용하여 바탕화면 경로 가져오기"""
try:
# Windows 특수 폴더 API 사용
CSIDL_DESKTOP = 0x0000
SHGFP_TYPE_CURRENT = 0
shell32 = ctypes.windll.shell32
buffer = ctypes.create_unicode_buffer(260)
if shell32.SHGetFolderPathW(None, CSIDL_DESKTOP, None, SHGFP_TYPE_CURRENT, buffer) == 0:
return buffer.value
else:
# 실패 시 레지스트리에서 확인
with winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") as key:
desktop_path = winreg.QueryValueEx(key, "Desktop")[0]
return desktop_path
except:
# 최후의 수단으로 USERPROFILE 사용
# userprofile = os.environ.get('USERPROFILE', 'C:\\Users\\USER')
return os.path.join(os.path.expanduser('~'), "Desktop")
만약 windll도 안될시 winreg의 레지스트리 읽어서 가져오면 됩니다.