{"id":291,"date":"2018-12-10T18:14:57","date_gmt":"2018-12-10T17:14:57","guid":{"rendered":"http:\/\/www.acidpool.at\/005_wordpress\/?p=291"},"modified":"2019-05-07T17:57:25","modified_gmt":"2019-05-07T15:57:25","slug":"kontrolle-erlangen","status":"publish","type":"post","link":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/2018\/12\/10\/kontrolle-erlangen\/","title":{"rendered":"Kontrolle erlangen"},"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\/2018\/12\/Kontrolle.jpg\" alt=\"\" class=\"wp-image-292\" srcset=\"http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2018\/12\/Kontrolle.jpg 1004w, http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2018\/12\/Kontrolle-300x86.jpg 300w, http:\/\/www.acidpool.at\/005_wordpress\/wp-content\/uploads\/2018\/12\/Kontrolle-768x220.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p>&#8222;<strong><a href=\"https:\/\/qb64.org\/wiki\/Windows_Libraries#Send_Keys\" target=\"_blank\" rel=\"noopener noreferrer\">SEND KEYS<\/a><\/strong>&#8220; funktioniert wahnsinnig gut. In &#8222;<strong><a href=\"https:\/\/qb64.org\/wiki\/Windows_Libraries#Mouse_Area\" target=\"_blank\" rel=\"noopener noreferrer\">MOUSE AREA<\/a><\/strong>&#8220; befindet sich die Anleitung wie man den Mouse Cursor plaziert, das Einzige was mir jetzt noch fehlt ist das Senden von Mouse clicks. <\/p>\n\n\n\n<p class=\"has-background has-very-light-gray-background-color\"><strong>Advanced Brainfart:<\/strong><br> Wenn es m\u00f6glich w\u00e4re den in &#8222;<strong><a href=\"https:\/\/qb64.org\/wiki\/Windows_Libraries#Send_Keys\" target=\"_blank\" rel=\"noopener noreferrer\">SEND KEYS<\/a><\/strong>&#8220; erzeugten Screenshot aus dem Zwischenspeicher in QB64 zu importieren w\u00e4re es (<em>mit kA, wahrscheinlich typisch unendlich hohem Aufwand<\/em>) m\u00f6glich diesen auszuwerten um die Sprites sinnvoll abzulegen (<em>Siehe Sonntag 09\/12\/2018 Punkt#4: &#8222;Bild, x-pos, y-pos und Tilenummer&#8220;<\/em>). Sich komplett auf Variabeln zu verlassen ist nicht m\u00f6glich da die Tilenummer nicht eruierbar ist.<\/p>\n\n\n\n<p>Back to topic:<br>\nDie Zeile die ich wahrscheinlich kopieren und modifizieren muss ist diese:\n\n\n<p><\/p>\n\n\n<\/p><pre class=\"wp-block-code\"><code>\n<strong>SUB SENDKEYS ALIAS<\/strong> keybd_event (<strong>BYVAL<\/strong> bVk <strong>AS LONG<\/strong>, <strong>BYVAL<\/strong> bScan <strong>AS LONG<\/strong>, <strong>BYVAL<\/strong> dwFlags <strong>AS LONG<\/strong>, <strong>BYVAL<\/strong> dwExtraInfo <strong>AS LONG<\/strong>)<br>\n<\/code><\/pre>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Zuerst sollte ich mal schauen was zu &#8222;<code>keybd_event<\/code>&#8220; in der &#8222;<code>user32.dll<\/code>&#8220; steht und ob ein Mouse-equivalent existiert. (\u2026) Oder ich finde sofort die &#8222;<code>mouse_event function<\/code>&#8220; und im selben Zug das diese als auch die &#8222;<code>Keybd_event function<\/code>&#8220; durch die &#8222;<code>SendInput function<\/code>&#8220; ersetzt wurden.<\/p>\n<p>Und da w\u00e4ren wir in meinem moralischen Dilemma: Soll dieses Programm <strong>&gt;jetzt&nbsp;f\u00fcr&nbsp;mich&lt;<\/strong> funktionieren oder <strong>&gt;m\u00f6glichst&nbsp;immer&nbsp;f\u00fcr&nbsp;m\u00f6glichst&nbsp;alle&lt;<\/strong>?<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Nachdem sich das Projekt &#8222;<strong>SR:SNES:DRMM<\/strong>&#8220; jetzt schon seit Jahren (<em>Afair Mittwoch 05.10.2016<\/em>) zieht und keine tats\u00e4chlichen Ergebnisse sondern &#8222;nur&#8220; Ideen, Brainfarts, Erkenntnisse und \u00e4hnliches hervorgebracht hat, bin ich eine Runde egoistisch und w\u00e4hle <strong>&gt;jetzt&nbsp;f\u00fcr&nbsp;mich&lt;<\/strong>.<\/p>\n<p>Sollte es so funktionieren wie ich es gerne h\u00e4tte und sollte ich es anwenden k\u00f6nnen und sollte ich Zeit, Lust und Laune haben kann ich es ja immer noch verallgemeinern.<br>\nWie ich bei meinen Abstechern in VBA gelernt habe ist es aber notwendig alle verwendeten Ressourcen zu notieren und zu speichern.<br>\n(<em>Der Link zu besten Quelle ever nutzt nichts wenn diese nicht mehr online ist\u2026 und deswegen speichere ich ab nun alle relevanten Seiten als <code>.pdf<\/code> und f\u00fcge sie am Ende der Beitr\u00e4ge an.<\/em>)\n<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Okay, zerlegen wir <strong><a href=\"https:\/\/qb64.org\/wiki\/Windows_Libraries#Send_Keys\" target=\"_blank\" rel=\"noopener noreferrer\">SEND KEYS<\/a><\/strong> in die Angaben auf der <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/api\/winuser\/nf-winuser-keybd_event\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft-Seite<\/a><\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p><pre class=\"wp-block-code\"><code>void keybd_event(\n  BYTE      bVk,\t-&gt; A virtual-key code. The code must be a value in the range 1 to 254.\n  BYTE      bScan,\t-&gt; A hardware scan code for the key.\n  DWORD     dwFlags,\t-&gt; Controls various aspects of function operation. This parameter can be one or more of the following values.\n\t\t\t   Value \t\t\tMeaning\n\t\t\t   KEYEVENTF_EXTENDEDKEY\tIf specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).\n\t\t\t   0x0001\n\t\t\t   KEYEVENTF_KEYUP\t\tIf specified, the key is being released. If not specified, the key is being depressed. \n\t\t\t   0x0002\n  ULONG_PTR dwExtraInfo\t-&gt; An additional value associated with the key stroke.\n);\nDECLARE DYNAMIC LIBRARY \"user32\"\n    SUB SENDKEYS ALIAS keybd_event (BYVAL bVk AS LONG, BYVAL bScan AS LONG, BYVAL dwFlags AS LONG, BYVAL dwExtraInfo AS LONG)\nEND DECLARE\n\nCONST KEYEVENTF_KEYUP = &amp;H2\nCONST VK_SNAPSHOT = &amp;H2C 'PrtScn key\nCONST VK_MENU = &amp;H12 'Alt key\nCONST VK_SHIFT = &amp;H10 'Shift key\nCONST VK_LWIN = &amp;H5B\n\nPRINT \"\"\nPRINT \"SENDKEYS clone example.  Press ENTER to begin...\"\nPRINT\n\nWHILE INKEY$ &lt;&gt; CHR$(13): WEND\n\n'=== Capture Active window to Clipoard as image (Like Alt+PrtSc)\nSENDKEYS VK_MENU, 0, 0, 0\t\t\t\t\t-&gt; dr\u00fcckt Alt key\nSENDKEYS VK_SNAPSHOT, 0, 0, 0\t\t\t\t\t-&gt; dr\u00fcckt PrtScn key\nSENDKEYS VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0\t\t\t-&gt; l\u00e4\u00dft PrtScn key los\nSENDKEYS VK_MENU, 0, KEYEVENTF_KEYUP, 0\t\t\t\t-&gt; l\u00e4\u00dft Alt key los\n\n<\/code><\/pre>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Auf der Suche was &#8222;<code>VK_LWIN = &amp;H5B<\/code>&#8220; ist (<em>Antwort: Die Windows-Taste<\/em>) bei den Virtual-Key-Codes entdeckt das auch die Maustasten vorhanden sind:<br>\n<a href=\"https:\/\/docs.microsoft.com\/de-at\/windows\/desktop\/inputdev\/virtual-key-codes\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.microsoft.com\/de-at\/windows\/desktop\/inputdev\/virtual-key-codes<\/a><br>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p><pre class=\"wp-block-code\"><code>Constant\/value    Description\nVK_LBUTTON        Left mouse button\n0x01\nVK_RBUTTON        Right mouse button\n0x02<\/code><\/pre>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Eine Runde wirres gegoogle weiter darf ich mitteilen das <code>0x01<\/code> anscheinend dem Code <code>&amp;H1<\/code> bzw <code>&amp;H01<\/code> entspricht. (<em><code>0x02<\/code> ist <code>&amp;H2<\/code> bzw <code>&amp;H02<\/code><\/em>).<br>\nWas genau das darstellt erchlie\u00dft sich mir hingegen nicht.<br>\n<code>0x01 = bit set \/ &amp;H1 = decimal 1.<\/code>???<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Okay, theoretisch sollte es also m\u00f6glich sein, <code>VK_LMB = &amp;H1<\/code> und <code>VK_RMB = &amp; &amp;H2<\/code> in das Beispiel einzubauen, den Mousecursor mittels <code><strong>SetCursorPos<\/strong> x, y<\/code> (<em>Eine SUB die in <strong><a href=\"https:\/\/qb64.org\/wiki\/Windows_Libraries#Mouse_Area\" target=\"_blank\" rel=\"noopener noreferrer\">MOUSE AREA<\/a><\/strong> erstellt wird.<\/em>) zu einen bestimmten Punkt zu f\u00fchren und dann per <code><strong>SENDKEYS<\/strong> VK_LMB, 0, 0, 0<\/code> zu dr\u00fccken?<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Sollte funktionieren. Dann basteln wir den Hybrid mal\u2026<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Uhm\u2026 &#8222;<code>CONST KEYEVENTF_KEYUP = &amp;H2<\/code>&#8220; ? Ich dachte <code>&amp;H2<\/code> ist gleichbedeutend mit <code>&amp;H02<\/code> alias <code>Right Mouse Button<\/code>?<br>\nBei den &#8222;<code>dwflags<\/code>&#8220; oben findet sich &#8222;<code>0x0002<\/code>&#8222;\u2026 hm, vielleicht funktioniert das Ganze doch nicht gaaanz so easy wie ich annahm\u2026<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Okay, funktioniert scheinbar ohne &#8222;<code>mouse_event<\/code>&#8220; doch nicht\u2026<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Es funktioniert!!! Whoop whoop!<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p><pre class=\"wp-block-code\"><code>'============================\n'KEYBOARD &amp; MOUSE SCRIPT TEST\n'-----------[kemoscte.bas]---\n'\n'Basierend auf SENDKEY.BAS (Coded for QB64 by Dav, JAN\/2013) und dem\n'\"Mouse Area\"-Beispiel gefunden auf https:\/\/qb64.org\/wiki\/Windows_Libraries\n'\n'Sinn und Zweck ist es den Mouse Cursor auszerhalb des Programmfensters auf dem\n'Bildschirm zu bewegen, zu klicken und Text einzugeben.\n'\n'All (d) by -=[d.s.R.]=- 10.Dec.2018\n\nDECLARE DYNAMIC LIBRARY \"user32\"\n    SUB SetCursorPos (BYVAL x AS LONG, BYVAL y AS LONG) 'move cursor position\n    SUB SENDKEYS ALIAS keybd_event (BYVAL bVk AS LONG, BYVAL bScan AS LONG, BYVAL dwFlags AS LONG, BYVAL dwExtraInfo AS LONG)\n    SUB SENDMOUSE ALIAS mouse_event (BYVAL dwFlags AS LONG, BYVAL dx AS LONG, BYVAL dy AS LONG, BYVAL dwData AS LONG, BYVAL dwExtraInfo AS LONG)\nEND DECLARE\n\nCONST KEYEVENTF_KEYUP = &amp;H2\nCONST VK_SNAPSHOT = &amp;H2C 'PrtScn key\nCONST VK_MENU = &amp;H12 'Alt key\nCONST VK_SHIFT = &amp;H10 'Shift key\nCONST VK_LWIN = &amp;H5B\n\nCONST MOUSEEVENTF_LEFTDOWN = &amp;H2 'The left button is up.\nCONST MOUSEEVENTF_LEFTUP = &amp;H4 'The left button is down.\nCONST MOUSEEVENTF_RIGHTDOWN = &amp;H8 'The right button is up.\nCONST MOUSEEVENTF_RIGHTUP = &amp;H10 'The right button is down.\n\nSHELL _DONTWAIT \"notepad.exe\"\n\nSLEEP 1 'give time to make notepad the active window...\n\n'=== Say Hi...\nSENDKEYS &amp;H48, 0, 0, 0: SENDKEYS &amp;H48, 0, KEYEVENTF_KEYUP, 0 'H\nSENDKEYS &amp;H49, 0, 0, 0: SENDKEYS &amp;H49, 0, KEYEVENTF_KEYUP, 0 'i\n\nSetCursorPos 120, 60 '&lt;- Mousecursor direkt ueber \"Datei\"\nSENDMOUSE MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0\nSENDMOUSE MOUSEEVENTF_LEFTUP, 0, 0, 0, 0\nSetCursorPos 120, 120 '&lt;- Mousecursor direkt ueber \"Speichern\"\nSLEEP 1\nSENDMOUSE MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0\nSENDMOUSE MOUSEEVENTF_LEFTUP, 0, 0, 0, 0\n\nEND<\/code><\/pre>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p>Link f\u00fcr morgen: <a href=\"https:\/\/qb64.org\/wiki\/SCREENIMAGE\" target=\"_blank\" rel=\"noopener noreferrer\">SCREENIMAGE<\/a><br>\n&#8222;The _SCREENIMAGE function stores the current desktop image or a portion of it and returns an image handle.&#8220;<br>\nGhihihi\u2026<\/p>\n<p>\n\n\n<p><\/p>\n<p><\/p>\n\n\n<\/p>\n<p><code>.pdf<\/code>-Dateien:<br>\n<small><a href=\"http:\/\/www.acidpool.at\/007_shadowrun\/01_srsnesdrmm\/library\/001_QB64wiki_windows_libraries_10_12_2018.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">001_QB64wiki_windows_libraries_10_12_2018.pdf<\/a> (702kb)<br>\n<a href=\"http:\/\/www.acidpool.at\/007_shadowrun\/01_srsnesdrmm\/library\/002_WinDevCenter_keybd_event_function_10_12_2018.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">002_WinDevCenter_keybd_event_function_10_12_2018.pdf<\/a> (462kb)<br>\n<a href=\"http:\/\/www.acidpool.at\/007_shadowrun\/01_srsnesdrmm\/library\/003_WinDevCenter_mouse_event_function_10_12_2018.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">003_WinDevCenter_mouse_event_function_10_12_2018.pdf<\/a> (458kb)<br>\n<a href=\"http:\/\/www.acidpool.at\/007_shadowrun\/01_srsnesdrmm\/library\/004_WinDevCenter_virtual-key_codes_10_12_2018.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">004_WinDevCenter_virtual-key_codes_10_12_2018.pdf<\/a> (419kb)<\/small>\n<\/p>\n<p>\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>&#8222;SEND KEYS&#8220; funktioniert wahnsinnig gut. In &#8222;MOUSE AREA&#8220; befindet sich die Anleitung wie man den Mouse Cursor plaziert, das Einzige was mir jetzt noch fehlt ist das Senden von Mouse clicks. Advanced Brainfart: Wenn es m\u00f6glich w\u00e4re den in &#8222;SEND KEYS&#8220; erzeugten Screenshot aus dem Zwischenspeicher in QB64 zu importieren w\u00e4re es (mit kA, wahrscheinlich &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/2018\/12\/10\/kontrolle-erlangen\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eKontrolle erlangen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":292,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-291","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\/291","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=291"}],"version-history":[{"count":37,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts\/291\/revisions"}],"predecessor-version":[{"id":495,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/posts\/291\/revisions\/495"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/media\/292"}],"wp:attachment":[{"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=291"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.acidpool.at\/005_wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}