Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eine Deskbar aus eigenem Programm ein-/ausblenden (https://www.delphipraxis.net/61036-eine-deskbar-aus-eigenem-programm-ein-ausblenden.html)

luwo 16. Jan 2006 12:05


Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Hallo DP-Freunde,

ich möchte eine (bzw. mehrere) eigene Deskbar(s) (erstellt mit Hilfe von Sakura´s Tutorial, Danke Daniel!!! :-D )
über ein zweites Programm ein- bzw. ausblenden lassen.

Ich dachte für solch eine "einfache" Aufgabe gibts eine simple Lösung,
leider hab ich nach umfangreicher Suchen noch immer keine Lösung gefunden :(

Im Grunde soll das Programm dasselbe tun, wie wenn in der Taskleiste mit rechter Maustaste
das Kontextmenü aktiviert wird und im Submenü "Symbolleisten" auf den entsprechenden Eintrag geklickt wird.

Meine bisherigen Ansätze waren:

* MSDN: "DESKBAND", irgendein API-Aufruf (z.b. show/hide) zu entsprechenden COM´s
-> Fehlanzeige, nix dergleichen :gruebel:

* TASKBAR: einen Mausklick simulieren indem durch die Taskbarhierarchie gehangelt wird und ein Mausklick im Menü ausgeführt wird
-> Fehlanzeige, da ich nicht an das Kontextmenü herankomme (bei einem Hauptmenü ginge es ja)

* BHO: Hab noch was gefunden über BHO´s (Browser-Helper-Objects) mit denen sich eine Bar direkt einblenden liese
-> Fehlanzeige, da ich die Deskbar ja nicht im InternetExplorer sondern im Explorer verwenden will (zudem lässt Sie sich da nur einblenden)


Die Interfaces (IDeskBand, IPersist, IPersistStream, IPersistStreamInit, IObjectWithSite, IContextMenu, IInputObject)
hab ich auch schon durchforstet, aber auch ohne Ergebnis :|



Hat jemand eine Idee wie man das noch machen könnte?
Sakura vielleicht? :-)

Gruß Luwo

luwo 16. Jan 2006 19:31

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Tja, keinerlei Meldung... :(

Entweder ist das Thema zu schwer/uninteressant/...
oder
es gibt tatsächlich keine Lösung... :?

Schade...

SirThornberry 16. Jan 2006 20:14

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
gäbe es nicht auch die möglichkeit die Deskbars zu schließen und dann wieder zu öffnen (also dem Programm ein wm_close schicken)

luwo 16. Jan 2006 20:24

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Zitat:

Zitat von SirThornberry
gäbe es nicht auch die möglichkeit die Deskbars zu schließen und dann wieder zu öffnen (also dem Programm ein wm_close schicken)

hmmm... anscheinned leider nicht.
Da man ja kein konkretes Fensterhandle bekommt, welches die komplette Deskbar beinhaltet.

Aber irgendwie muß es gehen, die Tastaturumschalte-Leiste kann man ja auch über den Einstellungs-Dialog ein-/ausblenden.
Hab auch schon nen RegMon drüber laufen lassen, aber außer ein paar Binärwerten (die nicht so recht zu gebrauchen sind)
hab ich da auch nix gefunden...

SirThornberry 16. Jan 2006 21:21

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Irgend ein Handle muss die Deskbar doch haben. Du könntest das handle doch in ein MemoryMappedFile packen. Eventuell lässt sich da auch was über GlobalAddAtom oder so machen.

luwo 16. Jan 2006 21:36

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Ja natürlich bekomme ich Handles zurück, und zwar von jedem Objekt, was im Deskbar enthalten ist. (ein TEdit und ein TButton)
und auch ein Handle auf das "embedded"-Form.
Bloß nützt das nicht viel, da ich ja nicht die Einzelteile ausblenden will, sondern die komplette Deskbar.
(Mit .Parent etc. hab ich übrigens auch schon probiert)

MemoryMappedFile? Was meinst du genau damit?

Wenn du mit GlobalAtom ein Systemweite UID meinst ist das leider auch keine Lösung,
da ich zum einen mehrere von den Deskbars gleichzeitig brauche und überdies hab ich
schon eine UID mit der TGUID die ich im Deskbar verbrate.
Oder hab ich dich da jetzt falsch verstanden?

Ein weiteres Ding ist natürlich, dass nicht ICH, sondern der Explorer (od. IExplorer)
eine Objekt der Deskbar instanziiert und da wird natürlich auch nix irgendwohin zurückgeliefert...

Also ich bin hier echt am verzweifeln :wiejetzt:
Es sieht eigentlich nach einem sooo simplen Problem aus...

SirThornberry 16. Jan 2006 22:31

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
ich hab mich ehrlich gesagt noch nicht so wirklich mit Deskbars beschäftigt (wird aber wohl zeit). Aber wenn du der Deskbar eine Message schicken kannst müsste es doch auch möglich sein innerhalb der Deskbar diese Message abzufangen und darauf hinn ein Application.Terminate etc. aufzurufen, je nach dem auf welche Art und weise die Deskbar funktioniert. Auf jeden Fall müsste es doch möglich sein das die Deskbar sich selbst zerstört.

DummerDickerHase 7. Jun 2006 13:02

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Hallo!

Ich steh vor dem gleichen Problem! :wall:

Gibt es da schon was neues?

greetz rabbit

arbu man 7. Jun 2006 13:23

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Das mit WM_Close könnte böse werden da die Deskbar in der Explorer.exe drin hängt( laut paramstr(0)).
aber man müsste die Deskbar vielleicht über regsvr32 deinstallieren können. aber kann verschwindet sie doch erst nach dem neustart :wall:
Ich sehe grade dieDeskbar dll exportiert die methode "DllUnregisterServer" vielleicht könnte man in dieser die deskbar bei der deinstalltion verstecken.

Naja das arbeiten mit deskbands ist nicht einfach, vor allen da man die dll nicht einfach erstzen kann.
mfg, björn

himitsu 7. Jun 2006 13:57

Re: Eine Deskbar aus eigenem Programm ein-/ausblenden
 
Schonmal versucht mit WinSign (oder so) die Windowsnachrichten zu verfolgen und dann per Hand (über's Kontextmenü) das Band auszublenden?

Im Grunde bräuchstest du dann nur rausfinden was du für 'ne Nachricht senden mußt, damit das gewünschte Band verschwindet.

Erstmal die Nachricht (WM_... oder so) rausfinden, dann eventuell im MSDN raussuchen was da für Parameter (in LPARAM und WPARAM) drin sind (oder halt einfach selber versuchen rauszufinden was da drin sein muß).


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz