![]() |
wie würdest ihr es anstellen, Buttons in fremde Titelleisten
Liste der Anhänge anzeigen (Anzahl: 1)
wie würdest ihr es anstellen, Buttons in fremde Titelleisten zu integrieren.
dass es so wie im Anhang aussieht ? ich wollte ein kleines Desktop Managment Programm schreiben, um in alle Titelleisten (von allen offenen Fenstern) einen Button nach links und rechts zu haben, die bewirken, dass das Fenster bei einer Mehrmonitorlösung auf den anderen Monitor geschoben werden. So in etwa, wie das Beispiel aus meiner Software .. (Anhang) Arbeite mit 3 Monitoren, und es würde die Handhabung ziemlich vereinfachen .. Danke Euch ! Gruß stoxx |
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Versuch doch mal die Hilfe zu bemühen. Etwa mit den Schlagwörtern "Titelleiste, Button"
Du kannst allerdings auch einfach einen neuen Button ins Systemmenü einfügen. Luckie hatte da mal was:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } procedure WndProc(var msg: TMessage); override; end; var Form1 : TForm1; implementation {$R *.dfm} const MY_MENU_ID = 999; procedure TForm1.Button1Click(Sender: TObject); var hMenu : THandle; begin hMenu := GetSystemMenu(Handle, False); if hMenu <> 0 then begin if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then ShowMessage(SysErrorMessage(GetLastError)); DrawMenuBar(hMenu); end; end; procedure TForm1.Button2Click(Sender: TObject); var hMenu : THandle; begin hMenu := GetSystemMenu(Handle, False); if hMenu <> 0 then begin if not InsertMenu(hMenu, 6, MF_BYPOSITION, MY_MENU_ID, 'Mein Menüitem') then ShowMessage(SysErrorMessage(GetLastError)); DrawMenuBar(hMenu); end; end; procedure TForm1.WndProc(var msg: TMessage); begin inherited; case msg.Msg of WM_SYSCOMMAND: begin if hiword(msg.WParam) = 0 then begin case loword(msg.WParam) of MY_MENU_ID: ShowMessage('Buuuh!'); end; end; end; end; end; |
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Zitat:
Ich möchte den Button z.b. in den Internet Explorer haben, hast Du da Ideen dazu ? Vielen Dank ! |
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
wenn du weißt wie du den button für die eigene anwendung hinn bekommst musst du das ganze nur noch per hook in andere anwendungen integrieren
|
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Vielleicht schaffst du es ja die Buttons nach links zu versetzen, mittlerweile nutzen mir zu viele Anwendungen die rechte Seite, nur doof das dann Buttons übereinander liegen.
|
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Zitat:
nur leider habe ich mit der Windows API bisher noch nicht so intensiv gearbeitet, dass ich mir einen Lösungsweg selber überlegen könnte ! Hättest Du einen im Kopf ? |
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Mein Ansatz wäre:
1. Packe die Funktionalität in eine DLL 2. Erzeuge einen globalen Hook (z.B. WH_MOUSE) mit einer Funktion, die ebenfalls in der DLL liegt -> deine DLL wird in jeden Prozess injeziert. 3. Beim Laden der DLL ermittle alle Hauptfenster des jeweiligen Prozesses und merke sie dir (EnumWindows / GetWindowThreadProcessId). 4. Hooke die Funktionen CreateWindow und CreateWindowEx, um neue Hauptfenster abzufangen (die ohne WS_CHILD). 5. Ein WM_DESTROY in der Fensterprozedur entfernt ein Fenster aus deiner Liste. Diesen Fenstern musst du dann deine Buttons zuordnen. Entweder erzeugst du ein kleines Panel mit den Buttons, das du dann zusammen mit dem Fenster verschiebst, oder du arbeitest ohne Fenster und behandelst die Meldungen WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE, WM_NCLBUTTONUP und WM_NCPAINT selbst. |
Re: wie würdest ihr es anstellen, Buttons in fremde Titellei
Ich befürchte, daß du dabei nicht um einen Hook der entsprechenden Fensterfunktionen herumkommen wirst (es sei denn du verwendest API-Hooks statt Fenster-Hooks).
Mein (veraltetes) Tut hast du sicher schonmal überflogen, oder? Wenn du WH_CALLWNDPROC (global) benutzt, solltest du auf der sicheren Seite sein. Inwieweit das die Performance negativ beeinflußt kann ich nicht sagen, müßtest du testen. Denn logischerweise existieren auf einem normalen System eine Menge Fenster (und damit Fensterfunktionen). Vorzugsweise sollte deine Hookfunktion also hochoptimiert sein um alle Fälle auszuschließen wo es ohnehin unnötig ist einzugreifen (bspw. bestimmte Nachrichten). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
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