Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Control Handle anhand der Caption finden (https://www.delphipraxis.net/133256-control-handle-anhand-der-caption-finden.html)

LDericher 28. Apr 2009 18:35


Control Handle anhand der Caption finden
 
Hallo DP!

Ich brauche eine Möglichkeit, das Handle eines Buttons herauszufinden, von dem ich nur die Caption kenne.
Der Button/Die Buttons sind allerdings auf einer anderen Form - Deren Handle ich allerdings kenne.

Also, hoffe, dass die Problembeschreibung hinreicht,
Der LDer!

DeddyH 28. Apr 2009 19:07

Re: Control Handle anhand der Caption finden
 
Installier Dir doch WinSpy und lass Dir den Code generieren :zwinker:

LDericher 28. Apr 2009 19:11

Re: Control Handle anhand der Caption finden
 
Bei 246 Buttons?
Viel Arbeit...
Die heißen Press_1 bis Press_123 und Release_1 bis Release_123
Hab die extra so genannt... kann aber nicht direkt drauf zugreifen, weil das ne andere Programmiersprache is -.-

LDer

DeddyH 28. Apr 2009 19:17

Re: Control Handle anhand der Caption finden
 
Zumindest das Grundgerüst hättest Du Dir generieren und dann ausbauen können. Aber nun gut, schau Dir mal MSDN-Library durchsuchenFindWindowEx an, das sollte hoffentlich helfen (sofern das kein Java-Programm ist).

LDericher 28. Apr 2009 19:30

Re: Control Handle anhand der Caption finden
 
Es hilft aber nicht viel weiter, weil Winspy intern auch damit arbeitet...

DeddyH 28. Apr 2009 19:31

Re: Control Handle anhand der Caption finden
 
Wieso auch nicht, das ist doch IMHO die einfachste Möglichkeit.

LDericher 28. Apr 2009 19:58

Re: Control Handle anhand der Caption finden
 
Also: Ich habe die Buttons etwa so angeordnet:

Code:
Press_1   Release_1
Press_2   Release_2
Press_3   Release_3
  ...       ...
Nun habe ich die Handles mit FindWindowEx und WinSpy in ein zweidimensionales Array geladen:

Delphi-Quellcode:
TButtons=array[1..2]of array[1..123]of HWND;
[...]
for J:=1 to 2 do
   for I:=1 to 13 do
      vButtons[J][I]:=FindWindowEx2(vGUIWindow, 'Button', (I*J));
//Ich hab jetz mal um Speichers willen nur je 13 Buttons erstellt ;)
Und dann wird das bei mir so aufgerufen:

Delphi-Quellcode:
procedure TAU3ControlGUI.PressKey(Input: integer);
begin
PostMessage(vButtons[1][Input], WM_LBUTTONDOWN, 0, 0);
PostMessage(vButtons[1][Input], WM_LBUTTONUP, 0, 0);
end;
Und in eine Schleife gepackt:

Delphi-Quellcode:
  for I:=1 to 13 do
    begin
    PressKey(I);
    ReleaseKey(I);
    end;
Die Buttons geben nach Klick testweise erstmal ihre Nummer aus. Ausgabe müsste also sein: "1-1-2-2-3-3-4-4-..."
Ist aber folgendermaßen: "1-2-2-4-3-6-4-8-5-10-6-12-7-1-8-3-9-5-10-7-11-9-12-11-13-13"

Was ist da bitte los? Ich denke, die WinSpy-Funktion spinnt irgendwie, weil sonst müsste der Kram doch laufen...

Deswegen wollt ich die Dinger ja erst über ihre Caption kriegen^^

Also, *nochmaldiefrageindenraumwerfaufdassjemanddaraufre agiere*

Wie bekomme ich das Handle eines Buttons dessen ParentHandle ich kenne, und von dem ich auch weiß, wie er beschriftet ist?

Danke vielmals im Voraus für eine passende, schnelle Antwort oder eine andersartige Lösung meines Problems - beispielsweise indem obenstehender Code nochmal auf Herz und Nieren überprüft wird - möglicherweise ist das ja auch mein Fehler^^

Luckie 28. Apr 2009 20:02

Re: Control Handle anhand der Caption finden
 
Beide Programme sind von dir, wobei das eine in Delphi geschrieben ist und das andere in irgendeiner anderen Sprache, die du uns verheimlichst. Warum brauchst du die Handles der Schaltflächen? Da beide Programme von dir sind, kannst du doch jede beliebige Methode der Interprozesskommunikatiion implementieren.

LDericher 28. Apr 2009 20:20

Re: Control Handle anhand der Caption finden
 
Zitat:

Zitat von Luckie
in irgendeiner anderen Sprache, die du uns verheimlichst.

Verzeihung ;)
Es handelt sich um ein AutoIt-Programm.
Eigentlich geht es nur darum, an ein drittes Fenster - diesmal ist es aber nicht von mir - Tastenanschläge zu senden.
Und mir ist auch klar, dass sich jetzt wohl jeder fragen wird: "Warum soooo umständlich???"

Die Antwort ist einfach: In Delphi geht es schlicht und einfach nicht! Zumindest nicht in diesem speziellen Fall.
Ich bin bei dem Versuch, das Ganze in rein-Delphi zu realisieren bereits jede erdenkliche Methode durchgegangen, habe lParamRecords ausprobiert und mir die SendMessages kilometerweit aus der Nase gezogen... Letztere ist jetzt einfach voll :P

Also, nun zum zweiten Teil:
Zitat:

Zitat von Luckie
Da beide Programme von dir sind, kannst du doch jede beliebige Methode der Interprozesskommunikatiion implementieren.

Liebend gern. OK, sag' mir wie's möglich ist und ich mach es.

Lg, LDer

Edit_1: Fehler behoben.

Edit_2: Das Thema war übrigens schonmal hier, allerdings dann etwas anders: http://www.delphipraxis.net/internal...t.php?t=155554

Luckie 28. Apr 2009 20:26

Re: Control Handle anhand der Caption finden
 
Sollte das dritte Programm keine Frameworks wie Java oder so nutzen, dann sollte es kein Problem sein in dieses Programm Tastaturanschläge zu senden. Voraussetzung ist, dass die entsprechenden Steuerelemente Windowshandles besitzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.
Seite 1 von 2  1 2      

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