![]() |
Control in eine fremde Anwendung bringen???
Hallo,
es muß doch irgendwie möglich sein, irgendein Control (zb. einen Panel) in einer Fremden Anwendung zu erzeugen. Es gibt doch zb auch einige Programme, die ToolBars oder ähnliches in anderen Programmen anlegen, obwohl das Programm keine Schnittstelle oder ähnliches dazu anbietet?? Wie geht sowas? |
Re: Control in eine fremde Anwendung bringen???
Man kann die Parent-Eigenschaft eines existierenden Controls auf das Fenster-Handels einer anderen Anwendung "umbiegen". Das Control ist dann ein "Kind" der anderen Anwendung, gehört aber noch zur eigenen.
d.h. Man kann es von der eigenen Anwendung wie gewohnt steuern und wenn die eigene Anwendung geschlossen wird, wird auch das Control geschlossen. Hier der Code zum ändern der Parent-Eigenschaft:
Delphi-Quellcode:
Windows.SetParent(Pnl.Handle, Hnd);
|
Re: Control in eine fremde Anwendung bringen???
Zitat:
Das wäre mir neu. Aber egal. Und wie soll es weitergehen, wenn du Schaltfläche auf dem fremden Fenster hast? Ein KLick auf den Button löst eine ![]() Deswegen: Was soll das werden und warum willst du eine eigene Schaltfläche in einem fremden Programm haben? |
Re: Control in eine fremde Anwendung bringen???
Hallo,
also weniger ein Button werden, mehr eine Komponente, die ich von TPanel zum Anzeigen von Bildern u. Videos abgeleitet hab. Der Grund dafür ist ein Werbekontept ähnlich wie es zb. bei Kazaa ist, dass also Werbebanner in jeglicher Form an bestimmten Stellen im Programm eingeblendet werden können. Ich will damit nicht irgendwelche Anwendungen mit Werbung vollstopfen, nur soll es eben möglich sein, diese Komponente ohne Änderung der Quellcodes unterzubringen. Die Zeichenvorgänge werden ja dann vom Programm selbst gesteuert (eigentlich schon, oder?). Und den Klick wollte ich dann mittels einem Hook abfangen und die Auswertung / Identifizierung über die ControlID bzw. das Handle machen und darauf hin die entsprechnde Aktion auslösen. Dazu soll das ganze dienen, nur bin ich im PSDK nicht wirklich weitergekommen um mein Problem zu lösen. |
Re: Control in eine fremde Anwendung bringen???
Ich freue mich über jeden neuen Hook im System. :evil:
|
Re: Control in eine fremde Anwendung bringen???
Naja komm, ein Hook ansich ist ja nichts schlimmes wenn er sauber und unschädlich arbeitet und immer schön CallNextHookEx aufruft, oder ???? So und jetzt geh ich meinem Ansatz mal weiter nach ... ich hoffe, du lässt mich am Leben :? Luckie, wenn ich morgen nochmal nachfragen sollte ???
|
Re: Control in eine fremde Anwendung bringen???
Das mit dem "Umbiegen" des Parents funzt wunderbar. Ich kann jegliche Controls von meinem Fenster auf ein anderes umlegen. Ich kann dann auch alles mit dem jeweiligen Control machen, was ich auch in der eigenen Anwendung machen könnte.
Ok, ich bekomme keine Botschaften mehr vom Control, das wird in diesem Fall ja aber auch nicht gebraucht (wobei, ein Schließen-Knopf wäre sinnvoll :!: ). Mit dem folgenden Code kann man das Control bei Bedarf auch wieder zurückholen (solange das andere Fenster sammt dem Panel nicht geschlossen wurde):
Delphi-Quellcode:
Übrigens, ich hasse Werbebanner :evil:
var
Hnd: HWnd = 0; ... procedure TForm1.Button1Click(Sender: TObject); begin if (Hnd = 0) then Hnd := FindWindow(nil, 'Arbeitsplatz'); if (Hnd <> 0) then Hnd := Windows.SetParent(Panel1.Handle, Hnd) else ShowMessage('Öffne mal den Arbeitsplatz und versuchs dann nochmal!'); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Panel1.Color := not Panel1.Color; Panel1.Font.Color := not Panel1.Color; Panel1.Caption := Format('Parent: %d', [GetParent(Panel1.Handle)]); end; |
Re: Control in eine fremde Anwendung bringen???
Zitat:
Zitat:
|
Re: Control in eine fremde Anwendung bringen???
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Control in eine fremde Anwendung bringen???
Zitat:
Zitat:
Und Hooks können ziemlich gefährlich sein. Ich hatte ein Messenger Programm. Das hat wohl auch einen Hook installiert oder so was. Jedenfalls jedesmal, wenn ich im Explorer eine Datei oder Ordner mit der Rechten Maustaste angeklickt habe ist der Messenger mit einer Exception abgestürzt. :evil: Ich brauche wohl nicht zu erwähnen, dass er ziemlioch schnell wieder runter war. |
Re: Control in eine fremde Anwendung bringen???
Zitat:
mfG mirage228 |
Re: Control in eine fremde Anwendung bringen???
Es war ein anderer Messenger. Aber das tut nichts zum Thema. Ich wollte nur zeigen, dass man mit Hooks sehr vorsichtig sein sollte, da es ein nicht gerader oberflächlicher Eingriff in das System bedeutet.
|
Re: Control in eine fremde Anwendung bringen???
Hallo,
Zitat:
|
Re: Control in eine fremde Anwendung bringen???
Zitat:
Wenn nicht, hast Du auch die Windows-API von SetParent und nicht die Delphi-Eigene benutzt? Also damit war's bei mir kein Problem. Hilft übrigens auch um nervige Werbebanner oder Popups in einen Panel gefangen zu halten.
Delphi-Quellcode:
HWND SetParent(
HWND hWndChild, // handle of window whose parent is changing HWND hWndNewParent // handle of new parent window );
Delphi-Quellcode:
procedure SetParent(AParent: TWinControl); virtual;?
Zitat:
Stimmt das Preis-Leistungs-Verhältnis würde ich auch die Werbung "wegkaufen" und somit die Programmier, Tester, Vertreiber, und die sonst noch dazu gehören, unterstützen. Zitat:
'von vielen genutzt' * angemessener Preis = ein Haufen Kohle für 'ein Haufen Unkosten'[/b] z.B. Opera für 34,00€ bzw. 22,99€ - find ich fair |
Re: Control in eine fremde Anwendung bringen???
Zitat:
Kann man vieleicht "einfach" nur global Mausbotschaften abfangen? Dann prüfen ob es das Fenster, auf dem der Banner liegt, den Focus hat, die Mauskoordinaten zur Position des Panels passen und dann, wenn alles passt, irgendwas tun (so viele Kommas in einem Satz, wenn eins falsch ist - Neue Retschreibung :mrgreen: ). |
Re: Control in eine fremde Anwendung bringen???
Ja, das geht - entweder über Hooks oder du fragst alle 10 Millisekunden den Mausstatus über GetAsyncKeyState ab.
Möglichkeit Nr. 1 ist ziemlich kompliziert und wie gesagt eine Systembremse, Möglichkeit 2 kannst du gleich vergessen weil es den Computer ziemlich auslastet. |
Re: Control in eine fremde Anwendung bringen???
Liste der Anhänge anzeigen (Anzahl: 1)
Hey, hier noch ein Lösungsvorschlag ohne Hooks und ohne Timer dafür aber mit Botschaftenbehandlung.
Warum nur ein Control in das fremde Fenster umschieben und nicht gleich das ganze Formular. Wenn ich das Handle des eigenen Fensters auf das des anderen Fensters setze ist es ein "Kind" dessen (im Vordergrund) und erhält z.B. Klick-Botschaften auf die es reagieren kann. siehe Screenshot... |
Re: Control in eine fremde Anwendung bringen???
Hallo,
ansich eigentlich praktisch und gar nicht schlecht. Nur muß man vieleicht bei manchen Programmen dann Fenster immer umschieben um die verschiedenen Schaltflächen etc. zu erreichen. Dem wollte ich eigentlich vorbeugen, indem das entsprechende Control irgendwo fest platziert wird. Das Control soll deshalb seine eigene Ereignisbehandlungsroutinen bekommen. |
Re: Control in eine fremde Anwendung bringen???
Na Du kannst das Fenster doch in dem anderen Fenster genau so fest platzieren wie jedes andere Control. Du kannst doch Größe u. Position Deines Fensters so anpassen das es nichts verdeckt und niemanden stört. Dann änderst Du die Eigenschaft BorderStyle auf bsNone und schon sieht's aus wie n' fester Panel. :wink:
Und das Control hat seine eigene Ereignisbehandlungsroutinen!? Hast Du Dir den Screenshot angesehen? Wenn man da auf das Image klickt passiert was. Genau so kannst Du auf Botschaften (Veränderungen) des Fensters reagieren. |
Re: Control in eine fremde Anwendung bringen???
Kann man auch Controls von anderen Anwendungen von denen man das Handle hat "verschieben" ?
|
Re: Control in eine fremde Anwendung bringen???
Da es sich bei
Code:
um eine Windows-API-Funktion handelt ist es prinzipiell mit jeglichen Windows-Controls, also alles was selbst ein Handle hat, möglich.
SetParent
Ich kann mir nur gerade nicht vorstellen wofür man das braucht wenn nicht für böswilligen Kot. :gruebel: |
Re: Control in eine fremde Anwendung bringen???
Zitat:
Opera würde ich nichtmal geschenkt nehmen! Es ist - entgegen seiner Versprechen - deutlich langsamer als der Microsoft Internet Explorer (man muss sich ewig die Ladeanzeige angucken, und bis dann die Seite mal - zunächst mit Falscher schrift, falschen Proportionen, etc. - geladen ist), hat auf vielen Seiten deutliche Darstellungsfehler, und viele Features einfach nicht eingebaut. Das Surfen ist damit nicht einfacher oder schneller, im Gegenteil! Das Werbebanner krönt die Unverschämtheit der Programmierer, ein solch unvollkommenes Programm auch noch VERKAUFEN zu wollen, mit penetranter visueller Belästigung, und Riesen-Bannern, die im Hintergrund geladen werden! FireFox ist da schon besser, von der Geschwindigkeit her wirklich in einer Liga im Microsoft Internet Explorer, weist allerdings gelegentlich Darstellungs-Fehler auf (z.B. auf einigen DHL-Seiten), ansonsten sehr brauchbar. Also Werbebanner haben in auf meinem System nichts verloren, die werden entfernt (...), und dann werde ich das Programm ganz sicher nicht mehr kaufen, sofern ich es überhaupt noch benutze. |
Re: Control in eine fremde Anwendung bringen???
Also dazu kann ich nur sagen dass, wenn man nicht grade mit 56k surft, Opera keineswegs langsam ist oder dass es besonder viele Seite grafisch falsch darstellt. Ok, es ist vieleicht etwas langsamer als der iNet-Explorer, der dafür allerdings auch keinen eMail-Clienten, keinen Downloadmanager usw. beinhaltet. Ganz abgesehen von der allgemein bekanntlichen Sicherheit des Microsoft-Browsers.
Wie Firefox ist kann ich leider nicht sagen, wird aber wie jede Software (dazu zähle ich auch Opera ;) auch irgendwelche Ecken und Kanten haben. Er hat sicherlich Vorteile aber garantiert auch Nachteile. Ich denke einfach dass jeder es selbst entscheiden sollte, was er braucht, was er gut findet und vor allem was er für die von ihm eigesetzte Software ausgeben bzw. (werbetechnisch) in kauf nehmen würde. Ob ich nun das MS-Paket, welches aus mehreren Einzelprogrammen besteht (iNet-Expl., Outlook, ups Dowloadmanager :gruebel: ), nutze oder ob ich das Koplettpaket (z.B. Opera)nehme ist ja eigentlich nur Erfahrungs- und Ansichtssache. Es liegt mir fern hiermit eine unendliche Diskussion über "gute" und "schlechte" Software zu entfachen oder irgendwelche Software in den Dreck zu ziehen bzw. in den Himmel zu heben. |
Re: Control in eine fremde Anwendung bringen???
PS: Zum Thema Firefox...
Schon bei der Installation ist mir eine kleine Ecke ins Auge gefallen. Wenn ich, wie allgemein üblich, einen anderen als den vorgeschlagenen Pfad nutzen möchte und auf den Browse-Button klicke, wird mir als erstes mein Standard-Temp-Verzeichnis vorgeschlagen. Da ich die Software natürlich auch nicht dorthin haben möchte browse ich durch meine Ordnerstruktur und will logischer Weise noch einen Unterordner erstellen. Genau das geht nicht! Ich muss den Ordner händig anlegen sodass ich ihn dann auswählen kann. Einfachste und grundlegenste Funktionen einer Installationsroutine :wink: Musste jetzt sein... |
Re: Control in eine fremde Anwendung bringen???
Zitat:
Der Fehler besteht also eigentlich darin, daß die Seite im Explorer "richtig" angezeigt wird. Den Umstand interpretieren leider sehr viele falsch ;) Gruß Martin |
Re: Control in eine fremde Anwendung bringen???
Moin Zusammen,
werdet bitte mal wieder On Topic, oder verlagert die Browser Diskussion in einen neuen Thread (K&T wäre hier wohl passend). Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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-2025 by Thomas Breitkreuz