How to check if Active Desktop is enabled (Views: 27)
Problem/Question/Abstract: How to check if Active Desktop is enabled Answer: uses ComObj, ShlObj, ActiveX; {Check if Active Desktop is enabled - Option 1} function IsActiveDeskTopOn: Boolean; var h: HWND; begin h := FindWindow('Progman', nil); h := FindWindowEx(h, 0, 'SHELLDLL_DefView', nil); h := FindWindowEx(h, 0, 'Internet Explorer_Server', nil); Result := h <> 0; end; {Check if Active Desktop is enabled - Option 2} function IsActiveDesktopEnable: Boolean; const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}'; var ActiveDesk: IActiveDesktop; ComponentsOpt: TComponentsOpt; hr: HRESULT; dwReserved: DWORD; begin ZeroMemory(@ComponentsOpt, SizeOf(TComponentsOpt)); ComponentsOpt.dwSize := SizeOf(TComponentsOpt); hr := CoCreateInstance(CLSID_ActiveDesktop, nil, CLSCTX_INPROC_SERVER, CLSID_ActiveDesktop, ActiveDesk); if SUCCEEDED(hr) then begin hr := ActiveDesk.GetDesktopItemOptions(ComponentsOpt, dwReserved); {ActiveDesk._Release;} end; Result := ComponentsOpt.fActiveDesktop; end; And here is how to activate the Active Desktop: procedure TForm1.Button1Click(Sender: TObject); const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}'; var ActiveDesk: IActiveDesktop; ComponentsOpt: TComponentsOpt; begin ActiveDesk := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop; with ActiveDesk do begin ComponentsOpt.dwSize := SizeOf(ComponentsOpt); GetDesktopItemOptions(ComponentsOpt, 0); ComponentsOpt.fActiveDesktop := True; SetDesktopItemOptions(ComponentsOpt, 0); ApplyChanges(AD_APPLY_ALL); end; end; |