AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi QR Code mittels Fenster scannen
Thema durchsuchen
Ansicht
Themen-Optionen

QR Code mittels Fenster scannen

Ein Thema von stOrM · begonnen am 29. Dez 2019 · letzter Beitrag vom 30. Dez 2019
Antwort Antwort
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#1

QR Code mittels Fenster scannen

  Alt 29. Dez 2019, 09:47
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.
Miniaturansicht angehängter Grafiken
scanner.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von JanWe
JanWe

Registriert seit: 23. Mär 2015
Ort: NRW
78 Beiträge
 
Delphi 7 Personal
 
#2

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 00:55
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.
Jan
Allen demnächst ein gutes 2023!
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 06:06
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.

Geändert von stOrM (30. Dez 2019 um 06:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 06:10
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.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 06:32
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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 07:32
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: QR Code mittels Fenster scannen

  Alt 30. Dez 2019, 07:57
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:20 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