AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Klick auf aktives Fenster landet woanders
Thema durchsuchen
Ansicht
Themen-Optionen

Klick auf aktives Fenster landet woanders

Ein Thema von The Riddler · begonnen am 19. Okt 2008 · letzter Beitrag vom 19. Okt 2008
Antwort Antwort
The Riddler
(Gast)

n/a Beiträge
 
#1

Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 00:33
Ganz einfach soll auf dem aktiven Fenster ein Button angeklickt werden (der Button liegt bei 2,2 also links oben). Mein Code funktioniert soweit, dass Handle stimmt und auch in Rec stehen die richtigen Werte des aktiven Fensters. Nur leider, landet der Klick nicht auf dem Button, sondern bei Koordinaten 3,3 auf dem gesamten Bildschirm. Nicht mal in der Nähe des aktiven Fensters also. Was mach ich falsch?

Delphi-Quellcode:
function GetSysFocus : HWND;
var
  ThreadID, CurrThrId: cardinal;
begin
  Result := 0;
  ThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
  CurrThrId := GetCurrentThreadId;
  if ThreadID <> CurrThrId then
  begin
    if AttachThreadInput(ThreadID, CurrThrId, true) then
    begin
      Result := GetFocus;
      AttachThreadInput(ThreadID, CurrThrId, false);
    end;
  end
  else
    Result := GetFocus;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  wnd: THandle;
  Rec: TRect;
begin
  wnd := GetSysFocus;
  GetWindowRect(wnd, Rec);
  showmessage(inttostr(rec.Left));

mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_ABSOLUTE,Rec.Left+3,Rec.Top+3,0,0);
mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTUP Or MOUSEEVENTF_ABSOLUTE,Rec.Left+3,Rec.Top+3,0,0);
end;
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 00:56
Welchen Wert spuckt denn deine MessageBox bei Rec.Left aus?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#3

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 00:58
Hat sich erledigt.

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  wnd: THandle;
  Rec: TRect;
begin
  wnd := GetForegroundWindow;
  GetWindowRect(wnd, Rec);
  showmessage(inttostr(rec.Left+3) + ' x ' + inttostr(rec.top+3));
  SetCursorPos(rec.Left+30, rec.top+30);

  mouse_event(MOUSEEVENTF_LEFTDOWN,rec.Left+3, rec.top+3,0,0);
  mouse_event(MOUSEEVENTF_LEFTUP,rec.Left+3, rec.top+3,0,0);
end;
Zitat:
Da ist das Problem: If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface, (65535,65535) maps onto the lower-right corner.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 00:59
Hehe, fein, dann mal gute Nacht!
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#5

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 01:04
Danke trotzdem!

Ich wäre nicht der Riddler, wenn ich nicht als Dank ein Rätsel für dich hätte!

Zitat:
Ich habe Milliarden Augen, und lebe doch in der Dunkelheit. Ich habe Milliarden Ohren, doch nur zwei Lappen. Ich habe keine Muskeln, bin aber trotzdem der Herrscher über zwei halbkugeln! Was bin ich?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 05:31
Hallo, besser ist es, mittels PostMessage() einen Klick zu senden.
Thomas
  Mit Zitat antworten Zitat
The Riddler
(Gast)

n/a Beiträge
 
#7

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 09:20
Hallo, warum?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Klick auf aktives Fenster landet woanders

  Alt 19. Okt 2008, 09:42
Zitat von The Riddler:
Hallo, warum?
Da man mit PostMessage() eine Nachricht direkt an ein Handle senden kann.
Das ist eine sicherere Methode, da nicht auf die Position des Control geachtet werden muss.
(verschiedene Bildschirmauflösungen könnten auch Schwierigkeiten bereiten)

Ein Vorteil ist auch, dass sich das Fenster mit dem Control nicht unbedingt im Vordergrund befinden muss.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:29 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