Entwickler-Ecke

Windows API - Active Desktop ausschalten..


Terra23 - Mo 28.04.03 20:34
Titel: Active Desktop ausschalten..
Nachdem Tino mich ja so nett drauf hingewiesen hat, bei einer neuen Frage, ein neues Topic zu erstellen, tue ich das hiermit. :-)

@Tino: Klang übrigens leicht etwas gereizt, kann das sein?

Nun ja, ich würde gern von euch wissen, wie ich den Active Desktop in Windows ausschalten kann und wie ich überhaupt prüfe, ob der aktiv ist.

Schreibt der sich vielleicht irgendwo in die Registry, so nach dem Motto: Wenn aktiv, dann 0, sonst 1 oder so?

Danke..


toms - Mo 28.04.03 21:14

Hi,
Hab's mal so gemacht:
http://www.swissdelphicenter.ch/de/showcode.php?id=735
http://www.swissdelphicenter.ch/de/showcode.php?id=1439


Terra23 - Mo 28.04.03 21:23

Danke, ich lese mir das mal durch. Mein Tool funktioniert nämlich nicht, wenn der Active Desktop an ist. Geht das vielleicht auch noch etwas einfacher? Ich meine, schreibt der nicht irgend einen Integer in die Registrierung?!? :?:


Terra23 - Di 29.04.03 16:10

Ich habe mir das mal durchgelesen (bin auch hier im Forum auf einen ähnlichen Beitrag gestoßen; da soll man mal drauf kommen, Active mit "k" zu schreiben. :-) ) und habe mir das ausgedruckt. Nun brauche ich aber folgendes:

1) Wie kann ich bewerkstelligen, daß ShowMessage mit zeigt, das der Active Desktop an ist?
2) Wenn er an ist, wie schalte ich ihn aus?
3) Wenn ich ihn ausgeschaltet habe, wie schalte ich ihn am Schluß wieder an?

Ich bin im Netz auf etwas gestoßen, daß ermöglicht mir lediglich, den kompletten Karteireiter "Web" aus den Eigenschaften von Anzeige zu nehmen und so den AD zu deaktivieren. *g*

Danke im Vorraus.. :-)


Terra23 - Mi 30.04.03 17:13

Also, ich habe nun folgendes genommen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
MyObject:=CreateComObject(CA);
ADesk:=MyObject As IActiveDesktop;
With Comopt Do
     Begin
     ZeroMemory(@Comopt, SizeOf(TComponentsOpt));
     dwSize:=SizeOf(Comopt);
     fEnableComponents:=bValue;
     fActiveDesktop:=False;
     End;
ADesk.SetDesktopItemOptions(Comopt, 0);
ADesk.ApplyChanges(AD_APPLY_ALL);


Meine Variablen sehen so aus:

Quelltext
1:
2:
3:
4:
  MyObject: IUnknown;
  ADesk: IActiveDesktop;
  Comopt: TComponentsOpt;
  bValue: Boolean;


Nun wollte ich folgendes machen: Wenn der Active Desktop an ist, soll sich das Programm das merken (Übergabe von True an einen Boolean) und beim Schließen darauf zugreifen.

Jedoch:

Der Wert bValue ist bei mir immer False, egal, ob der ActiveDesktop beim Programmstart an oder aus ist. Woran liegt das? Ich meine, es funktioniert ja soweit, daß der Active Desktop ausgeschaltet wird, aber es ist ja nervig, wenn die User den immer selbst wieder anschalten, oder?