Was die Monitore angeht, da kann ich nicht helfen ... hab ja nur einen Monitor ;(
Allerdings ist dieses ja schon 'ne neue Frage ... also in 'nem eigenem/neuen Thread nochmals nachfragen ... falls die Suche nicht schon irgendwo was dazu ausspuckt ^^
Ich denk mal mit
Screen.MonitorFromWindow(Form1) sollte es gehn.
Man könnte ja auch mal prüfen welchen Monitor man direkt über Screen (nicht Screen.Monitors) bekommt?
Bei 2 Monitoren könnte es vermutlich aber auch schon ausreichen, wenn du den (sekundären) Monitor suchst.
If not Screen.Monitors[...].Primary Then ...
Der "normale" Monitort wird ja bestimmt als Primärer eingerichtet sein.
@Luckie:
Hmm, ich hätt jetzt zwar gedacht, daß es da auch so ist, da sich ja anscheinend Windows um das Freigeben kümmert ... schließlich wird doch nichts für's Freigeben im Programm registriert, aber
Erstmal zu SirThornberry's "Strg + Alt + Entf"-Thease:
anscheinend kommt es wohl nicht (unbedingt) auf's Drücken von "Strg + Alt + Entf" an, sondern der WindowsTaskManager gibt den Bereich immer frei, wenn er den Eingabefokus bekommt.
Daher kann man das mit diesem TaskManager nicht versuchen.
Also ein Versuch mit'm Process Explorer, welcher nicht von sich aus den Bereich freigibt.
Und da war es genauso, sobald der Versuchsprozess abgeschoßen wurde war auch der Mauszeiger wieder frei.
In der Konsole scheint es genauso, nur daß dort auch so schon recht schnell der Bereich wieder freigegeben wird ... z.B. auch dann wenn die Konsole "nur" den Eingabefokus zurückbekommt.
Auf WinXP getestet.
QuellCode zu den Anhängen:
Delphi-Quellcode:
// Project1
Procedure TForm1.Button1Click(Sender: TObject); // einsperren
Var Maus: TRect;
Begin
Maus.Left := Left;
Maus.Top := Top;
Maus.Right := Left + Width;
Maus.Bottom := Top + Height;
ClipCursor(@Maus);
End;
Procedure TForm1.Button2Click(Sender: TObject); // freigeben
Begin
ClipCursor(nil);
End;
Delphi-Quellcode:
Program Project2;
{$APPTYPE CONSOLE}
Uses Windows;
Var Maus: TRect;
Begin
Maus.Left := 100;
Maus.Top := 100;
Maus.Right := 500;
Maus.Bottom := 400;
ClipCursor(@Maus);
ReadLn;
WriteLn('end');
End.