Toon posts:

[Delphi] active desktop programmeren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben al een tijdje bezig met dit probleem en ik heb al behoorlijk wat websites afgestruind, maar de oplossing nog niet gevonden.

Telkens als ik activedesktop functies aanroep met de shComponent structure zoals:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function TForm1.addDesktopItem(filename: string): boolean;
var
  ActiveDesktop : IActiveDesktop;
  pComp: TShComponent;
begin
  ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;

  pComp.dwSize := sizeOf(pComp);
  pComp.iComponentType := COMP_TYPE_CONTROL;
  StringToWideChar(filename, pComp.wszSource, 4096);

  if (S_Ok = ActiveDesktop.AddDesktopItem(pComp, 0)) then
    result := true
  else
    result := false;
end;

dan geeft ie dus een EINVALIDARG resultaat terug. Het lijkt erop dat de ShComponent structure verkeerd is, of verkeerd ingevuld.

Als ik mijn ShComponent structure aanpas aan die op de MSDN pagina's lukt het ook niet.

Ik heb ondertussen wel begrepen dat ik een obscuur stukje windows aan het programmeren ben en dat er weinig zijn die deze donkere hoeken van de win32 api betreden, maar ik heb nog hoop ;)

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06:09

Tomatoman

Fulltime prutser

Probeersel:
code:
1
2
3
4
  ...
  FillChar(pComp, SizeOf(pComp), 0);  // <-- toevoegen kan geen kwaad
  pComp.dwSize := sizeOf(pComp);
  ...

Ander probeersel: @pComp in plaats van pComp
code:
1
2
3
  ...
  if (S_Ok = ActiveDesktop.AddDesktopItem(@pComp, 0)) then
  ...

Een goede grap mag vrienden kosten.


Verwijderd

In mijn versie van Delphi klopt de TShComponent inderdaad niet. Dit komt omdat de constante INTERNET_MAX_URL_LENGTH verkeerd is gedefinieerd. Deze moet de waarde 2084 hebben.

De totale grootte van TShComponent moet dan 8924 of 8976 bytes zijn.

Door dit aan te passen is het mij gelukt om GetDesktopItem aan te roepen, maar AddDesktopItem lukt nog steeds niet met COMP_TYPE_CONTROL; met COMP_TYPE_PICTURE lukt wel :)

Verwijderd

Topicstarter
Ik kan inderdaad nu desktopitems opvragen, da's al een grote stap in de goede richting.

Nu het toevoegen nog :) Ik blijf de EInvalidArg-error krijgen. Ik heb ondertussen al bijna alle waarden geprobeerd. Iemand nog suggesties?