ERLEDIGT:Mausbewegung abfragen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

ERLEDIGT:Mausbewegung abfragen

Beitrag von ts230 »

Hallo,
ich wollte ein Programm machen,welches ein anderes Programm ausführt.
Aber es soll nur dann Passieren,wenn Man 5 Minuten Lang die Maus nicht bewegt hat.
Aber das Programm soll nur im Hintergrund laufen.
Das heist:
irgendwie muss das Programm auf eine Mausbewegung lauschen.

Bitte helft mir!
Zuletzt geändert von ts230 am So 11. Jan 2009, 19:47, insgesamt 1-mal geändert.

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

Benutzeravatar
theo
Beiträge: 10950
Registriert: Mo 11. Sep 2006, 19:01

Re: Mausbewegung abfragen

Beitrag von theo »

Das ist afaik nicht einfach und nur für jede Plattform separat zu lösen. MouseHook oder so.
Da musst du wahrscheinlich das API der Zielplattform studieren.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von monta »

Wenn deine eigene Anwendung kein Sichtbaes Fenster hat, brauchst du nen Hook, wie theo schon sagt.

Es ist nicht wahnsinnig schwer, zumindest unter Windows aber man muss sich etwas damit beschäftigen. Ich empfehle dir da folgendes Tutorial, falls du unter windows arbeitest:
http://www.michael-puff.de/Developer/De ... torial.pdf" onclick="window.open(this.href);return false;
Johannes

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Mausbewegung abfragen

Beitrag von Garfield »

ts230 hat geschrieben:Das heist:
irgendwie muss das Programm auf eine Mausbewegung lauschen.
Man könnte periodisch kontrollieren, ob sich die Position des Cursors geändert hat. (Screen.Cursor.Position)

Sonst eventuell etwas in diese Richtung: http://www.delphi-forum.de/topic_Mausbe ... 85794.html" onclick="window.open(this.href);return false; oder http://www.bome.com/delphi/watch/" onclick="window.open(this.href);return false;
Gruß Garfield

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Mausbewegung abfragen

Beitrag von creed steiger »

Gabs da nicht eine Unit mouse beim FPC?

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Mausbewegung abfragen

Beitrag von Garfield »

Ja und da gibt es LastHandlerMouseEvent : TMouseEvent;
Gruß Garfield

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von ts230 »

Gut.
Ich werd mal schaun was ich machen kann.
Wenn es geht,poste ich es hier.

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von ts230 »

Ich habe es so gemacht:

Code: Alles auswählen

 
procedure TForm1.Timer2Timer(Sender: TObject);
VAR
ex:TProcess;
begin
 
 if mp = Mouse.GetMouseX + Mouse.GetMouseY then
 begin
  if momo = 300 then
  begin
  ex:=TProcess.Create(Form1);
ex.CommandLine:='"'+ini.ReadString('load','file','')+'"';
  Timer1.Enabled:=false;
  ex.Execute;
    ini.Free;
    close;
  end;
  momo:=momo + 1;
 mp:=Mouse.GetMouseX + Mouse.GetMouseY;
 end
 else
 begin
 momo:=0;
 mp:=Mouse.GetMouseX + Mouse.GetMouseY;
 end;
end;         
 
Dieser Timer checkt jede Sekunde nach,ob die Maus bewegt wurde.
Und wenn das 300 Sekunden lang der Fall war das nichts bewegt wurde,
startet das Programm.
Schaut bitte mal durch.

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von ts230 »

Ok,
ich hab jetzt rausgefunden dass die Variable mp immer 0 ist :? :?
Ich hab jetzt ausgetestet,
und

Code: Alles auswählen

Mouse.DetectMouse
ist irgendwie 0.
Ich mach ja auch im onCreate Ereigniss

Code: Alles auswählen

Mouse.InitMouse();
Bitte helft mir!

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

Benutzeravatar
theo
Beiträge: 10950
Registriert: Mo 11. Sep 2006, 19:01

Re: Mausbewegung abfragen

Beitrag von theo »

Ich kenn mich damit nicht aus, aber ist die unit mouse nicht für textmode Anwendungen gedacht?
Würde mich echt wundern, wenn man damit an Windows oder X vorbeimäuseln könnte.

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Mausbewegung abfragen

