{"id":408,"date":"2019-01-07T08:46:19","date_gmt":"2019-01-07T07:46:19","guid":{"rendered":"http:\/\/www.acidpool.at\/005_wordpress\/?p=408"},"modified":"2019-05-07T17:54:02","modified_gmt":"2019-05-07T15:54:02","slug":"_screenclick","status":"publish","type":"post","link":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/2019\/01\/07\/_screenclick\/","title":{"rendered":"_SCREENCLICK"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1004\" height=\"288\" src=\"http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2019\/01\/screenclickheader.jpg\" alt=\"\" class=\"wp-image-410\" srcset=\"http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2019\/01\/screenclickheader.jpg 1004w, http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2019\/01\/screenclickheader-300x86.jpg 300w, http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2019\/01\/screenclickheader-768x220.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n<p>Gestern habe ich beim gelangweilten st\u00f6bern im QB64.org-Forum ein Projekt gefunden das (zumindest in der Anfangsphase, weiter habe ich nicht gelesen) wie der SpriteXtractor nur vorgegebene Maus- und Tastatureingaben abspult. Dazu verwendet es den Befehl _SCREENCLICK.<\/p>\n<p>Ich wu\u00dfte doch das so ein Befehl exisitert.<\/p>\n<p>Mit _SCREENPRINT h\u00e4tte ich in dem selben Wikieintrag auch die Tatstatureingabe entdeckt.<br \/><a href=\"http:\/\/qb64.org\/wiki\/SCREENCLICK\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/qb64.org\/wiki\/SCREENCLICK<\/a><br \/><a href=\"http:\/\/qb64.org\/wiki\/SCREENPRINT\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/qb64.org\/wiki\/SCREENPRINT<\/a><\/p>\n<p>THEORETISCH m\u00fc\u00dfte ich jetzt die von mir angewandte umst\u00e4ndliche Version aus meinem Code gegen die neu gefundenen bereits in QB64 implementierten Versionen austauschen. So wegen potentiellen Geschwindigkeitsgewinn, Umst\u00e4ndlichkeit und bla.<\/p>\n<p>Da meine Probleme aber ganz wo anders liegen, lasse ich das aber jetzt so. Es funktioniert und ist in der verbleibenden Anwendung nicht komplizierter als die interne Version.<\/p>\n<p>Der Eintrag zu _SCREENPRINT hat indes einen interessantes Beispiel:<br \/><code>DEFLNG A-Z<br \/>\nSCREEN _NEWIMAGE(640, 480, 32)<br \/>\nPRINT \"OPENing and MAXIMIZING Notepad in 5 seconds...\"; : _DELAY 5<br \/>\nSHELL _DONTWAIT \"START \/MAX NotePad.exe\" 'opens Notepad file \"untitled.txt\"<br \/>\n'detect notepad open and maximized 'condition: 80% or more of the screen is white<br \/>\nDO 'read the desktop screen image for maximized window<br \/>\ns = _SCREENIMAGE<br \/>\n_SOURCE s<br \/>\nz = 0<br \/>\nFOR y = 0 TO _HEIGHT(s) - 1 'scan for large white area<br \/>\nFOR x = 0 TO _WIDTH(s) - 1<br \/>\nc = POINT(x, y)<br \/>\nIF c = _RGB32(255, 255, 255) THEN z = z + 1<br \/>\nNEXT<br \/>\nNEXT<br \/>\nIF z \/ (_HEIGHT(s) * _WIDTH(s)) &gt; 0.8 THEN EXIT DO 'when 80% of screen is white<br \/>\n_FREEIMAGE s 'free desktop image<br \/>\n_LIMIT 1 'scans 1 loop per second<br \/>\nPRINT \".\";<br \/>\nLOOP<br \/>\nPRINT<br \/>\nPRINT \"NOTEPAD detected as OPEN and MAXIMIZED\" <\/code><\/p>\n<p><code><br \/>\n<\/code><code>_SCREENPRINT \"HELLO WORLD\"<br \/>\nSLEEP 2<br \/>\n_SCREENPRINT CHR$(8) + CHR$(8) + CHR$(8) + CHR$(8) + CHR$(8) 'backspace 5 characters<br \/>\nSLEEP 3<br \/>\n_SCREENPRINT \"QB64!\"<br \/>\nSLEEP 2<br \/>\n_SCREENPRINT CHR$(1) 'CTRL + A select all<br \/>\nSLEEP 2<br \/>\n_SCREENPRINT CHR$(3) 'CTRL + C copy to clipboard<br \/>\nSLEEP 2<br \/>\nPRINT _CLIPBOARD$<br \/>\n_CLIPBOARD$ = \"QB64 ROCKS!\"<br \/>\nSLEEP 2<br \/>\n_SCREENPRINT CHR$(22) 'CTRL + V paste from clipboard<br \/>\nEND<\/code><\/p>\n<p>Der Teil der mich so besonders anspricht ist der in dem kontrolliert wird ob 80% des Bildschirms wei\u00df sind. In meinem SpriteXtractor pr\u00fcfe ich ja nur einzelne Pixel, aber hier wird ein ganzer Bereich herangenommen.<\/p>\n<p>Der Code geht H\u00f6he x Breite alle Pixel ab und z\u00e4hlt alle deren _RGB32-Wert wei\u00df ist zusammen. Dann wird diese Summe (z) durch die Gesamtanzahl der gepr\u00fcften Pixel (=H\u00f6he*Breite) dividiert und sollte das Ergebnis gr\u00f6\u00dfer als 0.80 sein gilt dies als Indiz das Notepad ge\u00f6ffnet ist.<\/p>\n<p>Klar ist das es nur funktioniert wenn der Textbereich von Notepad vom Start weg tats\u00e4chlich mehr als 80% des Bildschirmes einnimmt. Mehrere Monitore oder manuell skalierte Fenster killen diesen Ansatz schnell.<\/p>\n<p>Da ich beim vSNES afaik alle Fensterpositionen &amp; gr\u00f6\u00dfen in der .ini definiert habe sollte aktuell f\u00fcr das &#8222;erkennen&#8220; ausgeblendeter Buttons eigentlich die Abfrage einzelner Pixel gen\u00fcgen, allerdings habe ich beim testen auch &#8222;leere&#8220; Layer entdeckt. Daf\u00fcr k\u00f6nnte ich die diese Routine adaptieren.<\/p>","protected":false},"excerpt":{"rendered":"<p>Gestern habe ich beim gelangweilten st\u00f6bern im QB64.org-Forum ein Projekt gefunden das (zumindest in der Anfangsphase, weiter habe ich nicht gelesen) wie der SpriteXtractor nur vorgegebene Maus- und Tastatureingaben abspult. Dazu verwendet es den Befehl _SCREENCLICK. Ich wu\u00dfte doch das so ein Befehl exisitert. Mit _SCREENPRINT h\u00e4tte ich in dem selben Wikieintrag auch die Tatstatureingabe &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/2019\/01\/07\/_screenclick\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201e_SCREENCLICK\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":410,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-408","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-srsnesdrmm"],"_links":{"self":[{"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts\/408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=408"}],"version-history":[{"count":3,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts\/408\/revisions"}],"predecessor-version":[{"id":488,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts\/408\/revisions\/488"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/media\/410"}],"wp:attachment":[{"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=408"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}