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 komponente einer anderen Applikation anektieren (https://www.delphipraxis.net/151633-eine-komponente-einer-anderen-applikation-anektieren.html)

gibb 26. Mai 2010 07:03


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 thema explizites tasten event auslösen. Wo es darum ging das es nicht möglich manuell gedrücktes ctrl/Shift per postmessage zu ignorieren.

mit der hoffnung auf eine gute lösung

gibb

Blup 26. Mai 2010 14:41

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.

rollstuhlfahrer 26. Mai 2010 16:10

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.

mkinzler 26. Mai 2010 16:13

Re: Eine komponente einer anderen Applikation anektieren
 
Zudem könnten neuere Windowsversionen diesen weg verbauen

rollstuhlfahrer 26. Mai 2010 16:18

Re: Eine komponente einer anderen Applikation anektieren
 
Zitat:

Zitat von mkinzler
Zudem könnten neuere Windowsversionen diesen weg verbauen

In wie fern? - Nachrichten kommen nur dann nicht an, wenn 2 Prozesse mit unterschiedlich starken Rechten kommunizieren wollen.

mkinzler 26. Mai 2010 16:22

Re: Eine komponente einer anderen Applikation anektieren
 
Ich meinte beim direkten Zugriff, z.B. über den Speicher

Christian Seehase 26. Mai 2010 22:20

Re: Eine komponente einer anderen Applikation anektieren
 
Moin gibb,

für den Zweck schlage ich die Messages Hier im Forum suchenWM_GETTEXT/MSDN-Library durchsuchenWM_GETTEXT und Hier im Forum suchenWM_SETTEXT/MSDN-Library durchsuchenWM_SETTEXT vor.

gibb 27. Mai 2010 09:04

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.

gibb 28. Mai 2010 15:15

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:
SendMessage(hwndControl,WM_SETTEXT,0,(Integer(PChar(strNewSpeed))));
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.

ctrl, shift scheint er so sowieso schon zu ignorieren.

Gruss Sev

Blup 28. Mai 2010 16:50

Re: Eine komponente einer anderen Applikation anektieren
 
Wenn das Steuerelement nicht selbst mitbekommt das es sich neu zeichnen muss, geht immer noch InvalidateRect.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:46 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