AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi ..und noch ein: Maus windowsweit fernsteuern...

..und noch ein: Maus windowsweit fernsteuern...

Ein Thema von erich.wanker · begonnen am 18. Sep 2009 · letzter Beitrag vom 19. Sep 2009
Antwort Antwort
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
460 Beiträge
 
Delphi XE4 Professional
 
#1

..und noch ein: Maus windowsweit fernsteuern...

  Alt 18. Sep 2009, 17:30
Hallo Leute...
(leider bin ich durch die Forumsuchen nicht schlauer geworden)

ich hab mal eine Frage betreffend Maus-Klicks simulieren:
Wenn ich die Maus positionieren will, kann ich das via Mouse.Cursorpos
Wenn ich Klicks ausführen will, kann ich das via WindowMessages (wm_LButtonDown..)

Nur: Funktionieren tuts nicht so richtig...

Manche Fenster nehmen [ok] [Abbruch] nicht an.
(Was ich sehr komisch finde ist:
IE8/Extras/Internetoptionen funzt nicht
IE8/Favoriten/Zu Favoriten hinzufügen.. funktioniert
)

Excel reagiert komisch bei einem simulierten Linksklick in ein Feld
und nach einiger Zeit kommt ein StackOverflow im Delphi

Code:
Delphi-Quellcode:
// Linke Maustaste
procedure TForm1.BitBtn1Click(Sender: TObject);
var
CursorPos: TPoint;
WinHandle: HWND;
LongParam: Integer;
begin
GetCursorPos(CursorPos);
WinHandle := WindowFromPoint(CursorPos);
Windows.ScreenToClient(WinHandle, CursorPos);
LongParam := CursorPos.x + CursorPos.y shl 16;
SendMessage(WinHandle, WM_LBUTTONDOWN, 0, LongParam);
SendMessage(WinHandle, WM_LBUTTONUP, 0, LongParam);
{
Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

end;


// Rechte Maustaste
procedure TForm1.BitBtn2Click(Sender: TObject);
var
CursorPos: TPoint;
WinHandle: HWND;
LongParam: Integer;
begin
GetCursorPos(CursorPos);
WinHandle := WindowFromPoint(CursorPos);
Windows.ScreenToClient(WinHandle, CursorPos);
LongParam := CursorPos.x + CursorPos.y shl 16;
SendMessage(WinHandle, WM_RBUTTONDOWN, 0, LongParam);
SendMessage(WinHandle, WM_RBUTTONUP, 0, LongParam);
{
Mouse_Event(MOUSEEVENTF_RightDOWN, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_RightUP, 0, 0, 0, 0);
}

end;


// Doppelklick
procedure TForm1.BitBtn3Click(Sender: TObject);
var
CursorPos: TPoint;
WinHandle: HWND;
LongParam: Integer;
begin
GetCursorPos(CursorPos);
WinHandle := WindowFromPoint(CursorPos);
Windows.ScreenToClient(WinHandle, CursorPos);
LongParam := CursorPos.x + CursorPos.y shl 16;
SendMessage(WinHandle, WM_LBUTTONDOWN, 0, LongParam);
SendMessage(WinHandle, WM_LBUTTONDBLCLK, 0, LongParam);
SendMessage(WinHandle, WM_LBUTTONUP, 0, LongParam);
{
Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}

end;


P.S.: Ich starte die Proceduren in diesem Beispiel über einen Tastaturhook von LMD ..

Delphi-Quellcode:
procedure TForm1.LMDGlobalHotKey1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
bitbtn1.Click;
end;
kann mir einer sagen, wieso sich das so komisch verhält,
und wie ich das ganze lösen kann.

Sinn und Zweck der Übung:

Ich hab mir grad eine 3x2 Meter Rückprojektionsfläche gekauft, will mit dem Beamer eine Software drauf projezieren und via 2 Webcams (die nur einen kleinen "Sehschlitz" besitzen) ein "Ein-Finger-Eingabesystem" basteln, indem die beiden Videostreams analysiert werden und die Position eines Fingers berechnet wird .. und es scheitert schon am "Maus positionieren und klick ausführen"
Erich Wanker - for life:=1971 to lebensende do begin ..
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: ..und noch ein: Maus windowsweit fernsteuern...

  Alt 18. Sep 2009, 19:24
Rein aus Interesse: warum hast du die mouse_event dinger auskommentiert? Ich hätte es genau so (oder mit SendInput) gemacht
  Mit Zitat antworten Zitat
Benutzerbild von erich.wanker
erich.wanker

Registriert seit: 31. Jan 2008
Ort: im schönen Salzburger Land
460 Beiträge
 
Delphi XE4 Professional
 
#3

Re: ..und noch ein: Maus windowsweit fernsteuern...

  Alt 19. Sep 2009, 10:27
Hi,

"die mouse_event dinger " - funktionieren noch schlechter in Word, Excel und IExplorer als die Sendmessage-Nachrichten.

Komischerweise reagiert z.B.: Excel bei manchen Popups ganz normal, manche klappen auf, nehmen aber dann keinen linksklick auf ein Item an .. lauter so Sachen ..
Wenn man ein Feld "anklicken läßt" - und ein Zellhaufen ist bereits markiert, ist die Reaktion von Excel wieder anders, als wenn nix markiert ist..
Erich Wanker - for life:=1971 to lebensende do begin ..
  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 06:37 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