AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mausklick an ein bestimmtes Handle senden.

Mausklick an ein bestimmtes Handle senden.

Ein Thema von Lostriga · begonnen am 27. Jan 2009 · letzter Beitrag vom 29. Jan 2009
 
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#1

Mausklick an ein bestimmtes Handle senden.

  Alt 27. Jan 2009, 00:47
Aloa,

wieder einmal bitte ich um euren Rat.

Ich sitzte derzeit an einem Programm,
mit dem ich einen Mausklick an ein bestimmtes Fenster, auf eine bestimmte Position senden möchte.

Ich habe es bereits mit verschiedenen Varianten versucht, doch immer nur mit teilweisem, oder gar keinem Erfolg.

Am besten zeige ich euch diese erst einmal:

Mit diesem gelingt es mir, meine Cursor an eine gewünschte Position zu bewegen,
der Klick wird an der Position (400/300) des Bildschirmes ausgeführt, nicht des Fensters.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
p : TWindowPlacement ;
x, y : Integer;
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
GetWindowPlacement(hwnd, @p);
x := p.rcNormalPosition.left+400;
y := p.rcNormalPosition.top+300;
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
end;
Diese Art habe ich im Internet gefunden,
doch einen gewünschten Effekt hat es in keiner Hinsicht ausgeführt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(FindWindowEx(FindWindow('Testfenster', nil),0, 'Button', nil),
            WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(100, 100));
PostMessage(FindWindowEx(FindWindow('Testfenster', nil),0, 'Button', nil),
            WM_LBUTTONUP, MK_LBUTTON, MAKELONG(100, 100));
end;
Auch diese bringt keinen Effekt.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  x = 100;
  y = 100;
  xy = x or y shl 16;
var
  hwnd: THandle;
begin
  Wnd := FindWindow(nil, 'Testfenster');
  PostMessage(hwnd, WM_MOUSEMOVE , 0 , xy);
  PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, xy);
  PostMessage(hwnd, WM_LBUTTONUP , 0 , xy);
end;
Genauso wie diese.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
SendMessage(hwnd, MOUSEEVENTF_LEFTDOWN, 0, 0);
SendMessage(hwnd, MOUSEEVENTF_LEFTUP, 0, 0);
end;
Hier habe ich den ersten und dritten ein bisschen zusammen gehauen,
der Effekt bleibt aber wie der des ersten.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  x = 400;
  y = 300;
  xy = x or y shl 16;
var
p : TWindowPlacement ;
hwnd : THandle;
begin
hwnd := FindWindow('Testfenster', nil);
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
  PostMessage(hwnd, WM_MOUSEMOVE , 0 , xy);
  PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, xy);
  PostMessage(hwnd, WM_LBUTTONUP , 0 , xy);
end;
Deswegen meine Frage:
wie würde der Source aussehen müssen, damit der Klick immer 400/300 im Fenster "Testfenster" ausgeführt wird, egal wo sich das Fenster auf dem Bildschirm befindet?

Ich freue mich auf etwas Hilfe.


Mit freundlichem Gruß

Lostriga
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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