Beitrag von Garfield »

Versuch es mal damit:

Code: Alles auswählen

var
  tp : TPoint;
...
GetCursorPos(tp);
Ich weiß allerdings nicht, in welcher Unit die function deklariert ist. Ergebnistyp ist Boolean.

Code: Alles auswählen

function GetCursorPos; external user32 name 'GetCursorPos';
Gruß Garfield

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von monta »

http://www.libsearch.lazarusforum.de/se ... s&search=1" onclick="window.open(this.href);return false;
Johannes

ts230
Beiträge: 109
Registriert: Sa 20. Dez 2008, 20:42
OS, Lazarus, FPC: Linux (L 0.9.24)
CPU-Target: 32Bit
Wohnort: San Jose,CA
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von ts230 »

Ich habs jetzt mit

Code: Alles auswählen

tp:=TMouse.CursorPos;
probiert krige aber Folgenden Fehler:
ERROR:Only class methods can be refered with class references
FATAL:There were 1 Errors compiling module,stopping

Code: Alles auswählen

 If beitragHilfreich then leseitdurch()else volle_ignoranz();
tiersendung.funpic.de

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mausbewegung abfragen

Beitrag von Euklid »

ts230 hat geschrieben:Ich habs jetzt mit

Code: Alles auswählen

 
tp:=TMouse.CursorPos; 
 
Hallo ts,

kann es sein, dass du dich bisher noch nicht sonderlich oft mit objektorientierter Programmierung beschäftigt hast? Bei dem obigen Codefetzen habe ich nämlich das Gefühl.
Das solltest du unbedingt nachholen, ansonsten kommst du mit der Programmierung wirklich nicht weit! Schau dir bitte mal das hier an:

http://www.delphi-treff.de/sprachen/obj ... entierung/" onclick="window.open(this.href);return false;
http://www.delphi-treff.de/sprachen/obj ... truktoren/" onclick="window.open(this.href);return false;
http://www.delphi-treff.de/sprachen/obj ... f-objekte/" onclick="window.open(this.href);return false;

Dann weißt du, wie du mit der Klasse TMouse umgehen musst - und allgemein wie man mit Objekten und Klassen umgeht und wirst von den von dir beschriebenen Problemen befreit sein. Es hilft dir selbst also am meisten weiter, wenn du dich da mal einließt. Ich vertraue einfach mal darauf, dass du das machst.

Habe dir hier Musterlösungen zur Bestimmung der Mausposition erstellt:

1. Mausposition über TMaus:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var Maus:TMouse;
    P:TPoint;
begin
  Maus := TMouse.Create;
  P:= Maus.CursorPos;
  Form1.Caption:=IntToStr(P.X) + ' : ' + IntToStr(P.Y);
  Maus.Free;
end;
2. Mausposition über Vorschlag von Garfield:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var P:TPoint;
begin
  GetCursorPos(P);
  Form1.Caption:=IntToStr(P.X) + ' : ' + IntToStr(P.Y);
end;
Beide Methoden sind getestet und funktionieren.

Im ersteren Fall musst du im uses-Bereich die unit controls, im zweiten Fall die unit lclintf hinzufügen. Wie bekommt man raus, welche unit man in den uses-Bereich einfügen muss? Durch die geniale Libsearch von monta:

http://libsearch.lazarusforum.de" onclick="window.open(this.href);return false;

Wichtiger als das Wissen über die Handhabung von Lazarus ist das Wissen darüber, wie man Wissen erwirbt.

In diesem Sinne

Euklid

Benutzeravatar
Garfield
Beiträge: 173
Registriert: Do 5. Jun 2008, 22:07
OS, Lazarus, FPC: Ubuntu 22.04 LTS (Laz 3.0 FPC3.2.2)
CPU-Target: 64Bit
Wohnort: Aken

Re: Mausbewegung abfragen

Beitrag von Garfield »

Jetzt habe ich es mal ausprobiert.
Dateianhänge
Mausposition.7z
(2.31 KiB) 130-mal heruntergeladen
Gruß Garfield

Antworten