![]() |
aktuellen Cursor mit Delphi auslesen
Hi zusammen,
bin nicht sicher ob ich in der Richtigen Rubrik bin - wenn nicht tuts mir leid. Ich möchte ein Programm schreiben welches im Hintergrund mitläuft und in bestimmten Abständen prüft welcher Cursor gerade geladen ist. Kann man den Dateinamen der derzeit verwendeten Cursor-Datei (.ani/.cur/...) auslesen (egal ob gerade mit Windows, einem Spiel oder Photoshop gearbeitet wird)? Würde mich über Hilfe sehr freuen! MfG Philipp PS: nutze Delphi5Enterprise |
Re: aktuellen Cursor mit Delphi auslesen
willst du den Dateinamen oder die Cursoranzeige?
|
Re: aktuellen Cursor mit Delphi auslesen
Ich weiß nicht recht was du mit Cursoranzeige meinst.
Ich möchte den Dateinamen des aktuell geladenen Cursors. Der Standard von Windows ist z.B. arrow_m.cur wenn ich nicht irre. Wenn ich also gerade in Windows auf dem Desktop bin möchte ich "arrow_m.cur" oder eben "C:\WINDOWS\Cursors\arrow_m.cur" auslesen. Hoffe das war jetzt verständlich :gruebel: Besten Dank Philipp |
Re: aktuellen Cursor mit Delphi auslesen
Hi!
An den Dateiname kommst du nicht ran. :( Warum? Nun ja, weil man den Cursor per Code setzen kann. Quasi aus dem nichts (nil :-D) Dadurch basiert er nicht mehr auf einer Datei und man wird vergeblich versuchen eine entsprechende zu finden. Aber wenn du uns verrätst was du mit der Datei machen willst, können wir dir vielleicht helfen. |
Re: aktuellen Cursor mit Delphi auslesen
Ich will im Endeffekt auch nicht den Dateinamen sondern nur vergleichen können ob er sich verändert.
Gibt es eine Möglichkeit das mit zu bekommen? |
Re: aktuellen Cursor mit Delphi auslesen
Moin,
mit dem Code kannst du den aktuellen Cursor auslesen, das ging zumindest bei mir unter WinXP und unter Win98. Du kannst dann ja mit 2 Bitmap arbeiten und beide jedesmal miteinander vergleichen. Wenn sie unterschiedlich sind, hat sich der Cursor geändert. Das wäre zumindest eine Möglichkeit.
Delphi-Quellcode:
Ob das auch bei Videospielen funktioniert ist allerdings wieder eine andere Sache.
procedure TForm1.Timer1Timer(Sender: TObject);
var ico: TIcon; ThreadID, CurrThrId: cardinal; begin ico:= TIcon.Create; try ThreadID := GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos), nil); CurrThrId := GetCurrentThreadId; if ThreadID <> CurrThrId then begin if AttachThreadInput(ThreadID, CurrThrId, true) then begin ico.Handle := GetCursor; AttachThreadInput(ThreadID, CurrThrId, false); end; end else ico.Handle := GetCursor; Image1.Picture.Bitmap.Width := ico.Width; Image1.Picture.Bitmap.Height := ico.Height; Image1.Picture.Bitmap.Canvas.Pen.Color := Image1.Picture.Bitmap.Canvas.Brush.Color; Image1.Picture.Bitmap.Canvas.Rectangle(0, 0, ico.Width, ico.Height); Image1.Picture.Bitmap.Canvas.Draw(0, 0, ico); finally ico.Free; end; end; |
Re: aktuellen Cursor mit Delphi auslesen
das hilft mir weiter :-D
Danke! |
Re: aktuellen Cursor mit Delphi auslesen
Zitat:
Delphi-Quellcode:
mit dem vorigem Handle zu vergleichen, das wäre noch einfacher. Das habe ich gerade mal ausprobiert, und es hat soweit funktioniert.
ico.Handle
|
Re: aktuellen Cursor mit Delphi auslesen
Klingt gut - das ist sicher die "sauberere" Variante als jedes Pixel zu vergleichen (auch wenn auch das klapp^^).
Wie würde das dann aussehen? Warum läuft das nur in Proceduren von Objekten - dachte mir das eher so...:
Delphi-Quellcode:
//Inkompatible Typen: 'HICON' und 'procedure, untyped pointer or untyped parameter'
var icon_alt : TIcon;
procedure TfrmXYZ.FormCreate(Sender: TObject); begin ico_alt := TIcon.Create; end; function verglCursor : boolean; var icon_neu : TIcon; var ThreadID : cardinal; begin ico_neu := TIcon.Create; try ThreadID := GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos), nil); if ThreadID <> GetCurrentThreadId then begin if AttachThreadInput(ThreadID, GetCurrentThreadId, true) then begin icon_neu.Handle := GetCursor; AttachThreadInput(ThreadID, GetCurrentThreadId, false); end; end else icon_neu.Handle := GetCursor; if icon_alt.Handle = icon_neu.Handle then result := true else result := false; icon_alt := icon_neu; finally icon_neu.Free; end; end; ... Habe leider keine Ahnung von Handle und co - bastel damit so rum ohne es richtig zu verstehen :oops: Gruß Philipp |
Re: aktuellen Cursor mit Delphi auslesen
Zitat:
So ging es bei mir:
Delphi-Quellcode:
var
icon_alt : TIcon; procedure TForm1.FormCreate(Sender: TObject); begin icon_alt := TIcon.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin icon_alt.Free; end; function verglCursor : boolean; var icon_neu : TIcon; ThreadID : cardinal; begin icon_neu := TIcon.Create; try ThreadID := GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos), nil); if ThreadID <> GetCurrentThreadId then begin if AttachThreadInput(ThreadID, GetCurrentThreadId, true) then begin icon_neu.Handle := GetCursor; AttachThreadInput(ThreadID, GetCurrentThreadId, false); end; end else icon_neu.Handle := GetCursor; result := icon_alt.Handle = icon_neu.Handle; icon_alt.Handle := icon_neu.Handle; finally icon_neu.Free; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if not verglCursor then beep; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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-2025 by Thomas Breitkreuz