AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pixelabfrage bei (dx)Spiel

Ein Thema von d3pp · begonnen am 31. Mai 2012 · letzter Beitrag vom 1. Jun 2012
 
d3pp

Registriert seit: 31. Mai 2012
2 Beiträge
 
#1

Pixelabfrage bei (dx)Spiel

  Alt 31. Mai 2012, 03:10
Hallo,

ich versuche mich schon einige Zeit an folgender Aufgabe:
Ich möchte eine Pixelabfrage in einem Spiel (dx?) machen. Über die Pixelabfrage les ich eine Zahl aus, die ich dann in eine Listbox packe.
Dieses Spiel kann man mit der Einstellung "full windowed", "windowed" und "fullscreen" starten.

Bei "fullscreen" funktioniert getpixel etc nicht, müsste da wohl hooken... selbst Screenshot mittels Print-taste klappt nicht. Also wohl dx overlay etc...
"Windowed" fällt als Option weg, da das Fenster dann skaliert ist.

Bleibt die Option "full windowed". Dort kann ich über den Umweg
Delphi-Quellcode:
Keybd_Event(VK_SNAPSHOT,0,0,0);
sleep(250);
keybd_event(VK_SNAPSHOT , 0, KEYEVENTF_KEYUP, 0);
einen Screenshot anfertigen und dann die Pixel auslesen. Soweit zumindest die Halbtheorie.

Das klappt nicht so richtig.
1. wirft "Clipboard" häufiger mal ne Exception und 2. klappt das Auslesen nur wenn
a) das Fenster meiner Anwendung aktiv ist und
b) wenn ich die Prozedur per Button aufrufe.

a) wäre nicht das Problem, kann es mit SetForegroundWindow(application.Handle); ja nach vorne holen.
Allerdings klappt es dann trotzdem erst, wenn die aktuelle Prozedur zuende ist und ich dann die Abfrage nochmal manuell per Buttonklick starte.

Hier mal die wohl entscheidenen Codeblöcke:

Screenshot
Delphi-Quellcode:
procedure Screenshot();
begin
Keybd_Event(VK_SNAPSHOT,0,0,0);
sleep(250);
keybd_event(VK_SNAPSHOT , 0, KEYEVENTF_KEYUP, 0);
end;
Prozedur zum Pixelabfragen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var k: integer; // Schleifenindex Ziffern
var clip: TClipboard;
begin
zahl:='';
clip:=TClipboard.Create;
clip.Open;
Screenshot();
mybitmap:=tBitmap.Create;
MyBitmap.PixelFormat:= pf24Bit;
  try if Clip.HasFormat(CF_BITMAP) then begin mybitmap.LoadFromClipboardFormat(CF_BITMAP,clip.GetAsHandle(CF_BITMAP),0); end else begin form1.ListBox2.Items.add('NICHT BITMAP'); end;
clip.Close;
clip.Clear;
clip.free;

......// Zahlerkennung

Listbox1.Items.Add(zahl);
mybitmap.Destroy;

    except on E:Exception
    do begin
    exit;
    end;
   end;
end;
Diese Prozedur zur Zahlerkennung wird im Hauptcode wie folgt aufgerufen:
Delphi-Quellcode:
....
// Merkmal auslesen
 form1.SetFocus;
 SetForegroundWindow(application.Handle);
sleep(500);
form1.Button1Click(Form1.Button1);
sleep(350);
form1.Button1Click(Form1.Button1);
sleep(350);
....
Dabei bekomm ich stets ausgegeben, wenn ich nicht manuell nachmal Button2click ausführe, dass wohl das Clipboard leer ist/ oder kein Bitmap enthält.


Wo liegt hier ein Fehler begraben?

Danke!
  Mit Zitat antworten Zitat
 


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 08:33 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