I just read this question and this question , and since then I tried to call SHGetSetSettingsDelphi. This is a function shell32.dll, but not defined in ShlObj.pas, so we need to write our own definition.
First we need to translate the structure SHELLSTATE. Now I have only limited experience in C, but I believe that ": 1" means that the member of the structure is one bit, that is, eight of them can be packed together in bytes. I also assume that DWORD= UINT= 32-bit unsigned integers and that LONG= intare 32-bit integers. But then we have a problem: the whole structure will then take 228 bits, or 28.5 bytes, which ... is quite impossible, at least in Delphi, where it sizeof(SomeRecord)should be an integer.
However, I tried to solve this problem by adding four dummy bits at the end. 232 bits = 29 bytes, which is nice.
Therefore, I tried
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;
and then I announced (for later convenience)
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;
Now I felt ready to spot
interface
procedure SHGetSetSettings(var ShellState: TShellState; Mask: cardinal; DoSet: boolean); stdcall;
implementation
procedure SHGetSetSettings; external shell32 name 'SHGetSetSettings';
, - . , : SSF. , SSF_HIDEICONS = 0x00004000 = 16384 ≠ fHideIcons = 4096. SSF_ , SHELLSTATE, SSF_HIDEICONS 2 ^ 14, 13- ( 2 ^ 12) . , , MSDN .
- ?