Re: IActiveDesktop
<tariquez@gmail.com> wrote:
1. If i define comp.wszFriendlyName, it fails on
ppAD->ApplyChanges(AD_APPLY_ALL) with E_FAIL.
2. 1. If i define comp.wszSubscribedURL, it fails on
ppAD->ApplyChanges(AD_APPLY_ALL) with E_FAIL.
Frankly, I don't know why this happens. See my example
bellow.
3. Is comp.wszSubscribedURL necessary? What does it do?
I'm not 100% sure, but I think that if desktop item is
dynamic and requires periodic updates from web service or
whatever, then comp.wszSubscribedURL should be supplied with
appropriate URL. I never used this feature.
4. comp.dwCurItemState and comp.csiOriginal.dwItemState ..
what are
they required for?
They required because you need to describe state of desktop
item. See documentation for COMPONENT for possible values.
5. If I disable the code for assigning
comp.wszFriendlyName and
comp.wszSubscribedURL, they compile and execute and the
url is added to
the list, but the page doesnt get displayed in the
desktop: was
wondering where i am going wrong with this.
Here's the code that I tested. It works without any problem
under WinXP SP2. Desktop item is added, it has default size,
it's visible and resizable.
<code>
#include <windows.h>
#include <wininet.h>
#include <ShlGuid.h>
#include <ShlObj.h>
#include <tchar.h>
#include <comdef.h>
_COM_SMARTPTR_TYPEDEF(IActiveDesktop, IID_IActiveDesktop);
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
::CoInitialize(NULL);
IActiveDesktopPtr ptrAD(CLSID_ActiveDesktop);
COMPONENT comp = { 0 };
comp.dwSize = sizeof(COMPONENT);
comp.iComponentType = COMP_TYPE_WEBSITE;
comp.fChecked = TRUE;
comp.dwCurItemState = IS_NORMAL;
wcscpy(comp.wszSource, L"http://www.google.com/");
wcscpy(comp.wszFriendlyName, L"Google");
comp.cpPos.dwSize = sizeof(COMPPOS);
comp.cpPos.fCanResize = TRUE;
comp.cpPos.iLeft = COMPONENT_DEFAULT_LEFT;
comp.cpPos.iTop = COMPONENT_DEFAULT_TOP;
HRESULT hr = ptrAD->AddDesktopItem(&comp, 0);
if(SUCCEEDED(hr))
hr = ptrAD->ApplyChanges(AD_APPLY_ALL);
ptrAD = NULL;
::CoUninitialize();
return 0;
}
</code>
HTH
Alex