从Delphi调用SHGetSetSettings
我刚读了
this question和
this question,从那以后我一直试图在Delphi中调用
SHGetSetSettings .这是shell32.dll的一个功能,但是在ShlObj.pas中没有定义,所以我们需要编写自己的定义.
首先,我们需要翻译 不过,我试图通过在末尾添加四个虚拟位来解决它. 232位= 29字节,这很好. 因此我试过了 PShellState = ^TShellState; TShellState = packed record Data1: cardinal; Data2: cardinal; Data3: cardinal; Data4: cardinal; Data5: cardinal; Data6: cardinal; Data7: cardinal; Data8: byte; // Actually a nibble would be sufficient end; 然后我宣布(为了以后的方便) const fShowAllObjects = 1; fShowExtensions = 2; fNoConfirmRecycle = 4; fShowSysFiles = 8; fShowCompColor = 16; fDoubleClickInWebView = 32; fDesktopHTML = 64; fWin95Classic = 128; fDontPrettyPath = 256; fShowAttribCol = 512; fMapNetDrvButton = 1024; fShowInfoTip = 2048; fHideIcons = 4096; fWebView = 8192; fFilter = 16384; fShowSuperHidden = 32768; fNoNetCrawling = 65536; 现在我觉得我已经准备好了 interface procedure SHGetSetSettings(var ShellState: TShellState; Mask: cardinal; DoSet: boolean); stdcall; implementation procedure SHGetSetSettings; external shell32 name 'SHGetSetSettings'; 但在我尝试代码之前,我发现了一些非常奇怪的东西.我发现我声明的常量已在此处声明:SSF Constants.请注意,SSF_HIDEICONS = 0x00004000 = 16384≠fHideIcons = 4096.如果SSF_常量确实是与SHELLSTATE一起使用的掩码,那么将SSF_HIDEICONS定义为2 ^ 14是没有意义的当它是结构中的第13位(并且其掩模应该是2 ^ 12)时.因此,似乎两个MSDN参考页面相互矛盾. 有人可以为这一切带来一些清晰度吗? 解决方法
我在这里阅读的帮助是在检索数据时为掩码指定了SSF_常量.他们没有理由必须映射到ShellState结构中的位.
如果他们确实fShowSysFiles会映射到8(0x04),我们从帮助中知道SSF_SHOWSYSFILES是0x20.没有直接映射. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |