raca Posted April 17, 2006 Share Posted April 17, 2006 (edited) I want do call to SHGetSettings and it need a pointer to a struct SHELLSTATE typedef struct { BOOL fShowAllObjects:1; BOOL fShowExtensions:1; BOOL fNoConfirmRecycle:1; BOOL fShowSysFiles:1; BOOL fShowCompColor:1; BOOL fDoubleClickInWebView:1; BOOL fDesktopHTML:1; BOOL fWin95Classic:1; BOOL fDontPrettyPath:1; BOOL fShowAttribCol:1; BOOL fMapNetDrvBtn:1; BOOL fShowInfoTip:1; BOOL fHideIcons:1; UINT fRestFlags:3; } SHELLFLAGSTATE, *LPSHELLFLAGSTATE; the struct has 45bits... i can't create it with DllStructCreate or there is away around that i don't know? Edited April 17, 2006 by raca Link to comment Share on other sites More sharing options...
GaryFrost Posted April 17, 2006 Share Posted April 17, 2006 $struct = DllStructCreate("int;int;int;int;int;int;int;int;int;int;int;int;int;uint") SciTE for AutoItDirections for Submitting Standard UDFs Don't argue with an idiot; people watching may not be able to tell the difference. Link to comment Share on other sites More sharing options...
raca Posted April 17, 2006 Author Share Posted April 17, 2006 thanks a lot this what i have done, a script do disable activedesktop on winxp $shellstate=DllStructCreate("int[13];uint") ;$enable=0x40 DllStructSetData ($shellstate,1,0) $SSF_DESKTOPHTML=0x00000200 DllCall("shell32.dll","none","SHGetSetSettings","ptr",DllStructGetPtr($shellstate),"int",$SSF_DESKTOPHTML,"int",TRUE); ControlSend("Program Manager","",1,"{F5}") it gave me a loooot of work.... to make it work on 4 lines lol cheers Link to comment Share on other sites More sharing options...
Valik Posted April 18, 2006 Share Posted April 18, 2006 Actually, you're all wrong. The structure as defined is 16 bits, however, C++'s sizeof operator says it's 4 bytes (32 bits). All the BOOL values are stored in a single bit each. The unsigned integer is stored in 3 bits. This makes a total of 16 bits. You can safely store that structure in a single int. However, you have to use BitAnd() to check each of the fields since each field is a single bit. This is called (oddly enough) a bit-field. You don't need DllStruct for this at all, in fact. Use the basic int type of DllCall() and the BitAnd/BitOR functions to retrieve/set the fields. However, I don't know which 16 bits are used (the upper or lower). I also don't know why the length is padded to 32-bits when only 16 are needed. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now