2009. március 31., kedd

How to check if Active Desktop is enabled


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;

Nincsenek megjegyzések:

Megjegyzés küldése