加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从Delphi调用SHGetSetSettings

发布时间:2020-12-15 03:51:45 所属栏目:大数据 来源:网络整理
导读:我刚读了 this question和 this question,从那以后我一直试图在Delphi中调用 SHGetSetSettings .这是shell32.dll的一个功能,但是在ShlObj.pas中没有定义,所以我们需要编写自己的定义. 首先,我们需要翻译 SHELLSTATE 结构.现在我只有有限的C经验,但我认为“:
我刚读了 this question和 this question,从那以后我一直试图在Delphi中调用 SHGetSetSettings.这是shell32.dll的一个功能,但是在ShlObj.pas中没有定义,所以我们需要编写自己的定义.

首先,我们需要翻译SHELLSTATE结构.现在我只有有限的C经验,但我认为“:1”意味着结构的成员是一个位,也就是说,它们中的八个可以在一个字节中打包在一起.我还假设DWORD = UINT = 32位无符号整数,LONG = int是32位有符号整数.但后来我们遇到了一个问题:整个结构将占用228位,即28.5字节,这是……相当不可能,至少在Delphi中,sizeof(SomeRecord)必须是一个整数.

不过,我试图通过在末尾添加四个虚拟位来解决它. 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.没有直接映射.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读