Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Handle unter maus beim mausklick ermitteln ... (https://www.delphipraxis.net/110419-handle-unter-maus-beim-mausklick-ermitteln.html)

moppedfahrer 17. Mär 2008 23:08


Handle unter maus beim mausklick ermitteln ...
 
Hi
folgendes Problem:
ich habe ein Fenster und möchte gerne das Handle eines Buttons auf diesem Fenster ermitteln. Ich stell mir das so vor, dass ich auf dem Button rumklicke und mein Programm mir brav und artig die Handles von dem mitschreibt, worauf ich da rumklicke... :-D
Ich hab aus eurer Hilfe entnommen, dass man mit
Delphi-Quellcode:
WindowFromPoint(Mouse.CursorPos)
das Handle unter der Maus kriegt. Wenn ich dann aber als Test mit
Delphi-Quellcode:
sendmessage(WindowFromPoint(Mouse.CursorPos),WM_LButtonDown,0,0);
versuche den Button zu "drücken", tut sich nichts.

Weiß jemand, wie man sowas realisieren könnte ?

Danke im voraus ... :gruebel: :gruebel: :gruebel:

ghost007 17. Mär 2008 23:13

Re: Handle unter maus beim mausklick ermitteln ...
 
ich kucks mir gleich nochmal an, aber was mir auf den ersten blick auffällt, du ermittelt das handel des fensters und nicht das, des buttons ;)

MfG - Ghost007

//Edit: Such mal nach "WinSpy" mit dem netten tool kannst du dir direkt den code für das grappen von handels ausgeben lassen ;)

moppedfahrer 17. Mär 2008 23:23

Re: Handle unter maus beim mausklick ermitteln ...
 
hast ja recht, der name spricht iwie für sich ^^
kann man die handles nich auch mit delphi auslesen ?
Wie gehe ich denn damit um (winspy)^^ ? und kann ich die infos über die handles davon in delphi verwenden ?

mfg

christian.noeding 17. Mär 2008 23:52

Re: Handle unter maus beim mausklick ermitteln ...
 
ömm, is zwar schon spät, aber ersetz mal:

Delphi-Quellcode:
sendmessage(WindowFromPoint(Mouse.CursorPos),WM_LButtonDown,0,0);
durch

Delphi-Quellcode:
var HandleVar:integer;

{code}

// Handle zuweisen
HandleVar:=WindowFromPoint(Mouse.CursorPos);

{code}

// Nachricht ausführen
sendmessage(HandleVar,WM_LButtonUp,0,0);
bzw. schreibe

Delphi-Quellcode:
sendmessage(HandleVar,WM_LButtonDown,0,0);
sendmessage(HandleVar,WM_LButtonUp,0,0);
für nen vollständigen Klick. Habe ne kurze Demo programmiert und der Buttonklick wurde erfolgreich durchgeführt... als Gegenleistung kannst du mir vielleicht verraten, wie ich eine Caption eines Buttons über das Handle auslesen kann :)


gute Nacht,
Christian :)

moppedfahrer 17. Mär 2008 23:59

Re: Handle unter maus beim mausklick ermitteln ...
 
hi^^
mhh also es ist nich das problem an das fensterhandle zu kommen. das problem ist, ich würde gerne wissen, wie das handle heißt, an das meine aktionen gerade gerichtet werden (z.B. mausklicks).
Und: sorry aber da ich nichtmal weiß wie ich an die handles von den buttons komme, kann ich dir auch nicht sagen wie man an deren caption kommt :-)
// EDIT: Hab ich dich richtig verstanden ??? ... wenn nich , bitte meckern :stupid:

ghost007 18. Mär 2008 00:09

Re: Handle unter maus beim mausklick ermitteln ...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
winspy gibt dir direkt den delphi code aus.

Selbsterklärende beschreibung + winspy im anhang ;)

MfG - Ghost007

[Edit für christian]
Delphi-Quellcode:
function TForm1.GetText(wnd:Thandle):string;
 var
  caption:PChar;
  length:integer;
begin
 length:=SendMessage(wnd,WM_GETTEXTLENGTH,0,0);
 if length <> 0 then
  begin
   GetMem(caption, length+1);
   SendMessage(wnd,WM_GETTEXT,length+1,Integer(caption));
   result:=caption;
   FreeMem(caption);
  end;
end;
[/Edit]

christian.noeding 18. Mär 2008 07:34

Re: Handle unter maus beim mausklick ermitteln ...
 
@moppedfahrer:

auch wenns von ghost007 bereits erklärt wurde: das Handle des Buttons oder einer anderen Komponente bekommst du doch ohne weiteres mit dieser Zeile:

Delphi-Quellcode:
HandleVar:=WindowFromPoint(Mouse.CursorPos);
Natürlich bekommst du, wenn du deine Maus vom Button wegbewegst, natürlich sofort wieder das Handle des den Button umgebenden Fensters in die Variable HandleVar. Somit musst du dir halt was passendes für die Zuweisung des Handles in die Variable oder ähnliches ausdenken, sodass du wirklich nur das Handle bekommst, welches du auch willst. Danach wie von dir geschrieben die SendMessage ausführen mit WM_LButtonDown und WM_LButtonUp (WM_LButtonDown allein reicht nämlich nicht, um den Button zu drücken).

@ghost007:

vielen Dank. Das das mit WM_GETTEXT ging hatte ich schon rausbekommen, nur wie ich den Inhalt auf eine Variable zuweisen musste war mir nicht klar. Super Sache :) Jetzt kann ich mir endlich mein eigenes Girder für meine Fernbedienung bauen *g*



ciao

ghost007 18. Mär 2008 07:48

Re: Handle unter maus beim mausklick ermitteln ...
 
[quote="moppedfahrer"]
Ich stell mir das so vor, dass ich auf dem Button rumklicke und mein Programm mir brav und artig die Handles von dem mitschreibt, worauf ich da rumklicke... :-D
/quote]

Für das rumklicken musst du die warscheinlich einen mousehook einbaun. such einfach mal dann hier im forum ;)

MfG - Ghost007

moppedfahrer 18. Mär 2008 14:57

Re: Handle unter maus beim mausklick ermitteln ...
 
Vielen Dank für die schnellen Antworten :thumb: :thumb: :thumb:
werd mich gleich mal ranmachen :-)
:dance: :dance: :dance:

moppedfahrer 19. Mär 2008 17:40

Re: Handle unter maus beim mausklick ermitteln ...
 
Klappt jetzt wunderbar ... Danke
Aber ich glaube, an die sache mit den mousehooks trau ich mich erstmal noch nich ran :lol:
Scheint nicht ganz so einfach zu sein ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Seite 1 von 3  1 23      

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