Ala*_*air 3 windows registry haskell
我正在尝试使用Haskell以版本无关的方式获取Window的Local AppData文件夹的位置,我在这方面遇到了一些麻烦.我已经尝试使用System.Win32.Registry库,我能够得到下面的代码(经过一些试验和错误),但我无法弄清楚如何使用regQueryValueEx
或任何其他函数来获取我需要的价值.
import System.Win32.Types
import System.Win32.Registry
userShellFolders :: IO HKEY
userShellFolders = regOpenKeyEx hKEY_CURRENT_USER "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\" kEY_QUERY_VALUE
Run Code Online (Sandbox Code Playgroud)
我也尝试getAppUserDataDirectory
在System.Directory模块中查看该函数的源代码,但这对我也没有帮助.
也许有一种更简单的方法可以做到这一点,我只是错过了.
rob*_*.14 11
如果您想要可移植性,则不应直接访问注册表.有一个API函数来获取特殊文件夹:SHGetFolderPath.你可以这样称呼它:
{-# LANGUAGE ForeignFunctionInterface #-}
import System.Win32.Types
import Graphics.Win32.GDI.Types
import Foreign.C.String
import Foreign.Marshal.Array
foreign import stdcall unsafe "SHGetFolderPathW"
cSHGetFolderPathW :: HWND -> INT -> HANDLE -> DWORD -> CWString -> IO LONG
maxPath = 260
cSIDL_LOCAL_APPDATA = 0x001c -- //see file ShlObj.h in MS Platform SDK for other CSIDL constants
getShellFolder :: INT -> IO String
getShellFolder csidl = allocaArray0 maxPath $ \path -> do
cSHGetFolderPathW nullHANDLE csidl nullHANDLE 0 path
peekCWString path
main = getShellFolder cSIDL_LOCAL_APPDATA >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1796 次 |
最近记录: |