我知道如何调用,但这个函数中给出的数据结构给我带来的麻烦比我自己解决的还要多
函数名为 SLGetWindowsInformation,存在于 slc.dll 中
HRESULT WINAPI SLGetWindowsInformation(
_In_ PCWSTR pwszValueName,
_Out_opt_ SLDATATYPE *peDataType,
_Out_ UINT *pcbValue,
_Out_ PBYTE *ppbValue
);
完整引用here
提前致谢,祝你有美好的一天
最佳答案
像这样:
enum SLDATATYPE
{
SL_DATA_NONE = REG_NONE,
SL_DATA_SZ = REG_SZ,
SL_DATA_DWORD = REG_DWORD,
SL_DATA_BINARY = REG_BINARY,
SL_DATA_MULTI_SZ = REG_MULTI_SZ,
SL_DATA_SUM = 100
};
// you can look up the values of the REG_XXX constants from the windows header files
[DllImport("Slc.dll", CharSet = CharSet.Unicode)]
static extern uint SLGetWindowsInformation(
string ValueName,
out SLDATATYPE DataType,
out uint cbValue,
out IntPtr Value
);
像这样调用函数:
SLDATATYPE DataType;
uint cbValue;
IntPtr ValuePtr;
uint res = SLGetWindowsInformation(ValueName, out DataType, out cbValue, out ValuePtr);
// check that res indicates success before proceeding
byte[] Value = new byte[cbValue];
Marshal.Copy(ValuePtr, Value, 0, Value.Length);
Marshal.FreeHGlobal(ValuePtr);
请注意,它可能看起来有点困惑,但 Marshal.FreeHGlobal
实际上调用了 LocalFree
,因此是释放此缓冲区的正确方法。
关于c# - 如何从 C# 调用 SLGetWindowsInformation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31180457/