Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi QR Code mittels Fenster scannen (https://www.delphipraxis.net/202956-qr-code-mittels-fenster-scannen.html)

stOrM 29. Dez 2019 08:47

QR Code mittels Fenster scannen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
ich bin gerade über etwas gestolpert was ich gerne aus Neugier einfach einmal nachbilden wollte nur erschließt sich mir z.Z. noch nicht die Technik dahinter.

Wer schon mal 1Passwort (sollte glaube ich aber auch mit Enpass oder anderen Paßwortmanagern analog funktionieren) gestolpert ist, der hat eventuell schon mal die Funktion zum scannen der QR Codes für OTP's genutzt.

Das decodieren des QR Codes stellt soweit kein Problem da, allerdings das einscannen so wie es in oben genannten Programmen gemacht wird.

Zur Erläuterung:
Man hat ein Fenster (siehe Bildschirmschuß im Anhang) welches man über den QR Code bewegt, sofern dieser gelesen bzw. gescannt wurde, wird der kleine Rahmen in der Mitte des Fensters grün (vorher blau) quasi als visueller Indikator.

Jetzt frage ich mich wie das gemacht wurde. Ich hatte überlegt, dass solange man das Fenster bewegt, immer wieder Screenshots macht und man versucht die erhaltenen Bitmaps zu decodieren, solange kein Text als Ergebnis zurückkommt, war der Scanvorgang erfolglos? Aber irgendwie scheint mir der Ansatz falsch zu sein.

Vor allem bin ich mir nicht sicher ob man einen Screenshot von dem Bereich unter dem eigenen Fenster in Windows machen kann.

Bin gespannt was Ihr dazu sagt.

JanWe 29. Dez 2019 23:55

AW: QR Code mittels Fenster scannen
 
Du mußt je Scan/Bild feststellen, ob die 3 Positions-Eckpunkte im Bild auftauchen. Und dann, in welcher Reihenfolge = das ergibt dann die Orientierung (der kann ja auch schon mal auf dem Kopf oder 90° rotiert sein.)
Dann weißt Du, wie Du die einzelen Quadrate in der Reihenfolge auslesen mußt.

stOrM 30. Dez 2019 05:06

AW: QR Code mittels Fenster scannen
 
Zitat:

Zitat von JanWe (Beitrag 1454087)
Du mußt je Scan/Bild feststellen, ob die 3 Positions-Eckpunkte im Bild auftauchen. Und dann, in welcher Reihenfolge = das ergibt dann die Orientierung (der kann ja auch schon mal auf dem Kopf oder 90° rotiert sein.)
Dann weißt Du, wie Du die einzelen Quadrate in der Reihenfolge auslesen mußt.

Ok,
nur bleibt dann trotzdem noch zu klären wie wie es überhaupt zu Scanvorgang kommt?
Nochmals zur Erklärung wie die Vorgehensweise ist, die ich gesehen habe, dass Fenster im Anhang wird über den QR Code gezogen wenn dieser sich in der graphischen Begrenzung auf dem Fenster befindet und er erfolgreich erkannt wurde werden die Ecken grün auf dem Fenster, Wenn ich das richtig verstanden habe beschreibst Du den Scanvorgang, die Frage ist aber wie kommt man an den QR Code der sich unter dem Fenster befindet um daraus ein lesbares Bitmap zu machen.
Was Rotationen betrifft (sicherlich richtig) denke ich aber nicht das ich davon betroffen bin, die Codes die damit eingescannt würden sind schon in der richtigen Position vorhanden.

jaenicke 30. Dez 2019 05:10

AW: QR Code mittels Fenster scannen
 
Die absolut simpelste Variante für die Darstellung:
Pack ein paar Shapes auf das Formular, so dass sie so aussehen wie du die Markierungen gerne hättest. Stell die Farbe auf blau.
Dann setze TransparentColor auf True und TransparentColorValue auf clBtnFace.
Fertig ;-)

Dann kommst du auch problemlos an die Ansicht des QR-Codes, denn der wird ja nicht verdeckt. (Nebenbei wäre das Verdecken seit Windows Vista auch kein Problem mehr. Da kommt man trotzdem an den Fensterinhalt.)

stOrM 30. Dez 2019 05:32

AW: QR Code mittels Fenster scannen
 
Zitat:

Zitat von jaenicke (Beitrag 1454089)
Die absolut simpelste Variante für die Darstellung:
Pack ein paar Shapes auf das Formular, so dass sie so aussehen wie du die Markierungen gerne hättest. Stell die Farbe auf blau.
Dann setze TransparentColor auf True und TransparentColorValue auf clBtnFace.
Fertig ;-)

Dann kommst du auch problemlos an die Ansicht des QR-Codes, denn der wird ja nicht verdeckt. (Nebenbei wäre das Verdecken seit Windows Vista auch kein Problem mehr. Da kommt man trotzdem an den Fensterinhalt.)

Joa gut mit den Shapes sicherlich eine clevere schnelle Lösung notfalls würde ich das auch selber zeichnen.
Das wußte ich zB. gar nicht (Nebenbei wäre das Verdecken seit Windows Vista auch kein Problem mehr. Da kommt man trotzdem an den Fensterinhalt.) gibt es dazu eine spezielle API?

jaenicke 30. Dez 2019 06:32

AW: QR Code mittels Fenster scannen
 
Zitat:

Zitat von stOrM (Beitrag 1454090)
Das wußte ich zB. gar nicht (Nebenbei wäre das Verdecken seit Windows Vista auch kein Problem mehr. Da kommt man trotzdem an den Fensterinhalt.) gibt es dazu eine spezielle API?

Unter Windows XP wurde einfach immer wieder ein Zeichenbefehl aufgerufen und das Überlappen softwareseitig berechnet. Seit Vista werden einfach die kompletten Fensterinhalte an die Grafikkarte geschickt und diese berechnet die Überlappungen. Deshalb wird seitdem bei nicht reagierenden Programmen der Fensterinhalt auch nicht mehr weiß angezeigt, sondern ausgegraut: Weil Windows den Fensterinhalt trotzdem noch hat.

Wenn du dir den DC des Fensters holst, solltest du den Inhalt mit BitBlt kopieren können, auch wenn das Fenster verdeckt ist.

stOrM 30. Dez 2019 06:57

AW: QR Code mittels Fenster scannen
 
Zitat:

Zitat von jaenicke (Beitrag 1454091)
Zitat:

Zitat von stOrM (Beitrag 1454090)
Das wußte ich zB. gar nicht (Nebenbei wäre das Verdecken seit Windows Vista auch kein Problem mehr. Da kommt man trotzdem an den Fensterinhalt.) gibt es dazu eine spezielle API?

Unter Windows XP wurde einfach immer wieder ein Zeichenbefehl aufgerufen und das Überlappen softwareseitig berechnet. Seit Vista werden einfach die kompletten Fensterinhalte an die Grafikkarte geschickt und diese berechnet die Überlappungen. Deshalb wird seitdem bei nicht reagierenden Programmen der Fensterinhalt auch nicht mehr weiß angezeigt, sondern ausgegraut: Weil Windows den Fensterinhalt trotzdem noch hat.

Wenn du dir den DC des Fensters holst, solltest du den Inhalt mit BitBlt kopieren können, auch wenn das Fenster verdeckt ist.

Interessante Infos, danke Dir ich sehe mir das mal an.:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 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