Delphi-PRAXiS

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 ^^

DeddyH 19. Mär 2008 17:57

Re: Handle unter maus beim mausklick ermitteln ...
 
Hast Du Ollis Tutorial denn schon gelesen?

moppedfahrer 19. Mär 2008 19:25

Re: Handle unter maus beim mausklick ermitteln ...
 
Jop habs angefangen ^^ ist auch wirklich gut und ich denke dass cih mich in nächster zeit nochmal dran versuchen werde ... wollte aber auch erstmal sein dll tutorial machen :-D


Anderes Thema:
Sry irgendiwe bin ich wohl doch zu doof ... :oops:
hab mir zu testzwecken ein programm gemacht wo beim klick auf die form diese die farbe wechselt...
Jetzt wollte ich mit
Delphi-Quellcode:
SendMessage(1115564,MOUSEEVENTF_LEFTDOWN,0,0);
SendMessage(1115564,MOUSEEVENTF_LEFTUP,0,0);
meines anderen programmes mal ausprobieren ob das denn funzt ... tut es aber nicht... die farbe bleibt wie sie ist ??? :gruebel:
*verzweifel*

DeddyH 19. Mär 2008 19:33

Re: Handle unter maus beim mausklick ermitteln ...
 
Bist Du Dir auch sicher, dass das Handle des Fensters zu dem Zeitpunkt auch 1115564 war?

[edit] Und die MOUSEEVENT... - Konstanten sind für die Message MOUSE_EVENT gedacht. [/edit]

moppedfahrer 19. Mär 2008 19:41

Re: Handle unter maus beim mausklick ermitteln ...
 
Also das Handle ist das richtige ... da bin ich mir sicher
Was soll ich denn statt MOUSEEVENTF_LEFTDOWN dareinschreiben ??? :gruebel:

DeddyH 19. Mär 2008 19:45

Re: Handle unter maus beim mausklick ermitteln ...
 
Wie wäre es mit WM_LBUTTONDOWN?

toms 19. Mär 2008 19:47

Re: Handle unter maus beim mausklick ermitteln ...
 
MOUSEEVENTF_LEFTDOWN funktioniert nur mit mouse_event()

Verwende WM_LBUTTONDOWN + WM_LBUTTONUP

Delphi-Quellcode:
SendMessage(Handle,WM_LBUTTONDOWN,0,0);
SendMessage(Handle,WM_LBUTTONUP,0,0);

moppedfahrer 19. Mär 2008 19:48

Re: Handle unter maus beim mausklick ermitteln ...
 
*Räusper* ja das wäre gut ^^ Danke
ja da kommt WM_LButtonDown rein ... geht auch allerdings friert mein programm dabei ein ?!

[edit] wenn ich dann einmal den taskmanager aufrufe und sofort wieder schließe geht es wieder (auch mehrmals) [/edit]

toms 19. Mär 2008 19:52

Re: Handle unter maus beim mausklick ermitteln ...
 
Zitat:

Zitat von moppedfahrer
*Räusper* ja das wäre gut ^^ Danke
ja da kommt WM_LButtonDown rein ... geht auch allerdings friert mein programm dabei ein ?!

[edit] wenn ich dann einmal den taskmanager aufrufe und sofort wieder schließe geht es wieder (auch mehrmals) [/edit]

nimm mal PostMessage

moppedfahrer 19. Mär 2008 19:56

Re: Handle unter maus beim mausklick ermitteln ...
 
Danke für den Tipp ... hat sich aber erledigt ...
Die beiden Programme hießen beide noch Project1 ... hab eins mal umbenannt und dann gings ?!
Trotzdem danke für die schnelle Hilfe :thumb: :thumb: :thumb:

moppedfahrer 19. Mär 2008 20:02

Re: Handle unter maus beim mausklick ermitteln ...
 
*Nerv* :wink:
kann man die aktion auch an einer bestimmten Stelle des dem Handle zugrunde liegenden Objektes ausführen ???

toms 19. Mär 2008 20:05

Re: Handle unter maus beim mausklick ermitteln ...
 
Zitat:

Zitat von moppedfahrer
*Nerv* :wink:
kann man die aktion auch an einer bestimmten Stelle des dem Handle zugrunde liegenden Objektes ausführen ???

Was genau meinst du damit? :roll:

moppedfahrer 19. Mär 2008 20:10

Re: Handle unter maus beim mausklick ermitteln ...
 
Wenn zum Beispiel meine Form bei einem Klick in die linke Hälfte rot werden würde und bei einem in die rechte grün ... könnte sendmessage da irgendwie unterscheiden, wo das WM_LButtonDown geschieht ??? Die Form an sich hat ja dann immer nur noch ein einziges Handle, oder ?

AlterDelphiFreund 19. Mär 2008 20:19

Re: Handle unter maus beim mausklick ermitteln ...
 
Wenn ich Dich richtig gelesen hab... dann brauchst Du nur die Mauskoordinaten auslesen (wenn das Ereignis für Linke Taste runter oder rauf eintritt) um festzustellen, auf welcher Fensterseite die Taste gedrückt wurde und damit die Maus war, oder meinst Du was anderes ?

moppedfahrer 19. Mär 2008 20:24

Re: Handle unter maus beim mausklick ermitteln ...
 
Ich meinte was anderes :wink:
es geht darum, von Programm A aus in einen bestimmten Bereich von Programm B zu klicken...

toms 19. Mär 2008 20:32

Re: Handle unter maus beim mausklick ermitteln ...
 
Zitat:

Zitat von moppedfahrer
Ich meinte was anderes :wink:
es geht darum, von Programm A aus in einen bestimmten Bereich von Programm B zu klicken...

Siehe Hier im Forum suchenSendInput


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr.

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