![]() |
Eine komponente einer anderen Applikation anektieren
Hallo zusammen,
Im thema ein Explizites tasten Event wurde leider keine wirklich zufriedenstellende lösung für mein Problem mit den tastenevents gefunden. Daher hier ein neuer ansatz resp. eine Frage. Ist es möglich ein Editfeld einer beliebigen applikation über z.b. den Handle zu anektieren und eine referenz im eigenen code zu erstellen? So das ich in das ich das edit direkt befüllen kann OHNE mit postmessage irgendwelche tastenevents in das edit zu generieren? Oder kennt sonst jemand einen weg ein Fremdes Edit mit Zahlen zu befüllen ohne über postmessage oder ähnliches benützen? Oder kennt jemand eine Methode SendInput und Postmessage zu kombinieren? Sozusagen mehrere zeichen gleichzeitig an einen bestimmten handle zu senden? Etwas an einen Handle zu senden kann ja Postmessage, und eine zeichen kette versenden kann sendinput. Genaueres findet ihr im ![]() mit der hoffnung auf eine gute lösung gibb |
Re: Eine komponente einer anderen Applikation anektieren
Ohne "postmessage oder ähnliches benützen" wird es wohl nicht funktionieren.
Die der Nachricht WM_SETTEXT ändert den Text eines Controls bzw. Editfeldes. |
Re: Eine komponente einer anderen Applikation anektieren
wenn du nonVCL ein Edit-Feld machst, kannst du das in deiner eigenen Anwendung auch nicht mit Text befüllen, ohne Fensternachrichten zu verschicken. Die VCL kapselt diesen Vorgang nur für dich. Du könntest jetzt im Speicher raten, wo sich der Text des Edit-Feldes gerade befindet und dementsprechend den Speicher manipulieren und dann per Fensternachricht dem Edit-Feld sagen, es solle sich neu zeichnen.
Du kommst also nicht um Send/PostMessage() herum. Bernhard ADD: manuell gedrücktes Strg/Alt/Shift kannst du umgehen, indem du die Tasten per API "anhebst" also das drücken aufhebst (Taste-hoch-Parameter). Dann meint Windows, die Taste wäre nicht gedrückt, obwohl du den Finger drauf hast. |
Re: Eine komponente einer anderen Applikation anektieren
Zudem könnten neuere Windowsversionen diesen weg verbauen
|
Re: Eine komponente einer anderen Applikation anektieren
Zitat:
|
Re: Eine komponente einer anderen Applikation anektieren
Ich meinte beim direkten Zugriff, z.B. über den Speicher
|
Re: Eine komponente einer anderen Applikation anektieren
Moin gibb,
für den Zweck schlage ich die Messages ![]() ![]() ![]() ![]() |
Re: Eine komponente einer anderen Applikation anektieren
Und bei sendMessage in kombination mit wm_SETTEXT werden vom benutzer gedrückte tasten ignoriert?
Sonst seh ich den sinn nicht das zu benutzen ;) Werds aber auf jeden fall testen. Gruss Sev Edit:@rollstuhlfahrer: Das mit dem anheben hat bei postmessage nicht funktioniert. genaueres findest du im anderen Thread. |
Re: Eine komponente einer anderen Applikation anektieren
Hi,
Also, ich habe das mal versucht, und es scheint auch ziemlich gut zu funktionieren. zumindest in meinem "Testfall"
Delphi-Quellcode:
Das einzige was mich stutzig macht ist das es kein repaint auslöst der komponente resp. das edit aussieht als sei es leer bis ich mit der maus den text markiere. oder so tue als ob ich was markieren möchte.
SendMessage(hwndControl,WM_SETTEXT,0,(Integer(PChar(strNewSpeed))));
ctrl, shift scheint er so sowieso schon zu ignorieren. Gruss Sev |
Re: Eine komponente einer anderen Applikation anektieren
Wenn das Steuerelement nicht selbst mitbekommt das es sich neu zeichnen muss, geht immer noch
![]() |
Re: Eine komponente einer anderen Applikation anektieren
|
Re: Eine komponente einer anderen Applikation anektieren
Kann ich ihm auch mitteilen das sich der inhalt geändert hat?
Also sozusagen ein change event ausläsen ? die andere applikation erkennt nämlich nicht das der text sich geändert hat. ein change event würde sicherlich auch ein repaint auslösen. gruss gibb |
AW: Eine komponente einer anderen Applikation anektieren
Delphi-Quellcode:
Hey, ich hab jetzt folgendes Implementiert, das ganze wird bei mir gut dargestellt und auch sonst sieht alles jut aus. ABER Speedfan erkennt nicht das sich der wert geändert hat im Textfeld. :( Was soviel bedeutet wie Speedfan steuert nicht anhand der Zahlen die ich übergebe.
SendMessage(hwndControl,WM_SETTEXT,0,(Integer(PChar(strNewSpeed))));
SendMessage(hwndControl,WM_SETREDRAW,1,0); RedrawWindow(HWNDControl, nil, 0, 0); PostMessage(HWNDControl, WM_KEYDOWN, VK_BACK,0); // backspace taste runter PostMessage(HWNDControl, WM_KEYUP , VK_BACK, $C0000000); // backspace taste rauf } Desshalb habe ich auch noch den Backspace gesendet, in der Hoffnung das dann das TSpinEdit Feld realisiert das es intern was abzuarbeiten hat. Leider hat der Backspace nicht funktioniert. Daher meine Frage, wie kann ich dem Edit mitteilen das es interne Prozeduren/Events auslösen muss genau gleich als hätte ich von hand etwas reingetippt? Gruss gibb |
AW: Eine komponente einer anderen Applikation anektieren
Vielleicht mal mit Enter versuchen?
|
AW: Eine komponente einer anderen Applikation anektieren
ja währ ne idee, aber ich denke nicht das das hilft. sonst ist ja auch kein enter notwendig. Die reine eingabe der zahlen bewürken wohl über die entpsrechenden events bereits das sich das Programm aktualisiert.
|
AW: Eine komponente einer anderen Applikation anektieren
Also, das mit dem Enter funktioniert auch nicht. gibt es ne möglichkeit changeevent oder andere solche events anzustossen?
Gruss Sev |
AW: Eine komponente einer anderen Applikation anektieren
versuch doch mal
Delphi-Quellcode:
Kommt von hier:
SendMessage(hwndControl,EN_CHANGE,0,0);
Delphi-Quellcode:
unit Messages;
... { Edit Control Notification Codes } const {$EXTERNALSYM EN_SETFOCUS} EN_SETFOCUS = $0100; {$EXTERNALSYM EN_KILLFOCUS} EN_KILLFOCUS = $0200; {$EXTERNALSYM EN_CHANGE} EN_CHANGE = $0300; {$EXTERNALSYM EN_UPDATE} EN_UPDATE = $0400; {$EXTERNALSYM EN_ERRSPACE} EN_ERRSPACE = $0500; {$EXTERNALSYM EN_MAXTEXT} EN_MAXTEXT = $0501; {$EXTERNALSYM EN_HSCROLL} EN_HSCROLL = $0601; {$EXTERNALSYM EN_VSCROLL} EN_VSCROLL = $0602; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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