AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi aktuellen Cursor mit Delphi auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

aktuellen Cursor mit Delphi auslesen

Ein Thema von SentinelPH · begonnen am 15. Mai 2007 · letzter Beitrag vom 17. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
SentinelPH

Registriert seit: 15. Mai 2007
9 Beiträge
 
#1

aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 19:42
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 21:21
willst du den Dateinamen oder die Cursoranzeige?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SentinelPH

Registriert seit: 15. Mai 2007
9 Beiträge
 
#3

Re: aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 21:43
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

Besten Dank
Philipp
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 21:56
Hi!

An den Dateiname kommst du nicht ran.
Warum? Nun ja, weil man den Cursor per Code setzen kann. Quasi aus dem nichts (nil ) 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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
SentinelPH

Registriert seit: 15. Mai 2007
9 Beiträge
 
#5

Re: aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 22:35
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?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: aktuellen Cursor mit Delphi auslesen

  Alt 15. Mai 2007, 23:27
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:
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;
Ob das auch bei Videospielen funktioniert ist allerdings wieder eine andere Sache.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
SentinelPH

Registriert seit: 15. Mai 2007
9 Beiträge
 
#7

Re: aktuellen Cursor mit Delphi auslesen

  Alt 16. Mai 2007, 01:27
das hilft mir weiter

Danke!
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: aktuellen Cursor mit Delphi auslesen

  Alt 16. Mai 2007, 07:16
Zitat von bitsetter:
Du kannst dann ja mit 2 Bitmap arbeiten und beide jedesmal miteinander vergleichen. Wenn sie unterschiedlich sind, hat sich der Cursor geändert.
Eventuell reicht es bei dir schon das ico.Handle mit dem vorigem Handle zu vergleichen, das wäre noch einfacher. Das habe ich gerade mal ausprobiert, und es hat soweit funktioniert.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
SentinelPH

Registriert seit: 15. Mai 2007
9 Beiträge
 
#9

Re: aktuellen Cursor mit Delphi auslesen

  Alt 16. Mai 2007, 17:56
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:
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;
//Inkompatible Typen: 'HICON' und 'procedure, untyped pointer or untyped parameter'
...
Habe leider keine Ahnung von Handle und co - bastel damit so rum ohne es richtig zu verstehen

Gruß Philipp
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: aktuellen Cursor mit Delphi auslesen

  Alt 16. Mai 2007, 22:56
Zitat von SentinelPH:
//Inkompatible Typen: 'HICON' und 'procedure, untyped pointer or untyped parameter'
An welcher Stelle kommt denn die Fehlermeldung, habe den Code mal getestet aber bei mir kam so eine Meldung nicht.

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;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:30 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