<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>automation Archive - Robert Skibbe</title>
	<atom:link href="https://robbelroot.de/blog/tag/automation/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>alias RobbelRoot – Freelance Full Stack Developer .NET</description>
	<lastBuildDate>Mon, 23 Mar 2026 09:58:52 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://robbelroot.de/wp-content/uploads/2020/12/cropped-favicon-32x32.png</url>
	<title>automation Archive - Robert Skibbe</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Converting DaVinci Resolve markers to YouTube chapters</title>
		<link>https://robbelroot.de/blog/converting-davinci-resolve-markers-to-youtube-chapters/</link>
					<comments>https://robbelroot.de/blog/converting-davinci-resolve-markers-to-youtube-chapters/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sun, 09 Jan 2022 18:43:08 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[automate]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[chapter]]></category>
		<category><![CDATA[chapters]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[davinci resolve]]></category>
		<category><![CDATA[editing]]></category>
		<category><![CDATA[generate]]></category>
		<category><![CDATA[marker]]></category>
		<category><![CDATA[markers]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[videoediting]]></category>
		<category><![CDATA[youtube]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=7275</guid>

					<description><![CDATA[<p>So you want to start converting DaVinci Resolve markers to YouTube chapters – fully automated? Here you will find 2 free tools to do so &#x1f609;! Just paste the content of the &#8222;.edl&#8220;-file into the left textbox and the magic will happen. Alternatively, you can simply drag and drop the &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/converting-davinci-resolve-markers-to-youtube-chapters/">Converting DaVinci Resolve markers to YouTube chapters</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-zu-YouTube-Kapitel-umwandeln-1.png"><img fetchpriority="high" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-zu-YouTube-Kapitel-umwandeln-1.png" alt="Converting DaVinci Resolve markers to YouTube chapters" class="wp-image-7237" title="Converting DaVinci Resolve markers to YouTube chapters"/></a><figcaption>Converting DaVinci Resolve markers to YouTube chapters</figcaption></figure>






<p>So you want to start <strong>converting DaVinci Resolve markers to YouTube chapters</strong> – fully automated?</p>



<p><strong>Here </strong>you will find <strong>2 free tools</strong> to do so &#x1f609;!</p>



<p><strong>Just paste </strong>the <strong>content </strong>of the &#8222;.edl&#8220;-file <strong>into </strong>the <strong>left textbox </strong>and the magic will happen.</p>



<p><strong>Alternatively</strong>, you can simply <strong>drag and drop</strong> the <strong>file into </strong>the <strong>field </strong>and <strong>save </strong>yourself <strong>opening </strong>the <strong>file</strong>.</p>


<section class="dcc-wrapper">
  <div class="dcc-title">Marker to YouTube-chapter converter</div>
  <div class="dcc-box-row">
    <div class="dcc-box-column">
      <div class="dcc-box-title">.edl contents</div>
      <div class="dcc-box-wrapper dcc-left-box-wrapper">
        <textarea id="edlContent" class="dcc-box" placeholder="Drag & drop the .edl file here, or paste the text-contents"></textarea>
      </div>
      <div class="dcc-box-menu">
        <button onclick="pasteEdlContent()">Paste</button>
      </div>
    </div>
    <div class="dcc-box-column">
      <div class="dcc-box-title">YouTube chapters</div>
      <div class="dcc-box-wrapper dcc-right-box-wrapper">
        <textarea id="chapters" class="dcc-box" readonly placeholder="Your chapters will appear here after processing successfully"></textarea>
      </div>
      <div class="dcc-box-menu">
        <button onclick="copyChapters()">Copy</button>
      </div>
    </div>
  </div>
  <hr class="dcc-dl-separator">
  <div class="dcc-dl-wrapper">
    <a href="/downloads/tools/MarkersToChaptersConverter.zip">
      <div class="dcc-dl-inner">
        <!-- <div style="border-right:1px solid black;margin: 0.3em 0;margin-right:0.5em;"></div> -->
        <div style="color:black;font-weight:bold;">Download app</div>
      </div>
    </a>
  </div>
</section>



<h2 class="wp-block-heading" id="background-to-davinci-resolve-markers-youtube-chapters">Background to DaVinci Resolve markers &amp; YouTube chapters</h2>



<p><strong>Ultimately</strong>, you can <strong>export </strong>so-called &#8222;<strong>editing decision lists</strong>&#8220; <strong>from </strong>your <strong>DaVinci Resolve</strong> timeline.</p>



<p><strong>These arise </strong>or can be created <strong>by setting </strong>&#8222;<strong>markers</strong>&#8222;, i.e. small <strong>bookmarks</strong>, in <strong>DaVinci Resolve</strong>.</p>



<p>It is <strong>best </strong>to <strong>imagine </strong>it <strong>like </strong>a <strong>book </strong>in which you attach <strong>small bookmarks to </strong>certain pages so that you can <strong>remember </strong>this point <strong>later</strong>.</p>



<p>Each of <strong>these bookmarks </strong>&#8211; <strong>called </strong>&#8222;<strong>markers</strong>&#8220; in DaVinci Resolve slang &#8211; you <strong>can </strong>also <strong>add </strong>text, i.e. a kind of <strong>title</strong>.</p>



<p>It wasn&#8217;t that long <strong>ago </strong>&#8211; <strong>2 days</strong> lol to be precise &#8211; <strong>when I faced the problem</strong> myself for the first time.</p>



<p>So I went there <strong>more or less usual</strong>, <strong>made </strong>my <strong>videos </strong>and <strong>set </strong>the <strong>markers </strong>in DaVinci Resolve.</p>



<p><strong>As mentioned</strong>, I did this <strong>so </strong>that I could <strong>quickly find </strong>the <strong>important points </strong>while I was working on it.</p>



<p><strong>Later </strong>I <strong>realized </strong>that I could just as easily <strong>use these passages </strong>for my YouTube chapters.</p>



<p><strong>Of course </strong>I <strong>didn&#8217;t feel</strong> like <strong>copying </strong>everything out <strong>by hand</strong>, so I looked for a tool.</p>



<p><strong>Unfortunately </strong>I <strong>couldn&#8217;t find a tool quickly</strong>, but luckily you are a programmer and can <strong>build one yourself </strong>&#x1f60e;.</p>


<div class="async-youtube" data-embed="jGXuR29Q0xs" data-alt="">
    <div class="play-button"></div>      
  </div>



<h2 class="wp-block-heading" id="extension-1-converting-multi-color-markers-to-youtube-chapters">Extension 1 – Converting multi color markers to YouTube chapters</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-convert-multi-color-markers-to-YouTube-chapters.png"><img decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-convert-multi-color-markers-to-YouTube-chapters.png" alt="DaVinci Resolve convert multi color markers to YouTube chapters" class="wp-image-7290" title="DaVinci Resolve convert multi color markers to YouTube chapters"/></a><figcaption>DaVinci Resolve convert multi color markers to YouTube chapters</figcaption></figure>



<h3 class="wp-block-heading" id="supporting-multiple-colors">Supporting multiple colors</h3>



<p><strong>Of course</strong>, a few <strong>small ideas </strong>came to mind with this tool <strong>after </strong>it was <strong>finished</strong>.</p>



<p><strong>Currently </strong>the <strong>converter </strong>can process <strong>only one marker color</strong>, which may not be sufficient for some (a few?) applications.</p>



<p>It <strong>doesn&#8217;t</strong> <strong>matter which colors </strong>are <strong>present </strong>in the code, as the <strong>tool always takes the color </strong>from the <strong>first </strong>&#8222;dataset&#8220; as the main color.</p>



<p><strong>In theory</strong>, it <strong>wouldn&#8217;t be</strong> really <strong>difficult </strong>to add multiple colors <strong>since </strong>I was <strong>looking for extensibility </strong>in the code as always.</p>



<p><strong>However</strong>, I <strong>still </strong>have to <strong>think about how </strong>to implement this as a surface, as I <strong>want to keep it intuitive</strong>.</p>



<h2 class="wp-block-heading" id="extension-2-windows-tool-for-eleminating-manual-work">Extension 2 – Windows Tool for eleminating manual work</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-convert-edi-files-on-creation-to-youtube-chapters.png"><img decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-convert-edi-files-on-creation-to-youtube-chapters.png" alt="DaVinci Resolve convert edl files on creation to youtube chapters" class="wp-image-7296" title="DaVinci Resolve convert edl files on creation to youtube chapters"/></a><figcaption>DaVinci Resolve convert edl files on creation to youtube chapters</figcaption></figure>



<h3 class="wp-block-heading" id="converting-edl-files-on-creation">Converting EDL files on creation</h3>



<p><strong>Programmers </strong>are <strong>known to be </strong><s>lazy</s>, creative / <strong>innovative</strong>, so I thought about something.</p>



<p><strong>Especially people </strong>who <strong>upload videos </strong>every day have this <strong>recurring task </strong>in front of them.</p>



<p><strong>Filming</strong>, <strong>cutting</strong>, setting DaVinci Resolve <strong>markers</strong>, <strong>exporting</strong>, etc. every day &#8211; <strong>sigh</strong>.</p>



<p><strong>Then </strong>going to <strong>my </strong>* wink * <strong>homepage </strong>and <strong>use </strong>the YouTube <strong>chapter converter</strong>, so:</p>



<ul class="wp-block-list"><li>Open download folder</li><li>Visit my page/open the tab</li><li>Drop file into webbrowser</li><li>copy chapters</li><li>Open the Youtube video</li><li>Paste chapters..</li></ul>



<p>Anyone who knows me knows that I&#8217;m <strong>not a big fan of recurring</strong> &#8222;monkey work&#8220;, so the <strong>following idea came </strong>up:</p>



<p><strong>How about </strong>a <strong>small Windows tool</strong>, which can <strong>recognize </strong>the <strong>creation of </strong>an &#8222;.edl&#8220; <strong>file </strong>within a folder?</p>



<p>You <strong>could </strong>of course <strong>make </strong>this <strong>folder configurable </strong>and thus adapt it to your needs.</p>



<p><strong>One should</strong> also <strong>be able </strong>to <strong>switch off </strong>the tool <strong>without closing </strong>it, of course.</p>



<p>Then the <strong>tool could </strong>go there and, if it <strong>detects</strong> the <strong>creation </strong>of a <strong>file</strong>, take this file and <strong>process </strong>it <strong>directly</strong>.</p>



<p><strong>After </strong>the <strong>successful processing</strong>, the YouTube <strong>chapters could </strong>be <strong>placed on </strong>the <strong>clipboard immediately </strong>&#8211; automatically!</p>



<p><strong>No sooner </strong>said than done &#8211; I <strong>implemented</strong> the <strong>tool quickly </strong>and this is what it looks like (I did without an overly beautiful design, sorry ..):</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-in-YouTube-Kapitel-umwandeln-Screenshot.png"><img loading="lazy" decoding="async" width="371" height="181" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-in-YouTube-Kapitel-umwandeln-Screenshot.png" alt="Converting DaVinci Resolve markers to YouTube chapters Screenshot" class="wp-image-7266" title="Converting DaVinci Resolve markers to YouTube chapters Screenshot"/></a><figcaption>Converting DaVinci Resolve markers to YouTube chapters Screenshot</figcaption></figure>



<h2 class="wp-block-heading" id="downloads">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="https://bit.ly/davinci-resolve-markers-to-youtube-chapter-converter-download" target="_blank" rel="noreferrer noopener"><strong>MarkersToChaptersConverter.zip</strong></a></div>
</div>



<h2 class="wp-block-heading" id="related-posts">Related posts</h2>



<ul class="wp-block-list"><li><strong><a href="https://robbelroot.de/blog/hacking-a-net-application/" target="_blank" rel="noreferrer noopener">Hacking a NET Application</a></strong></li><li><strong><a href="https://robbelroot.de/blog/creating-a-vb-net-datagridview-filter-functionality/" target="_blank" rel="noreferrer noopener">Filtering a VB NET DataGridView</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vb-net-removing-items-from-listboxes/" target="_blank" rel="noreferrer noopener">Removing items from a ListBox</a></strong></li></ul>
<p>Der Beitrag <a href="https://robbelroot.de/blog/converting-davinci-resolve-markers-to-youtube-chapters/">Converting DaVinci Resolve markers to YouTube chapters</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/converting-davinci-resolve-markers-to-youtube-chapters/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>DaVinci Resolve Marker in YouTube-Kapitel umwandeln</title>
		<link>https://robbelroot.de/blog/davinci-resolve-marker-in-youtube-kapitel-umwandeln/</link>
					<comments>https://robbelroot.de/blog/davinci-resolve-marker-in-youtube-kapitel-umwandeln/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Fri, 07 Jan 2022 18:48:36 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Downloads]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[automatisieren]]></category>
		<category><![CDATA[automatisierung]]></category>
		<category><![CDATA[chapter]]></category>
		<category><![CDATA[chapters]]></category>
		<category><![CDATA[converter]]></category>
		<category><![CDATA[davinci resolve]]></category>
		<category><![CDATA[editing]]></category>
		<category><![CDATA[generieren]]></category>
		<category><![CDATA[kapitel]]></category>
		<category><![CDATA[konverter]]></category>
		<category><![CDATA[marker]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[umwandeln]]></category>
		<category><![CDATA[videobearbeitung]]></category>
		<category><![CDATA[videoediting]]></category>
		<category><![CDATA[youtube]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=7194</guid>

					<description><![CDATA[<p>Du möchtest DaVinci Resolve Marker in YouTube-Kapitel umwandeln und hast keine Lust selbst Hand anzulegen!? Dann findest Du hier zwei Tools – in Form eines Webinterfaces und einer kleinen App – um dies automatisiert erledigen zu lassen &#x1f609;! Füge einfach den Inhalt der &#8222;.edl&#8222;-Datei in das linke Textfeld ein und &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/davinci-resolve-marker-in-youtube-kapitel-umwandeln/">DaVinci Resolve Marker in YouTube-Kapitel umwandeln</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-zu-YouTube-Kapitel-umwandeln-1.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-zu-YouTube-Kapitel-umwandeln-1.png" alt="DaVinci Resolve Marker zu YouTube-Kapitel umwandeln" class="wp-image-7237" title="DaVinci Resolve Marker zu YouTube-Kapitel umwandeln"/></a><figcaption class="wp-element-caption">DaVinci Resolve Marker zu YouTube-Kapitel umwandeln</figcaption></figure>






<p>Du möchtest <strong>DaVinci Resolve Marker in YouTube-Kapitel umwandeln</strong> und hast keine Lust selbst Hand anzulegen!?</p>



<p>Dann <strong>findest </strong>Du hier <strong>zwei Tools</strong> – in Form eines Webinterfaces und einer kleinen App – um dies automatisiert erledigen zu lassen &#x1f609;!</p>



<p><strong>Füge </strong>einfach den <strong>Inhalt </strong>der &#8222;.<strong>edl</strong>&#8222;-Datei <strong>in </strong>das <strong>linke Textfeld </strong>ein und schon passiert die Magie.</p>



<p><strong>Alternativ </strong>kannst Du die <strong>Datei </strong>auch einfach <strong>via </strong>&#8222;<strong>Drag &amp; Drop</strong>&#8220; in das Feld ziehen und <strong>sparst </strong>Dir so das <strong>Öffnen </strong>der Datei.</p>


<section class="dcc-wrapper">
  <div class="dcc-title">Marker to YouTube-chapter converter</div>
  <div class="dcc-box-row">
    <div class="dcc-box-column">
      <div class="dcc-box-title">.edl contents</div>
      <div class="dcc-box-wrapper dcc-left-box-wrapper">
        <textarea id="edlContent" class="dcc-box" placeholder="Drag & drop the .edl file here, or paste the text-contents"></textarea>
      </div>
      <div class="dcc-box-menu">
        <button onclick="pasteEdlContent()">Paste</button>
      </div>
    </div>
    <div class="dcc-box-column">
      <div class="dcc-box-title">YouTube chapters</div>
      <div class="dcc-box-wrapper dcc-right-box-wrapper">
        <textarea id="chapters" class="dcc-box" readonly placeholder="Your chapters will appear here after processing successfully"></textarea>
      </div>
      <div class="dcc-box-menu">
        <button onclick="copyChapters()">Copy</button>
      </div>
    </div>
  </div>
  <hr class="dcc-dl-separator">
  <div class="dcc-dl-wrapper">
    <a href="/downloads/tools/MarkersToChaptersConverter.zip">
      <div class="dcc-dl-inner">
        <!-- <div style="border-right:1px solid black;margin: 0.3em 0;margin-right:0.5em;"></div> -->
        <div style="color:black;font-weight:bold;">Download app</div>
      </div>
    </a>
  </div>
</section>



<h2 class="wp-block-heading" id="hintergrund-zu-davinci-resolve-markern-youtube-kapiteln">Hintergrund zu DaVinci Resolve Markern &amp; YouTube-Kapiteln</h2>



<p>Letztendlich <strong>kannst </strong>Du sogenannte <strong>Editierentscheidungslisten aus </strong>Deiner <strong>DaVinci Resolve Timeline exportieren</strong>.</p>



<p><strong>Diese entstehen</strong>, bzw. können <strong>dadurch </strong>erstellt werden, <strong>dass </strong>Du in DaVinci Resolve &#8222;<strong>Marker</strong>&#8222;, also kleine Lesezeichen <strong>setzt</strong>.</p>



<p><strong>Stell</strong>&#8218; es Dir am besten <strong>wie </strong>ein <strong>Buch </strong>vor, in dem Du auf <strong>gewissen Seiten </strong>kleine <strong>Lesezeichen </strong>einhängst, um Dich <strong>später </strong>an diese Stelle zu <strong>erinnern</strong>.</p>



<p><strong>Jedes </strong>dieser <strong>Lesezeichen </strong>– im <strong>DaVinci Resolve</strong> Slang &#8222;<strong>Marker</strong>&#8220; genannt – kannst Du zusätzlich <strong>mit </strong>Text, also einer Art <strong>Titel versehen</strong>.</p>



<p>Es ist gar <strong>nicht allzu lang her</strong> – um genau zu sein 2 Tage lol – wo ich das erste Mal <strong>selbst vor dem Problem</strong> stand.</p>



<p>Ich ging also wie mehr oder weniger gewohnt hin, <strong>machte </strong>meine <strong>Videos </strong>und <strong>setzte </strong>die <strong>Marker in DaVinci Resolve</strong>.</p>



<p>Das habe ich wie erwähnt deshalb gemacht, damit ich eben <strong>während </strong>meiner <strong>Bearbeitung schnell zu </strong>den <strong>wichtigen Stellen </strong>finde.</p>



<p><strong>Nachträglich</strong> habe ich dann <strong>gemerkt</strong>, <strong>dass </strong>ich diese Stellen auch ebenso gut <strong>für </strong>meine <strong>YouTube-Kapitel</strong> nutzen könnte.</p>



<p><strong>Natürlich </strong>hatte ich <strong>wenig</strong> <strong>Lust </strong>alles <strong>händisch </strong>herauszukopieren, <strong>also </strong>suchte ich nach einem <strong>Hilfsmittel</strong>.</p>



<p>Leider habe ich <strong>kein Tool </strong>auf die Schnelle gefunden, aber <strong>zum Glück </strong>ist man ja <strong>Programmierer </strong>und kann sich <strong>selbst </strong>eins<strong> bauen </strong>&#x1f60e;.</p>



<h2 class="wp-block-heading" id="erweiterung-1-mehrfarbige-marker-in-youtube-kapitel-umwandeln">Erweiterung 1 – Mehrfarbige Marker in YouTube-Kapitel umwandeln</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-mehrfarbige-Marker-zu-YouTube-Kapitel-umwandeln.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-mehrfarbige-Marker-zu-YouTube-Kapitel-umwandeln.png" alt="DaVinci Resolve mehrfarbige Marker zu YouTube-Kapitel umwandeln" class="wp-image-7233" title="DaVinci Resolve mehrfarbige Marker zu YouTube-Kapitel umwandeln"/></a><figcaption class="wp-element-caption">DaVinci Resolve mehrfarbige Marker zu YouTube-Kapitel umwandeln</figcaption></figure>



<h3 class="wp-block-heading" id="unterstutzung-mehrerer-farben">Unterstützung mehrerer Farben</h3>



<p><strong>Natürlich k</strong>amen mir auch bei <strong>diesem Tool </strong>nach der Fertigstellung noch einige <strong>kleine Ideen</strong> in den Kopf.</p>



<p><strong>Aktuell </strong>kann der Konverter z. B. <strong>nur eine </strong>Marker-<strong>Farbe verarbeiten</strong>, was für einige (wenige?) Einsatzfälle <strong>vielleicht</strong> nicht ausreicht.</p>



<p><strong>Aktuell</strong> ist es <strong>egal</strong>, <strong>welche Farben </strong>im Code vorhanden sind, da das <strong>Tool immer </strong>die Farbe aus dem <strong>ersten </strong>&#8222;<strong>Datensatz</strong>&#8220; als Haupt-Farbe nimmt.</p>



<p><strong>Theoretisch </strong>wäre es <strong>nicht </strong>wirklich <strong>schwer</strong>, <strong>mehrere Farben </strong>hinzuzufügen, da ich im Code wie immer auf Erweiterbarkeit geachtet habe.</p>



<p>Ich <strong>muss </strong>mir allerdings <strong>noch überlegen</strong>, <strong>wie </strong>ich das als <strong>Oberfläche realisiere</strong>, da ich es weiterhin intuitiv halten möchte.</p>



<h2 class="wp-block-heading" id="erweiterung-2-windows-tool-zur-eliminierung-manueller-arbeit">Erweiterung 2 – Windows Tool zur Eliminierung manueller Arbeit</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-edi-Datei-bei-Erstellung-in-YouTube-Kapitel-umwandeln.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-edi-Datei-bei-Erstellung-in-YouTube-Kapitel-umwandeln.png" alt="DaVinci Resolve edi-Datei bei Erstellung in YouTube-Kapitel umwandeln" class="wp-image-7243" title="DaVinci Resolve edi-Datei bei Erstellung in YouTube-Kapitel umwandeln"/></a><figcaption class="wp-element-caption">DaVinci Resolve edi-Datei bei Erstellung in YouTube-Kapitel umwandeln</figcaption></figure>



<h3 class="wp-block-heading" id="edl-dateien-bereits-beim-erstellen-umwandeln">EDL-Dateien bereits beim Erstellen umwandeln</h3>



<p><strong>Programmierer </strong>sind ja <strong>bekanntlich </strong><s>faul</s> <strong>kreativ</strong>/innovativ, <strong>also </strong>habe ich mir <strong>noch was </strong>überlegt.</p>



<p><strong>Besonders </strong>Menschen die <strong>täglich Videos </strong>hochladen, haben diese <strong>immer wiederkehrende Aufgabe </strong>vor sich.</p>



<p>Jeden Tag <strong>Material </strong>filmen, <strong>schneiden</strong>, DaVinci Resolve <strong>Marker setzen</strong>, <strong>exportieren</strong>, etc. – seufz.</p>



<p><strong>Danach </strong>auf meine *zwinker* Homepage gehen und den <strong>YouTube-Kapitel Konverter</strong> nutzen, also:</p>



<ul class="wp-block-list">
<li>Download-Ordner öffnen</li>



<li>Meine Seite öffnen / Tab öffnen</li>



<li>Datei in den Webbrowser droppen</li>



<li>Kapitel kopieren</li>



<li>YouTube-Video öffnen</li>



<li>Kapitel einfügen..</li>
</ul>



<p>Wer mich kennt weiß, dass ich <strong>kein großer Fan von wiederkehrender </strong>&#8222;Monkey-Work&#8220; ist, also kam <strong>folgende Idee</strong>:</p>



<p><strong>Wie wäre es mit </strong>einem kleinen <strong>Windows-Tool</strong>, <strong>Welches </strong>die <strong>Erstellung </strong>einer <strong>&#8222;.edl&#8220;-Datei</strong> innerhalb eines Ordners <strong>erkennen </strong>kann?</p>



<p><strong>Diesen Ordner </strong>könnte man natürlich <strong>konfigurierbar </strong>machen und somit <strong>an </strong>seine <strong>Bedürfnisse anpassen</strong>.</p>



<p><strong>Ebenso </strong>sollte man die <strong>Möglichkeit </strong>haben, dass <strong>Tool</strong> <strong>ohne</strong> <strong>schließen abzuschalten</strong>, klar..</p>



<p><strong>Danach könnte </strong>das <strong>Tool </strong>hingehen und sich bei erkannter <strong>Erstellung einer Datei</strong>, diese Datei <strong>nehmen und </strong>direkt <strong>verarbeiten</strong>.</p>



<p><strong>Nach </strong>der erfolgreichen <strong>Verarbeitung </strong>könnten die <strong>YouTube-Kapitel</strong> also <strong>sofort in </strong>die <strong>Zwischenablage </strong>gelegt werden – <strong>automatisch</strong>!</p>



<p>Gesagt, getan – habe das <strong>Tool </strong>fix <strong>umgesetzt </strong>und <strong>so sieht </strong>es <strong>aus </strong>(ich habe auf übermäßig <strong>schönes Design verzichtet</strong>, sorry..):</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-in-YouTube-Kapitel-umwandeln-Screenshot.png"><img loading="lazy" decoding="async" width="371" height="181" src="https://robbelroot.de/wp-content/uploads/2022/01/DaVinci-Resolve-Marker-in-YouTube-Kapitel-umwandeln-Screenshot.png" alt="DaVinci Resolve Marker in YouTube-Kapitel umwandeln Screenshot" class="wp-image-7266" title="DaVinci Resolve Marker in YouTube-Kapitel umwandeln Screenshot"/></a><figcaption class="wp-element-caption">DaVinci Resolve Marker in YouTube-Kapitel umwandeln Screenshot</figcaption></figure>



<h2 class="wp-block-heading" id="downloads">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button" href="https://bit.ly/davinci-resolve-markers-to-youtube-chapter-converter-herunterladen" target="_blank" rel="noreferrer noopener">MarkersToChaptersConverter.zip</a></div>
</div>



<h2 class="wp-block-heading" id="weiterfuhrende-links">Weiterführende Links</h2>



<ul class="wp-block-list">
<li><strong><a href="https://robbelroot.de/blog/dein-vb-net-plugin-system-im-eigenbau-das-ultimative-beispiel/" target="_blank" rel="noreferrer noopener">Erstelle dein eigenes VB NET Plugin-System</a></strong></li>



<li><strong><a href="https://robbelroot.de/blog/vb-net-webbrowser-alternative/" target="_blank" rel="noreferrer noopener">Ein alternatives Webbrowser Steuerelement</a></strong></li>



<li><strong><a href="https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/" target="_blank" rel="noreferrer noopener">VB NET Formulare automatisch ausfüllen</a></strong></li>
</ul>
<p>Der Beitrag <a href="https://robbelroot.de/blog/davinci-resolve-marker-in-youtube-kapitel-umwandeln/">DaVinci Resolve Marker in YouTube-Kapitel umwandeln</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/davinci-resolve-marker-in-youtube-kapitel-umwandeln/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>VB NET Formular automatisch ausfüllen (Winforms)</title>
		<link>https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/</link>
					<comments>https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Wed, 15 Dec 2021 17:40:57 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[ausfüllen]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[automatisch]]></category>
		<category><![CDATA[automatisiert]]></category>
		<category><![CDATA[automatisierung]]></category>
		<category><![CDATA[complete]]></category>
		<category><![CDATA[fill]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formular]]></category>
		<category><![CDATA[kompletieren]]></category>
		<category><![CDATA[set]]></category>
		<category><![CDATA[setzen]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[textbox]]></category>
		<category><![CDATA[texte]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[vervollständigen]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=6744</guid>

					<description><![CDATA[<p>VB.NET Formulare automatisch ausfüllen! Ein VB NET Formular automatisch ausfüllen zu lassen wäre vermutlich für jeden &#8222;Windows Forms&#8220; geprägten Entwickler eine Erleichterung. Man designt die Form seiner Wahl und möchte natürlich bei Aufruf die notwendigen Daten anzeigen. Besonders beim Flow aus diversen Suchmasken heraus ist es normal, dass man eine &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/">VB NET Formular automatisch ausfüllen (Winforms)</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formular-automatisch-ausfuellen.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formular-automatisch-ausfuellen.png" alt="VB.NET Form automatisch ausfüllen" class="wp-image-6747" title="VB.NET Form automatisch ausfüllen"/></a><figcaption>VB.NET Form automatisch ausfüllen</figcaption></figure>






<h2 class="wp-block-heading">VB.NET Formulare automatisch ausfüllen!</h2>



<p>Ein <strong>VB NET Formular automatisch ausfüllen zu lassen</strong> wäre vermutlich für jeden &#8222;Windows Forms&#8220; geprägten Entwickler eine Erleichterung. Man designt die Form seiner Wahl und möchte natürlich bei Aufruf die notwendigen Daten anzeigen. Besonders beim Flow aus diversen Suchmasken heraus ist es normal, dass man eine Detail-Ansicht mit entsprechenden Daten aufruft.</p>



<h3 class="wp-block-heading">Wie es meistens ist..</h3>



<p>Am besten wäre es natürlich, wenn man dem Formular direkt sagen könnte: &#8222;Hey, die Daten findest Du dort&#8220;. Mit modernen Mitteln wie in der WPF (Windows Presentation Foundation) ist dies durch Datenbindung eine gängige und vor allem einfache Praxis.</p>



<p>Dort findet man durch die saubere Trennung zwischen GUI und Daten eine simple und direkt in XAML implementierte Möglichkeit. In den guten alten Winforms findet man jedoch seltenst (jedenfalls aus meiner Erfahrung gesprochen) datengebundene Steuerelemente.</p>



<h3 class="wp-block-heading">Monkey Work – ney, Automatisierung – yay!</h3>



<p>Dort sieht es dann entgegengesetzt jeglicher Automatisierung eher so aus:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">TextBox1.Text = "..."
TextBox2.Text = "..."
TextBox3.Text = "..."
TextBox4.Text = "..."
' ....</pre>



<p>Eventuell entwickelt man wenigstens einigermaßen sauber und wählt passende Namen für die Textboxen:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">tbFirstName.Text = "..."
tbLastName.Text = "..."
tbZip.Text = "..."
tbCity.Text = "..."
' ....</pre>



<p>Schon besser, aber natürlich kann man sich schon vorstellen, dass dies nicht unbedingt das Gelbe vom Ei ist. Man wird auf diverse Probleme, bzw. Monkey-Work stoßen, Welche für Wartung und Co. nicht gerade vorteilhaft sind. Tonnenweise &#8222;duplicated Code&#8220; und schon glatt eine Qual, wenn es bei einem Objekt mit 30 Properties heißt: &#8222;Hey, zeige die Daten mal an&#8230;&#8220;.</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formulare-ausfuellen-Monkey-Work.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formulare-ausfuellen-Monkey-Work.png" alt="VB.NET Formulare ausfüllen Monkey Work" class="wp-image-6750" title="VB.NET Formulare ausfüllen Monkey Work"/></a><figcaption>VB.NET Formulare ausfüllen Monkey Work</figcaption></figure>



<p>Nun ist man an einem Punkt, wo die bekannte Faulheit doch zum Vorteil sein und zu mehr Effizienz beitragen kann. Wie so häufig, haben wir als Entwickler die Möglichkeit uns gewisse (und vor allem wiederkehrende Aufgaben) zu vereinfachen. Not macht erfinderisch, richtig?</p>



<h3 class="wp-block-heading">An die Zukunft denken</h3>



<p>Je nachdem wie viel Planung und anschließenden Zeitaufwand man bereit ist zu investieren (nicht opfern!), wird die bevorstehende Arbeit beeinflussen. Man sollte meiner Meinung nach jedoch immer eins im Hinterkopf behalten: &#8222;Think twice, code once&#8220;! Leider arbeiten viele Entwickler auch gerne nach dem &#8222;Copy &amp; Paste&#8220;-Prinzip, zur Not auch projektübergreifend.</p>



<p>Statt hier zukunftsorientiert zu denken, werden Aufgaben häufig nur akut und schnell gelöst. Auch wenn die Erledigung einiger Aufgaben ggf. am Anfang nervig und zeitaufwendig sind, können Sie einem später unfassbar viel Zeit ersparen. Dies gilt natürlich nicht nur für das aktuelle Projekt, sondern vermutlich auch noch für später anstehende Projekte und Problemstellungen.</p>



<h2 class="wp-block-heading">Herangehensweise – VB NET Formular automatisch ausfüllen</h2>



<p>Im nächsten Schritt machen wir uns einmal ein paar Gedanken bezüglich der Herangehensweise, die (Windows Forms)-Formulare automatisiert(er) auszufüllen. Auch wenn wir hier vermutlich noch keine volle Suite an Mini-Tools generieren werden, wird das meinerseits dargestellte Beispiel als Startschuss dienen können.</p>



<p>Jeder Entwickler im NET Bereich wird wohl immer wieder mal mit den guten alten <a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.textbox?view=windowsdesktop-6.0" target="_blank" rel="noreferrer noopener"><strong>Textboxen</strong></a> zu tun haben. Ich denke, dass dieses Steuerelement daher auch die erste zu bearbeitende Anlaufstelle sein sollte. Wenn man hingegen an <a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.checkbox?view=windowsdesktop-6.0" target="_blank" rel="noreferrer noopener"><strong>Checkboxen</strong></a>, <a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.listbox?view=windowsdesktop-6.0" target="_blank" rel="noreferrer noopener"><strong>Listboxen</strong></a> und an die anderen Steuerelemente denkt, könnte es schon ein wenig komplexer werden.</p>



<p>Vielleicht werde ich dafür dann noch einmal einen getrennten Beitrag in Zukunft erstellen. Schauen wir einmal, wo mich die Beitrags-Reise, bzw. meine Schreib-Lust heute hinführt &#x1f609;.</p>



<h3 class="wp-block-heading">Konkreter Ablauf</h3>



<p>Wenn man sauber vorgeht, sollte man die Daten natürlich in irgendeiner sinnvollen Form vorliegen haben. Nach Möglichkeit gibt es hier also nicht z. B. 15 verschiedene Variablen, Welche dann im schlimmsten Fall noch &#8222;string1, string2, usw.&#8220; heißen. Wir wollen ja im besten Fall mit relativ fest definierten Mustern arbeiten, um unsere Arbeit so einfach wie möglich zu gestalten.</p>



<p>Ich stelle mir einerseits eine bereits definierte Klasse als Daten-Container vor, andererseits könnte es sich auch um analog zugreifbare Daten wie bei einer DataRow handeln. Den konkreten Ablauf würde man  kurz und knapp vielleicht so beschreiben: &#8222;Nimm dieses Ding hier und packe dessen Eigenschafts-Werte in die passenden Steuerelemente&#8220;.</p>



<p>Dabei könnte man entweder ausgehend vom Objekt, oder von der jeweiligen Form arbeiten, also Pseudocode mäßig so:</p>



<pre class="wp-block-code"><code>Für jede Eigenschaft im Objekt, finde die passende Textbox, trage den passenden Wert ein..</code></pre>



<p>oder..</p>



<pre class="wp-block-code"><code>Für jede/s Textbox/Steuerelement auf dem Formular, finde im Ziel-Objekt die passende Eigenschaft und befülle Diese.</code></pre>



<p>Eventuell könnte man hier auch noch für die Performance mit irgendeiner Art Cache arbeiten, oder je nach Situation die &#8222;Strategie&#8220; (Anspielung Strategy-Pattern&#8230;) ändern. Ich werde es hier allerdings nicht weiter als nötig verkomplizieren, da dieses Beispiel nur als Inspiration dienen soll.</p>



<h2 class="wp-block-heading">Code – VB NET Formular automatisch ausfüllen</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formular-automatisch-ausfuellen-mit-Kundendaten.png"><img loading="lazy" decoding="async" width="1200" height="628" src="https://robbelroot.de/wp-content/uploads/2021/12/VB.NET-Formular-automatisch-ausfuellen-mit-Kundendaten.png" alt="VB.NET Formular automatisch ausfüllen mit Kundendaten" class="wp-image-6786" title="VB.NET Formular automatisch ausfüllen mit Kundendaten"/></a><figcaption>VB.NET Formular automatisch ausfüllen mit Kundendaten</figcaption></figure>



<p>Nachdem wir die Herangehensweise ein wenig durch Pseudocode dargestellt haben, starten wir auch direkt in den Code. Ich werde auf jeden Fall ein Modul verwenden, damit man den Code auch einfach für andere Projekte wiederverwenden kann. Alternativ könnte man natürlich auch eine getrennte Klassenbibliothek, ein NuGet-Paket, o. Ä. erstellen.</p>



<p>Mit gewissen neuen aus C# bekannten Features könnte man auch vielleicht in Visual Basic eine &#8222;Trait&#8220; ähnelnde Verwendungsweise realisieren. Wie bekannt ist, ist Komposition ja zumeist besser, als Vererbung (Stichwort: &#8222;composition over inheritance&#8220;). &#8222;Traits&#8220; kennt man zum Beispiel allzu gut aus der Web-Programmiersprache namens PHP, aber dazu vielleicht in einem anderen Beitrag mehr.</p>



<h3 class="wp-block-heading">Das Modul</h3>



<p>Erstelle nun im ersten Schritt ein neues Modul namens (z. B.) &#8222;modExtensions&#8220; – auch hier verwende ich gerne eine kleine Konvention. Ich halte mich immer an ähnliche Bezeichnungen / Präfixe, wie z. B. &#8222;tb&#8220; für eine Textbox, &#8222;cbb&#8220; für eine Combobox, etc. Welchen Sinn das dann eventuell haben kann / wird, sehen wir unter anderem (und besonders) im heutigen Beitrag!</p>



<p>Da wir schon analog zum Modul geplant haben, eine <a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/programming-guide/language-features/procedures/extension-methods" target="_blank" rel="noreferrer noopener"><strong>Erweiterungsmethode</strong></a> zu verwenden, importieren wir direkt den &#8222;System.Runtime.CompilerServices&#8220;-Namespace.</p>



<h3 class="wp-block-heading">Eine Fill-Methode – VB NET Formular automatisch ausfüllen</h3>



<p>Durch den Import des zuvor genannten Namespaces, können wir dann das &#8222;Extension&#8220;-Attribut verwenden und unsere Methode namens z. B. &#8222;Fill&#8220; damit bestücken.</p>



<p>Als nächstes definieren wir die beiden benötigten Parameter:</p>



<ul class="wp-block-list"><li>Die <strong>Form</strong>, bzw. dessen Steuerelemente, <strong>Welche befüllt werden sollen</strong></li><li>Das <strong>Objekt</strong>, also eine jeweilige Instanz eines x-beliebigen Typs, <strong>Welches </strong>die <strong>Daten beinhaltet</strong></li></ul>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports System.Runtime.CompilerServices

Module modExtensions

    &lt;Extension()>
    Public Sub Fill(frm As Form, obj As Object)
        ' ...
    End Sub

End Module</pre>



<p>Danach erfassen wir die Textboxen aus der &#8222;Controls&#8220;-Auflistung des Formulars, damit wir Diese anschließend verwenden können. Praktisch im gleichen Schritt, ziehen wir uns einfach auch direkt die Eigenschaften (Definitionen) des Daten-Objekts.</p>



<p>Das geht relativ einfach, also wie folgt:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim textBoxes = frm.Controls.OfType(Of TextBox)
Dim properties = obj.GetType().GetProperties()</pre>



<p>Danach können wir die eben abgerufenen Textboxen einfach in einer &#8222;For Each&#8220;-Schleife durchlaufen und dann mit dem Befüllen der Eigenschaften beginnen. Im ersten Teil der Schleife prüfen wir, ob die jeweilige Textbox mit dem korrekten Prefix &#8222;tb&#8220; betitelt wurde. Wir halten uns also an eine kleine, von uns festgelegte Konvention. Vielleicht sollte man dies auch durch ein eigenes Attribut konfigurierbar machen, jedoch verzichten wir der Einfachheit halber aktuell darauf. Falls die Textbox nicht mit &#8222;tb&#8220; beginnt, ignorieren wir Sie aktuell einfach, sprich die Schleife springt in den nächsten Durchlauf.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim wrongPrefix = Not tb.Name.StartsWith("tb")
If wrongPrefix Then
    Continue For
End If</pre>



<p>Der darauf folgende Teil prüft, ob wir eine Eigenschaft mit passendem Namen zur Textbox finden können. Ebenso checken wir, ob der Typ zur Textbox passt, es sich dabei also um einen <a href="https://docs.microsoft.com/de-de/dotnet/api/system.string?view=net-6.0" target="_blank" rel="noreferrer noopener">String</a> handelt.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim nameWithoutPrefix = tb.Name.Substring(2)
Dim matchingProperty = properties.SingleOrDefault(Function(x) x.Name = nameWithoutPrefix)
If matchingProperty Is Nothing OrElse matchingProperty.PropertyType IsNot GetType(String) Then
    Continue For
End If</pre>



<p>Der letzte und wichtigste Part – also nach dem Motto &#8222;das Beste kommt zum Schluss&#8220; – ist, die Text-Eigenschaft der Textbox zu setzen:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">tb.Text = matchingProperty.GetValue(obj).ToString()</pre>



<p>Dazu verwenden wir die <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.reflection.propertyinfo.getvalue?view=net-6.0" target="_blank" rel="noreferrer noopener">&#8222;GetValue&#8220;-Funktion</a></strong> der &#8222;PropertyInfo&#8220;-Klasse, um an den hinterlegten Wert der Eigenschaft zu kommen.</p>



<h2 class="wp-block-heading">Kompletter Code</h2>



<p>Wie immer fasse ich hier am Ende des Beitrages den kompletten Code zusammen.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="VB.NET" data-enlighter-group="kompletter-code">Imports System.Runtime.CompilerServices

Module modExtensions

    &lt;Extension()>
    Public Sub Fill(frm As Form, obj As Object)
        Dim textBoxes = frm.Controls.OfType(Of TextBox)
        Dim properties = obj.GetType().GetProperties()

        For Each tb In textBoxes

            Dim wrongPrefix = Not tb.Name.StartsWith("tb")
            If wrongPrefix Then
                Continue For
            End If

            Dim nameWithoutPrefix = tb.Name.Substring(2)
            Dim matchingProperty = properties.SingleOrDefault(Function(x) x.Name = nameWithoutPrefix)
            If matchingProperty Is Nothing OrElse matchingProperty.PropertyType IsNot GetType(String) Then
                Continue For
            End If

            tb.Text = matchingProperty.GetValue(obj).ToString()
        Next
    End Sub

End Module
</pre>



<pre class="EnlighterJSRAW" data-enlighter-language="csharp" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="C#" data-enlighter-group="kompletter-code">using System;
using System.Windows.Forms;

namespace AutoFillFormCS
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAutoFill_Click(object sender, EventArgs e)
        {
            var customer = new Customer()
            {
                Company = "Nice ltd.",
                FirstName = "Max",
                LastName = "Random",
                Street = "The street",
                HouseNo = "11a"
            };
            this.Fill(customer);
        }
    }
}
</pre>



<h2 class="wp-block-heading">Weiterführende Links</h2>



<ul class="wp-block-list"><li><strong><a href="https://robbelroot.de/blog/mvvm-csharp/" target="_blank" rel="noreferrer noopener">MVVM – Model View ViewModel</a></strong> (Wissen auch für VB geeignet)</li><li><a href="https://robbelroot.de/blog/mahapps-metro-projekt-aufsetzen/" target="_blank" rel="noreferrer noopener"><strong>Mahapps Metro Projekt aufsetzen</strong></a></li><li><strong><a href="https://robbelroot.de/blog/vbnet-await/" target="_blank" rel="noreferrer noopener">Asynchrone Programmierung</a></strong></li></ul>



<h2 class="wp-block-heading">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/AutoFillForm.zip" target="_blank" rel="noreferrer noopener">AutoFillFormVB.zip</a></div>



<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/AutoFillFormCS.zip" target="_blank" rel="noreferrer noopener">AutoFillFormCS.zip</a></div>
</div>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/">VB NET Formular automatisch ausfüllen (Winforms)</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vbnet-formular-automatisch-ausfuellen-winforms/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>VB NET MouseMove – Mausbewegungen mit AutoIt3 simulieren</title>
		<link>https://robbelroot.de/blog/vb-net-mousemove-mausbewegungen-mit-autoit3-simulieren/</link>
					<comments>https://robbelroot.de/blog/vb-net-mousemove-mausbewegungen-mit-autoit3-simulieren/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sun, 03 Oct 2021 01:30:53 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[automatisch]]></category>
		<category><![CDATA[automatisieren]]></category>
		<category><![CDATA[automatisierung]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[bewegen]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[maus]]></category>
		<category><![CDATA[mausbewegung]]></category>
		<category><![CDATA[mausposition]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[mousemove]]></category>
		<category><![CDATA[move]]></category>
		<category><![CDATA[position]]></category>
		<category><![CDATA[positionieren]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[visual]]></category>
		<category><![CDATA[visual basic]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=6455</guid>

					<description><![CDATA[<p>VB NET MouseMove – Mausposition durch Code setzen Du möchtest einen &#8222;VB NET MouseMove&#8222;-Befehl realisieren, aber weißt nicht ganz wie Du das anstellen sollst? Lerne im diesmaligen Beitrag, wie Du in VB NET eine Mausbewegung via Code ausführen kannst. Zugehörig zu den anderen AutoIt3-Beiträgen, fahre ich mit der kleinen Serie &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-mousemove-mausbewegungen-mit-autoit3-simulieren/">VB NET MouseMove – Mausbewegungen mit AutoIt3 simulieren</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseMove.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseMove.png" alt="VB.NET MouseMove mit AutoIt3 simulieren" class="wp-image-6457" title="VB.NET MouseMove mit AutoIt3 simulieren"/></a><figcaption>VB.NET MouseMove mit AutoIt3 simulieren</figcaption></figure>






<h2 class="wp-block-heading">VB NET MouseMove – Mausposition durch Code setzen</h2>



<p>Du <strong>möchtest </strong>einen &#8222;<strong>VB NET MouseMove</strong>&#8222;-Befehl realisieren, aber weißt <strong>nicht ganz wie </strong>Du das anstellen sollst?</p>



<p><strong>Lerne </strong>im diesmaligen Beitrag, wie Du in <strong>VB NET</strong> eine <strong>Mausbewegung via Code</strong> ausführen kannst.</p>



<p><strong>Zugehörig zu </strong>den <strong>anderen </strong>AutoIt3-<strong>Beiträgen</strong>, <strong>fahre </strong>ich <strong>mit </strong>der kleinen <strong>Serie </strong>hier nun <strong>fort</strong>.</p>



<p>Du <strong>brauchst </strong>Dir auch <strong>keine </strong>besonderen <strong>Sorgen über </strong>die <strong>Speichergröße </strong>der hier verwendeten Hilfsmittel machen.</p>



<p><strong>Darauf </strong>gehe ich aber zu einem <strong>späteren Zeitpunkt </strong>noch einmal kurz ein.</p>



<p><strong>Auch wenn </strong>Du damit vermutlich <strong>keinen</strong> &#8222;<strong><a href="https://osu.ppy.sh/home" target="_blank" rel="noreferrer noopener">OSU!</a></strong>&#8222;-Bot bauen kannst denke ich, dass es hier und <strong>da sehr hilfreich </strong>sein kann!</p>



<h2 class="wp-block-heading">Auf YouTube ansehen –  VB NET MouseMove simulieren</h2>



<iframe loading="lazy" width="560" height="315" src="https://www.youtube-nocookie.com/embed/wlG_qTQF7fk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>



<p class="margin-after-video-block"><strong>Wenn </strong>Du <strong>lieber </strong>ein <strong>Video </strong>sehen möchtest, statt Dich durch den Beitrag zu lesen, <strong>kannst </strong>Du das hier <strong>auch </strong>tun.</p>



<p><strong>Gerne schweife ich </strong>in meinen Beiträgen auch mal <strong>ab und bringe </strong>hier und da Nebeninformationen rein.</p>



<p><strong>Leider fehlt </strong>mir dazu oft <strong>in </strong>den <strong>Videos die Zeit</strong>, da ich denke, dass man einen <strong>Beitrag einfacher durchscrollen </strong>kann.</p>



<p><strong>Sicherlich </strong>ist man vom Fernseher und von Videos <strong>gewohnt</strong>, hier und da mal <strong>durch </strong>zu <strong>zappen</strong>.</p>



<p>Ich <strong>finde allerdings</strong>, dass das <strong>Scrollen zu </strong>bestimmten <strong>Überschriften </strong>einfacher und <strong>leichter </strong>von der Hand geht.</p>



<p><strong>Glücklicherweise hat <a href="https://youtube.com" target="_blank" rel="noreferrer noopener">YouTube</a></strong> seit längerer Zeit <strong>eine </strong>Art <strong>Kapitelübersicht </strong>hinzugefügt.</p>



<style>
.margin-after-video-block {
  margin-top: 1em;
}
</style>



<h2 class="wp-block-heading">Wie ich auf den Beitrag kam</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/09/Haeufige-Backgroundworker-Fragen.jpg"><img loading="lazy" decoding="async" width="640" height="320" src="https://robbelroot.de/wp-content/uploads/2021/09/Haeufige-Backgroundworker-Fragen.jpg" alt="VB NET MouseMove – Cursor bewegen" class="wp-image-5986"/></a><figcaption>VB NET MouseMove – Cursor bewegen</figcaption></figure>



<p><strong>Auch wenn </strong>wir damit <strong>wie </strong>oben schon <strong>erwähnt </strong>vermutlich keinen &#8222;OSU!&#8220;-Bot bauen können, <strong>geht </strong>dennoch <strong>einiges</strong>.</p>



<p><strong>In Kombination mit </strong>den anderen <strong>unten verlinkten Funktionalitäten </strong>kann man so manches realisieren.</p>



<p><strong>Ich selbst kam nicht selten in </strong>die <strong>Versuchung</strong> gewisse <strong>Tools </strong>zur Erleichterung meiner Arbeit und auch des Gamings zu <strong>umzusetzen</strong>.</p>



<p><strong>Daher </strong>beschäftigen wir uns <strong>in diesem Beitrag </strong>damit, <strong>wie </strong>man gewisse <strong>Mausbewegungen via Code </strong>steuern kann.</p>



<p>Im <strong>nächsten </strong>Teil des Beitrags schauen wir dazu allerdings erstmal die <strong>notwendigen Tools </strong>an.</p>



<p><strong>Danach </strong>beschäftigen wir uns <strong>mit </strong>dem <strong>Aufsetzen des </strong>Visual Studio <strong>Projektes und </strong>der <strong>Installation der </strong>notwendigen <strong>Bibliotheken</strong>.</p>



<h2 class="wp-block-heading">Nicht ohne Hilfe – wir nutzen AutoIt</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png" alt="Mit Hilfe von AutoIt" class="wp-image-6341" title="Mit Hilfe von AutoIt"/></a><figcaption>Mit Hilfe von AutoIt</figcaption></figure>



<p><strong>Für unser Vorhaben</strong>, Welches <strong>auch roh </strong>in VB NET <strong>möglich </strong>wäre, <strong>verwenden </strong>wir <strong>hier </strong>allerdings bewusst die Bibliothek von <strong>AutoIt3</strong>.</p>



<p><strong>Ich habe</strong> im <a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/" target="_blank" rel="noreferrer noopener"><strong>&#8222;ImageSearch&#8220;-Beitrag</strong></a> schon einmal angesprochen dass <strong>viele Entwickler kritisch mit </strong>der <strong>Speichergröße </strong>der Projekte umgehen.</p>



<p><strong>In erster Linie </strong>ist das natürlich völlig <strong>nachvollziehbar</strong>, da ich <strong>selbst </strong>ein <strong>Freund des KISS (Keep It Smart and Simple)</strong> bin.</p>



<p><strong>Ich denke </strong>allerdings, dass es Situationen gibt, wo <strong>man </strong>es auch <strong>übertreiben kann</strong>.</p>



<p>In <strong>Festplatten</strong>&#8211;<strong>Generation </strong>&#8222;<strong>Terrabyte zum Preis von damaligen 80GB</strong>&#8220; nörgle ich nicht für 1MB rum.</p>



<p><strong>Das </strong>was <strong>letztendlich zählen </strong>sollte, ist die <strong>Relation zwischen Aufwand und Erfolg</strong>, bzw. das Erreichen des Ziels.</p>



<p><strong>In intelligent </strong>entwickelten, bzw. <strong>strukturierten Programmen </strong>ist der <strong>spätere Austausch </strong>kein Problem.</p>



<p><strong>Daher </strong>immer <strong>schön sauber </strong>mit Interfaces und deren Implementierungen <strong>arbeiten </strong>*zwinker*.</p>



<h2 class="wp-block-heading">Ein neues Projekt anlegen und in Visual Studio vorbereiten</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png"><img loading="lazy" decoding="async" width="640" height="380" src="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png" alt="Neues Visual Studio Projekt anlegen und vorbereiten" class="wp-image-6352" title="Neues Visual Studio Projekt anlegen und vorbereiten"/></a><figcaption>Neues Visual Studio Projekt anlegen und vorbereiten</figcaption></figure>



<p><strong>Nun</strong> wären wir an der Stelle, die <strong><a href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener"><strong>notwendigen</strong> Libraries</a> </strong>herunterzuladen.</p>



<p>Erledige das gern direkt hier, oder suche Dir <strong>anderweitige Quellen </strong>im Netz dafür.</p>



<p><strong>Erstelle</strong> danach einfach ein <strong>neues </strong>Windows Forms-, oder ein WPF-<strong>Projekt</strong>.</p>



<p><strong>Füge</strong> die &#8222;<strong>AutoItX3.Assembly.dll</strong>&#8222;-Datei nun als Verweis hinzu, <strong>damit </strong>wir Diese im Code nutzen können.</p>



<p>Relativ simpel geht das in Visual Studio zum Beispiel außen rechts <strong>über </strong>den <strong>Projektmappen-Explorer</strong>.</p>



<p><strong>Führe </strong>dazu einfach einen <strong>rechten Mausklick </strong>auf &#8222;<strong>Verweise</strong>/<strong>Abhängigkeiten</strong>&#8220; <strong>aus </strong>und wähle die Datei aus.</p>



<p><strong>Neben </strong>dem genannten Weg, gibt es <strong>auch </strong>noch <strong>andere Möglichkeiten</strong>, zum Beispiel über das obige &#8222;Hauptmenü&#8220;.</p>



<p><strong>Kopiere </strong>anschließend <strong>alle anderen </strong>Dateien (außer die ImageSearchDLL.dll) <strong>in </strong>den <strong>Debug-Ordner</strong> deines Projekts.</p>



<p>Die <strong>oben </strong>erwähnte <strong>Datei </strong>dürfte sich <strong>aufgrund </strong>des <strong>Imports schon </strong>im Ordner befinden.</p>



<h2 class="wp-block-heading">Der Code – VB NET MouseMove</h2>



<p><strong>Nun </strong>kommen wir <strong>endlich </strong>an den Punkt, wo wir uns <strong>an </strong>den <strong>Code </strong>heranwagen.</p>



<p><strong>Nachdem </strong>Du <strong>alle Vorbereitungen abgeschlossen </strong>hast, kann Du <strong>nun </strong>den <strong>Namespace importieren</strong>.</p>



<p><strong>Dadurch </strong>kannst Du dann auf die <strong>benötigte Klasse </strong>zugreifen:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports AutoIt</pre>



<p>Durch die <strong>nun verfügbare Klasse </strong>&#8222;<strong>AutoItX</strong>&#8222;, können wir <strong>jetzt </strong>die <strong>Mausbewegungen </strong>an sich realisieren.</p>



<p><strong>Klicke </strong>Dir <strong>nun </strong>vielleicht <strong>noch </strong>vorher <strong>eine GUI </strong>wie Diese hier, mit <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.label?view=net-5.0" target="_blank" rel="noreferrer noopener">2 Labels</a></strong>, <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.textbox?view=net-5.0" target="_blank" rel="noreferrer noopener">2 Textboxen</a></strong> und einen <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.button?view=net-5.0" target="_blank" rel="noreferrer noopener">Button</a></strong> zurecht:</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB-NET-Maus-bewegen-Beispiel-GUI.png"><img loading="lazy" decoding="async" width="320" height="222" src="https://robbelroot.de/wp-content/uploads/2021/10/VB-NET-Maus-bewegen-Beispiel-GUI.png" alt="VB NET Maus bewegen Beispiel GUI" class="wp-image-6489" title="VB NET Maus bewegen Beispiel GUI"/></a><figcaption>VB NET Maus bewegen Beispiel GUI</figcaption></figure>



<p>Die <strong>beiden Labels sollen </strong>Dich auch noch <strong>in </strong>einem <strong>halben Jahr </strong>dran<strong> erinnern</strong>, <strong>welche Inputs wohin </strong>müssen.</p>



<p>Bei den <strong>Textboxen </strong>verzichten wir bei der <strong>Eingabe </strong>der <strong>Koordinaten </strong>in diesem Beispiel auf eine Prüfung.</p>



<p>Wir prüfen also nicht explizit, <strong>ob </strong>es sich dabei <strong>wirklich </strong>um <strong>Zahlen </strong>handelt, etc.</p>



<p><strong>Anschließend holen </strong>wir uns die <strong>Koordinaten </strong>aus den Textboxen <strong>und wandeln </strong>Diese um.</p>



<p><strong>Dafür </strong>verwenden wir natürlich den korrekten <strong>Datentyp </strong>namens <strong>Integer</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim x = Integer.Parse(tbX.Text)
Dim y = Integer.Parse(tbY.Text)</pre>



<p><strong>Nun </strong>kommen wir <strong>zum </strong>goldenen Teil des Beitrages, also der <strong>Durchführung </strong>der <strong>Mausbewegung </strong>selbst.</p>



<p><strong>Dazu </strong>benutzen wir die <strong>importierte Klasse </strong>&#8222;AutoItX&#8220; in Kombination <strong>mit </strong>den gerade festgelegten <strong>Koordinaten</strong>.</p>



<p><strong>Optional </strong>könntest Du <strong>auch </strong>noch eine Art <strong>Geschwindigkeit der Bewegung</strong>, bzw. der &#8222;Animation&#8220; <strong>festlegen </strong>.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim movementSpeed = 50
AutoItX.MouseMove(x, y, movementSpeed)</pre>



<p>Als <strong>nächstes </strong>möchte ich die <strong>Parameter </strong>noch der Vollständigkeit halber <strong>erläutern</strong>, oder eher auflisten.</p>



<p><strong>Detailliertere Informationen </strong>findest Du <strong>auf </strong>der offiziellen <strong>Seite</strong>, bzw. der <strong><a href="https://www.autoitscript.com/autoit3/docs/functions/MouseMove.htm" target="_blank" rel="noreferrer noopener">offiziellen Dokumentation</a></strong>:</p>



<h3 class="wp-block-heading">MouseMove-Parameter</h3>



<h4 class="wp-block-heading">x As Integer</h4>



<p> Gibt den Koordinaten-Punkt des Klicks auf der horizontalen (X) Achse an.</p>



<h4 class="wp-block-heading">y As Integer</h4>



<p> Setzt die Koordinate des auszuführenden Klicks auf der vertikalen (Y) Achse. </p>



<h4 class="wp-block-heading">speed As Integer</h4>



<p>Gibt die Geschwindigkeit der Bewegung an.</p>



<h2 class="wp-block-heading">Der komplette Code – TL;DR</h2>



<p><strong>Obwohl </strong>der Code hier vermutlich <strong>nicht durch </strong>seine <strong>Quantität glänzt</strong>, hier nochmal alles in einem Stück.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports AutoIt

Public Class Form1

    Private Sub btnMoveMouse_Click(sender As Object, e As EventArgs) Handles btnMoveMouse.Click
        Dim x = Integer.Parse(tbX.Text)
        Dim y = Integer.Parse(tbY.Text)
        Dim moveSpeed = 50
        AutoItX.MouseMove(x, y, moveSpeed)
    End Sub

End Class</pre>



<h2 class="wp-block-heading">Weiterführende Links</h2>



<ul class="wp-block-list"><li><strong><a href="https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/" target="_blank" rel="noreferrer noopener">Visual Basic NET MouseClick simulieren</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/" target="_blank" rel="noreferrer noopener">VB NET ImageSearch in Spielen, auf dem Desktop, etc.</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vbnet-texterkennung-auf-bildern/" target="_blank" rel="noreferrer noopener">Visual Basic .NET Texterkennung auf Bildern via Google Cloud Vision API [OCR]</a></strong></li></ul>



<h2 class="wp-block-heading">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener">AutoItPackage.zip</a></div>



<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/MouseMoveExample.zip" target="_blank" rel="noreferrer noopener">MouseMoveExample.zip</a></div>
</div>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-mousemove-mausbewegungen-mit-autoit3-simulieren/">VB NET MouseMove – Mausbewegungen mit AutoIt3 simulieren</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vb-net-mousemove-mausbewegungen-mit-autoit3-simulieren/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>VB NET MouseClick simulieren – mit AutoIt3</title>
		<link>https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/</link>
					<comments>https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sat, 02 Oct 2021 18:14:30 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[ausführen]]></category>
		<category><![CDATA[autoit]]></category>
		<category><![CDATA[autoit3]]></category>
		<category><![CDATA[autoklick]]></category>
		<category><![CDATA[autoklicker]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[automatisch]]></category>
		<category><![CDATA[automatisieren]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[click]]></category>
		<category><![CDATA[klick]]></category>
		<category><![CDATA[klicken]]></category>
		<category><![CDATA[mausklick]]></category>
		<category><![CDATA[mouseclick]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[simulate]]></category>
		<category><![CDATA[simulieren]]></category>
		<category><![CDATA[steuern]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[visual]]></category>
		<category><![CDATA[visual basic]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=6393</guid>

					<description><![CDATA[<p>VB NET MouseClick simulieren Einen VB NET MouseClick simulieren zu können wollte vermutlich jeder Entwickler schon einmal. Ich würde sogar sagen, jeder Gamer sowieso, denn wer hat schon Lust auf die typische &#8222;Monkey-Work&#8220;. Zig tausend mal die gleichen Dialoge in exakter Reihenfolge zu bestätigen und sich mühselig manuell durchzuklicken. Also &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/">VB NET MouseClick simulieren – mit AutoIt3</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseClick-simulieren.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseClick-simulieren.png" alt="VB.NET MouseClick simulieren" class="wp-image-6395" title="VB.NET MouseClick simulieren"/></a><figcaption>VB.NET MouseClick simulieren</figcaption></figure>






<h2 class="wp-block-heading">VB NET MouseClick simulieren</h2>



<p>Einen <strong>VB NET MouseClick simulieren</strong> zu können wollte vermutlich jeder Entwickler schon einmal.</p>



<p>Ich <strong>würde </strong>sogar <strong>sagen</strong>, <strong>jeder Gamer </strong>sowieso, denn wer hat schon Lust auf die typische &#8222;Monkey-Work&#8220;.</p>



<p><strong>Zig tausend mal </strong>die <strong>gleichen Dialoge </strong>in exakter Reihenfolge zu <strong>bestätigen </strong>und sich <strong>mühselig </strong>manuell <strong>durchzuklicken</strong>.</p>



<p>Also echt mal, da hat doch <strong>keiner Bock drauf</strong>, seufz, jedenfalls aller spätestens beim 2, 3, .. Mal.</p>



<p><strong>Natürlich </strong>treffen wir <strong>ähnliche Bedürfnisse </strong>und <strong>Probleme </strong>auch <strong>im Büroalltag </strong>an, Excel, usw. lassen lieb grüßen.</p>



<p><strong>Ein Glück</strong>, dass man (angehender) <strong>Entwickler </strong>ist, gell &#x1f609;!</p>



<h2 class="wp-block-heading">Auf YouTube ansehen –  VB NET MouseClick simulieren</h2>



<iframe loading="lazy" width="560" height="315" src="https://www.youtube-nocookie.com/embed/wlG_qTQF7fk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>



<p class="margin-after-video-block"><strong>Falls </strong>Du <strong>eher </strong>für eine <strong>visuelle Darstellung </strong>des Beitrages zu haben bist, <strong>kannst </strong>Du Dir <strong>natürlich auch </strong>das <strong>Video </strong>(vielleicht auch ergänzend zum Beitrag) <strong>anschauen</strong>.</p>



<p><strong>Bei </strong>meinen Beiträgen bringe ich gerne auch immer diverse Detail-Infos, oder andere Dinge hinein.</p>



<p><strong>Leider fehlt </strong>mir dazu oft <strong>in </strong>den <strong>Videos die Zeit</strong>, da ich denke, dass man einen <strong>Beitrag einfacher durchscrollen </strong>kann.</p>



<p>Vor allem den Beitrag sinnvoll zu gliedern ist denke ich einfacher, <strong>als durch </strong>ein <strong>Video </strong>zu <strong>zappen</strong>.</p>



<p><strong>Immerhin hat <a href="https://youtube.com" target="_blank" rel="noreferrer noopener">YouTube</a></strong> seit geraumer Zeit <strong>eine </strong>Art <strong>Kapitelübersicht </strong>hinzugefügt, Welche ich auch gern verwende.</p>



<style>
.margin-after-video-block {
  margin-top: 1em;
}
</style>



<h2 class="wp-block-heading">Die Idee zum Beitrag – VB NET MouseClick</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/09/BackgroundWorker-starten.jpg"><img loading="lazy" decoding="async" width="640" height="360" src="https://robbelroot.de/wp-content/uploads/2021/09/BackgroundWorker-starten.jpg" alt="VB NET MouseClick - Die Idee zum Beitrag" class="wp-image-5991" title="VB NET MouseClick - Die Idee zum Beitrag"/></a><figcaption>VB NET MouseClick &#8211; Die Idee zum Beitrag</figcaption></figure>



<p><strong>Man möchte sich </strong>im Optimalfall natürlich <strong>selbst helfen </strong>können und <strong>besonders </strong>auch <strong>zukunftsorientiert</strong>.</p>



<p><strong>Gerne hätte man </strong>eine Art <strong>Hilfe </strong>in Form einer Person, der man dann einfach sagen könnte &#8222;<strong>Mach </strong>das <strong>mal</strong>..&#8220;.</p>



<p><strong>Als Programmierer können wir </strong>uns kreativen Köpfen selbstverständlich <strong>selbst </strong>unter die Arme greifen, man weiß nur nicht immer wie.</p>



<p><strong>Daher lass</strong>&#8218; <strong>mich Dir </strong>mit diesem kleinen Beitrag <strong>helfen </strong>und zeigen, wie Du einen <strong>VB NET MouseClick</strong> mit der Hilfe von <strong><a href="https://www.autoitscript.com/site/" target="_blank" rel="noreferrer noopener">AutoIt3</a></strong> durchführen kannst.</p>



<p><strong>Dadurch kannst Du </strong>dann verschiedene Tools wie <strong>diverse Klicker</strong>&#8211;<strong>Bots </strong>realisieren und Dir Deinen <strong>Alltag erleichtern</strong>.</p>



<h2 class="wp-block-heading">Nicht ohne mein AutoIt</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png" alt="Mit Hilfe von AutoIt" class="wp-image-6341" title="Mit Hilfe von AutoIt"/></a><figcaption>Mit Hilfe von AutoIt</figcaption></figure>



<p>Naja <strong>etwas witzig angelehnt </strong>die Headline hier, <strong>aber tatsächlich </strong>werden wir dieses kleine Geplänkel <strong>nicht ohne AutoIt3 </strong>realisieren.</p>



<p><strong>Klar gibt </strong>es auch die <strong>Möglichkeit </strong>in VB NET <strong>einfach </strong>ich nenne es mal &#8222;<strong>manuell</strong>&#8220; einen <strong>Mausklick </strong>zu <strong>simulieren</strong>, aber ich find&#8217;s hier <strong>mit AutoIt3 </strong>definitiv <strong>angenehmer</strong>.</p>



<p><strong>Wie auch </strong>im <a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/" target="_blank" rel="noreferrer noopener"><strong>&#8222;ImageSearch&#8220;-Beitrag</strong></a> schon angesprochen gehen <strong>viele Entwickler kritisch mit </strong>der <strong>Speichergröße </strong>der Projekte um.</p>



<p>Das <strong>kann ich </strong>natürlich <strong>nachvollziehen</strong>, da ich <strong>selbst </strong>ein <strong>Freund des Minimalismus </strong>bin, <strong>jedoch </strong>kann man die <strong>Kirche </strong>auch <strong>im Dorf lassen</strong>.</p>



<p>Ich würde mit Sicherheit in <strong>Festplatten</strong>&#8211;<strong>Generation </strong>&#8222;<strong>Terrabyte zum Preis von damaligen 80GB</strong>&#8220; nicht anfangen für 1MB rumzunörgeln.</p>



<p><strong>Letztendlich </strong>muss man ja <strong>immer </strong>den möglichen <strong>Mehrwert in Relation zur Eigenarbeit</strong> sehen.</p>



<p><strong>Später </strong>kannst Du <strong>bei </strong>einem intelligent <strong>strukturierten Programm natürlich </strong>bedürftige <strong>Komponenten </strong>isoliert <strong>austauschen</strong>.</p>



<h2 class="wp-block-heading">Projekt in Visual Studio vorbereiten</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png"><img loading="lazy" decoding="async" width="640" height="380" src="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png" alt="Neues Visual Studio Projekt anlegen und vorbereiten" class="wp-image-6352" title="Neues Visual Studio Projekt anlegen und vorbereiten"/></a><figcaption>Neues Visual Studio Projekt anlegen und vorbereiten</figcaption></figure>



<p><strong>Lade </strong>Dir <strong>jetzt </strong>die <strong><a href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener">benötigten Bibliotheken</a></strong> direkt hier <strong>herunter</strong>, oder suche alternativ nach <strong>anderen Quellen</strong> im Netz.</p>



<p><strong>Danach </strong>kannst Du wie üblich ein <strong>neues </strong>Windows Forms-, oder auch ein WPF-<strong>Projekt anlegen</strong>.</p>



<p><strong>Lege </strong>die &#8222;<strong>AutoItX3.Assembly.dll</strong>&#8222;-Datei nun als Verweis an, <strong>damit </strong>dein Projekt <strong>damit arbeiten </strong>kann.</p>



<p>Ganz <strong>einfach </strong>geht das zum Beispiel rechts <strong>über </strong>den <strong>Projektmappen-Explorer</strong> in Visual Studio.</p>



<p><strong>Führe </strong>dazu einfach einen <strong>rechten Mausklick </strong>auf &#8222;<strong>Verweise</strong>/<strong>Abhängigkeiten</strong>&#8220; <strong>aus </strong>und wähle die Datei aus.</p>



<p><strong>Neben </strong>dem Weg über den <strong>Projektmappen</strong>&#8211;<strong>Explorer </strong>gibt es <strong>auch </strong>noch <strong>andere Möglichkeiten</strong>.</p>



<p><strong>Kopiere </strong>anschließend <strong>alle anderen </strong>Dateien (außer die ImageSearchDLL.dll) <strong>in </strong>den <strong>Debug-Ordner</strong> deines Projekts.</p>



<p>Die <strong>oben </strong>erwähnte <strong>Datei </strong>dürfte sich <strong>aufgrund </strong>des <strong>Imports schon </strong>im Ordner befinden.</p>



<h2 class="wp-block-heading">Nun zum Code – VB NET MouseClick</h2>



<p>Sehen wir uns <strong>im nächsten Schritt </strong>den benötigten <strong>Code </strong>im Detail an.</p>



<p><strong>Wenn </strong>Du alle <strong>vorherigen Schritte abgeschlossen </strong>hast, kannst Du <strong>nun </strong>den korrekten <strong>Import </strong>durchführen:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports AutoIt</pre>



<p><strong>Damit </strong>wird <strong>im aktuellen Scope </strong>die &#8222;AutoItX&#8220;-<strong>Klasse verfügbar</strong>, womit wir im nächsten Part den Klick realisieren können.</p>



<p><strong>Zuvor </strong>kannst Du Dir allerdings <strong>noch </strong>eine <strong>solche </strong>(oder ähnliche) <strong>GUI zurechtklicken </strong>– relativ simpel.</p>



<p><strong>Füge </strong>einfach nur <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.label?view=net-5.0" target="_blank" rel="noreferrer noopener">2 Labels</a></strong>, <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.textbox?view=net-5.0" target="_blank" rel="noreferrer noopener">2 Textboxen</a></strong> und einen <strong><a href="https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.button?view=net-5.0" target="_blank" rel="noreferrer noopener">Button</a> </strong>hinzu:</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseClick-simulieren-Beispiel-GUI.png"><img loading="lazy" decoding="async" width="296" height="147" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-MouseClick-simulieren-Beispiel-GUI.png" alt="VB.NET MouseClick simulieren Beispiel-GUI" class="wp-image-6431" title="VB.NET MouseClick simulieren Beispiel-GUI"/></a><figcaption>VB.NET MouseClick simulieren Beispiel-GUI</figcaption></figure>



<p>Die <strong>2 Labels</strong> sollen <strong>einfach </strong>nur ein wenig <strong>fürs Auge </strong>klar machen, <strong>welche Inputs</strong>, <strong>wo hinein </strong>müssen.</p>



<p><strong>Bei </strong>den <strong>Textboxen </strong>handelt es sich um <strong>Eingabefelder für </strong>die <strong>Koordinaten</strong>, allerdings verzichten wir hier im Code auf Prüfungen.</p>



<p><strong>Wir werden </strong>also <strong>der Einfachheit halber nicht </strong>weiter <strong>überprüfen</strong>, <strong>ob </strong>es sich bei den Eingaben um <strong>Zahlen </strong>handelt, bzw. <strong>ob </strong>etwas <strong>eingegeben </strong>wurde.</p>



<p><strong>Nun ziehen </strong>wir die <strong>Koordinaten aus </strong>den <strong>Textboxen </strong>und wandeln Diese dann in <strong>Ganzzahlen </strong>vom Typ <strong><a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/language-reference/data-types/integer-data-type" target="_blank" rel="noreferrer noopener">Integer</a></strong> um:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim x = Integer.Parse(tbX.Text)
Dim y = Integer.Parse(tbY.Text)</pre>



<p><strong>Danach </strong>können wir dann die wichtige und <strong>essentielle AutoIt3-Funktion</strong> namens &#8222;<strong>MouseClick</strong>&#8220; verwenden:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AutoItX.MouseClick("LEFT", x, y, 1, 50)</pre>



<h3 class="wp-block-heading">MouseClick-Parameter</h3>



<p>Die <strong>möglichen Parameter </strong>möchte ich <strong>hier </strong>einmal näher erläutern:</p>



<p><strong>Weitere Informationen </strong>findest Du <strong>in </strong>der <strong><a href="https://www.autoitscript.com/autoit3/docs/functions/MouseClick.htm" target="_blank" rel="noreferrer noopener">offiziellen Dokumentation</a></strong> von AutoIt.</p>



<h4 class="wp-block-heading">button As String</h4>



<p><strong>Hier </strong>können wir den <strong>gewünschten Button als String </strong>übergeben, mögliche Werte sind: &#8222;&#8220; (leer), &#8222;LEFT&#8220;, &#8222;MIDDLE&#8220;, &#8222;RIGHT&#8220;, &#8222;PRIMARY&#8220;, &#8222;MAIN&#8220;, &#8222;SECONDARY&#8220;, &#8222;MENU&#8220;. <strong>Wenn </strong>ein <strong>leerer String </strong>übergeben wird, wird <strong>automatisch </strong>die <strong>linke Maustaste </strong>verwendet.</p>



<h4 class="wp-block-heading">x As Integer</h4>



<p>Gibt den Koordinaten-Punkt des Klicks auf der horizontalen (X) Achse an.</p>



<h4 class="wp-block-heading">y As Integer</h4>



<p>Setzt die Koordinate des auszuführenden Klicks auf der vertikalen (Y) Achse.</p>



<h4 class="wp-block-heading">numClicks As Integer</h4>



<p><strong>Legt </strong>die <strong>Anzahl der </strong>durchzuführenden <strong>Klicks </strong>an den Koordinaten <strong>fest</strong>.</p>



<h4 class="wp-block-heading">speed As Integer</h4>



<p>Gibt die Geschwindigkeit der durchzuführenden Klicks an.</p>



<h2 class="wp-block-heading">Der komplette Code – TL;DR</h2>



<p>Es ist <strong>zwar nicht viel</strong>, oder gar komplexer Code, <strong>aber hier </strong>siehst Du Ihn <strong>in einem</strong> <strong>Stück </strong>– vielleicht für die &#8222;TL;DR&#8220;-guys haha.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports AutoIt

Public Class Form1

    Private Sub btnExecuteClick_Click(sender As Object, e As EventArgs) Handles btnExecuteClick.Click
        Dim x = Integer.Parse(tbX.Text)
        Dim y = Integer.Parse(tbY.Text)
        AutoItX.MouseClick("LEFT", x, y, 1, 50)
    End Sub

End Class</pre>



<h2 class="wp-block-heading">Weiterführende Links</h2>



<ul class="wp-block-list"><li><strong><a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen" target="_blank" rel="noreferrer noopener">VB NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vb-net-web-api-waehrungskurs-service-konsum-von-grund-auf-erklaert" target="_blank" rel="noreferrer noopener">VB NET Web API &#8211; Währungskurs Service Konsum von Grund auf erklärt</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vbnet-texterkennung-auf-bildern/" target="_blank" rel="noreferrer noopener">VB.NET Texterkennung auf Bildern via Google Cloud Vision API [OCR]</a></strong></li></ul>



<h2 class="wp-block-heading">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener">AutoItPackage.zip</a></div>



<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/MouseClickExample.zip" target="_blank" rel="noreferrer noopener">MouseClickExample.zip</a></div>
</div>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/">VB NET MouseClick simulieren – mit AutoIt3</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>VB NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen</title>
		<link>https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/</link>
					<comments>https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/#comments</comments>
		
		<dc:creator><![CDATA[Robert Skibbe]]></dc:creator>
		<pubDate>Sat, 02 Oct 2021 00:36:32 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Visual Basic .NET]]></category>
		<category><![CDATA[Visual Basic .NET Problemlösungen]]></category>
		<category><![CDATA[au3]]></category>
		<category><![CDATA[autoclick]]></category>
		<category><![CDATA[autoclicker]]></category>
		<category><![CDATA[autoit]]></category>
		<category><![CDATA[autoit3]]></category>
		<category><![CDATA[autoklick]]></category>
		<category><![CDATA[autoklicker]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[automatisieren]]></category>
		<category><![CDATA[benutzen]]></category>
		<category><![CDATA[bibliotheken]]></category>
		<category><![CDATA[bild]]></category>
		<category><![CDATA[bilder suchen]]></category>
		<category><![CDATA[bildsuche]]></category>
		<category><![CDATA[dll]]></category>
		<category><![CDATA[einbetten]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[hilfe]]></category>
		<category><![CDATA[hinzufügen]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[imagesearch]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[nutzen]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[use]]></category>
		<category><![CDATA[vb.net]]></category>
		<category><![CDATA[vbnet]]></category>
		<category><![CDATA[verweis]]></category>
		<category><![CDATA[visual basic]]></category>
		<guid isPermaLink="false">https://robbelroot.de/?p=6322</guid>

					<description><![CDATA[<p>VB.NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen Eine VB NET ImageSearch, also eine Bildersuche wollte vermutlich jeder Entwickler im NET Umfeld einmal realisieren. Ach Gott wie präsent mir diese Momente noch im Gedächtnis sind, kleines Beispiel gefällig? Kein Problem! Egal ob beim Ingame-Angeln, wo man praktisch immer &#8230;</p>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/">VB NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-Image-Search.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-Image-Search.png" alt="" class="wp-image-6324"/></a></figure>






<h2 class="wp-block-heading">VB.NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen</h2>



<p>Eine <strong>VB NET ImageSearch</strong>, also eine <strong>Bildersuche </strong>wollte vermutlich <strong>jeder </strong>Entwickler im NET Umfeld <strong>einmal </strong>realisieren.</p>



<p>Ach Gott <strong>wie präsent </strong>mir diese Momente <strong>noch im Gedächtnis </strong>sind, kleines Beispiel gefällig? Kein Problem!</p>



<p><strong>Egal ob </strong>beim Ingame-<strong>Angeln</strong>, wo man praktisch <strong>immer </strong>wieder die exakt <strong>gleichen Aktionen </strong>durchführt, <strong>oder </strong>beim &#8222;<strong>craften</strong>&#8220; von Gegenständen..</p>



<p><strong>Auch wenn </strong>diese Beispiele <strong>eher </strong>mit dem <strong>Gaming</strong>-Sektor zu tun haben, gibt es <strong>mit Sicherheit </strong>genug <strong>Einsatzmöglichkeiten im Büro</strong>.</p>



<p><strong>So oder so </strong>hat man sicherlich<strong> nicht immer Lust</strong> <strong>und </strong>vor allem die <strong>Zeit,</strong> diese Art von &#8222;Monkey-Work&#8220;, also praktisch die Arbeit für &#8222;Blöde&#8220; zu erledigen.</p>



<h2 class="wp-block-heading">Auf YouTube ansehen –  VB NET ImageSearch</h2>



<iframe loading="lazy" width="560" height="315" src="https://www.youtube-nocookie.com/embed/ZrNPF36GA3g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>



<p class="margin-after-video-block"><strong>Falls </strong>Du die <strong>visuelle Darstellung</strong>, bzw. Erklärung des Beitrages <strong>bevorzugst</strong>, <strong>kannst </strong>Du natürlich auch das dementsprechende <strong>Video anschauen</strong>.</p>



<p><strong>Ich habe </strong>allerdings in diesem Beitrag einige <strong>Neben-Themen</strong> <strong>eingebracht </strong>und kann mir <strong>auch </strong>hier die <strong>Zeit nehmen</strong>, ein wenig <strong>drum rum </strong>zu erklären.</p>



<p><strong>Dieser Beitrag </strong>hier ist daher etwas länger und <strong>ausführlicher </strong>als das Video – just sayin&#8216;.</p>



<style>
.margin-after-video-block {
  margin-top: 1em;
}
</style>



<h2 class="wp-block-heading">Ursprung und Idee zum Beitrag &#8211; VB NET ImageSearch</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/09/Button-–-eine-kleine-Wiederholung.jpg"><img loading="lazy" decoding="async" width="640" height="361" src="https://robbelroot.de/wp-content/uploads/2021/09/Button-–-eine-kleine-Wiederholung.jpg" alt="VB NET ImageSearch – Die Idee zum Beitrag" class="wp-image-6047" title="VB NET ImageSearch – Die Idee zum Beitrag"/></a><figcaption>VB NET ImageSearch – Die Idee zum Beitrag</figcaption></figure>



<p><strong>In solchen </strong>häufig wiederkehrenden <strong>Momenten hat </strong>man sicherlich das <strong>Bedürfnis</strong> nach Hilfe.</p>



<p>Man <strong>möchte </strong>seinem <strong>Hausroboter </strong>einfach sagen können: &#8222;Hey, <strong>mach </strong>Du <strong>das bitte </strong>mal, ich habe keine Lust&#8220;.</p>



<p><strong>Schnell wird </strong>man allerdings <strong>feststellen</strong>, <strong>dass </strong>das <strong>zu oft </strong>einfach <strong>nicht geht</strong>, bis auf in bestimmten Fällen.</p>



<p><strong>Als Entwickler </strong>haben wir natürlich <strong>glücklicherweise </strong>die <strong>Möglichkeit </strong>uns <strong>verschiedene </strong>Hilfsmittel zu <strong>bauen</strong>.</p>



<p>Ob <strong>privat</strong>, <strong>beruflich</strong>, oder für&#8217;s <strong>Spielen </strong>diverser Spiele, können wir uns viele <strong>Hilfsmittel programmieren</strong>.</p>



<p><strong>Vom </strong>einfachen <strong>Angel-Bot</strong>, Welcher eine bestimmte Abfolge immer wieder abarbeitet, <strong>bis </strong>hin <strong>zu komplexeren </strong>Bereichen.</p>



<p><strong>Darunter könnte </strong>ich mir z. B. einen &#8222;<strong>Crafter-Bot</strong>&#8220; vorstellen, <strong>Welcher nach </strong>gewissen <strong>Commands </strong>wie &#8222;Strg+Alt+&lt;XY&gt;&#8220; komplexe <strong>Gegenstände erstellen </strong>kann.</p>



<h2 class="wp-block-heading">Hilfsmittel zur Hand</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png"><img loading="lazy" decoding="async" width="1200" height="675" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-mit-Hilfe-von-AutoIt.png" alt="VB.NET ImageSearch mit Hilfe von AutoIt" class="wp-image-6341" title="VB.NET ImageSearch mit Hilfe von AutoIt"/></a><figcaption>VB.NET ImageSearch mit Hilfe von AutoIt</figcaption></figure>



<p>Wir <strong>arbeiten </strong>in diesem Beitrag <strong>nicht ohne </strong>weitere <strong>Hilfsmittel</strong>, warum sollte man auch darauf verzichten.</p>



<p><strong>Viele </strong>nützliche <strong>Funktionalitäten </strong>wurden <strong>bereits erfunden und </strong>erfolgreich über lange Zeit <strong>getestet</strong>.</p>



<p><strong>Für </strong>viele <strong>Entwickler spielt </strong>natürlich die <strong>Größe </strong>der jeweiligen Hilfsmittel eine <strong>Rolle</strong>, man <strong>möchte</strong> natürlich <strong>keine </strong>2GB <strong>großen Tools </strong>installieren.</p>



<p><strong>Viele sehen </strong>allerdings schon <strong>rot</strong>, <strong>wenn </strong>die einzelnen Helfer <strong>bereits </strong>an eine <strong>Größe von </strong>1-2 Megabyte rangehen.</p>



<p><strong>In </strong>einer <strong>Zeit wo </strong>man X <strong>Terrabyte </strong>große <strong>Festplatten </strong>schon zum Preis von den damaligen 80GB-Kloppern bekommt, <strong>sehe ich </strong>es allerdings <strong>halb </strong>so <strong>schlimm</strong>.</p>



<p><strong>Ich denke </strong>man muss <strong>letztendlich immer </strong>den <strong>Mehrwert gegenüber </strong>der <strong>Eigenarbeit </strong>in Relation sehen und der Mehrwert lohnt sich hier definitiv.</p>



<p><strong>Wenn </strong>man sein <strong>Programm intelligent entwickelt</strong>, hält einen nachher auch nichts davon ab, <strong>gewisse Parts </strong>isoliert <strong>auszutauschen</strong>.</p>



<p><strong>Letztendlich </strong>verwenden wir <strong>dieses Mal </strong>einige <strong>Funktionalitäten </strong>der <strong><a href="https://www.autoitscript.com/site/" target="_blank" rel="noreferrer noopener">AutoIt3</a></strong> Scriptsprache zu Nutze.</p>



<h2 class="wp-block-heading">Vorbereitungen des Visual Studio Projekts</h2>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png"><img loading="lazy" decoding="async" width="640" height="380" src="https://robbelroot.de/wp-content/uploads/2021/10/Neues-Visual-Studio-Projekt-anlegen.png" alt="Neues Visual Studio Projekt anlegen" class="wp-image-6352" title="Neues Visual Studio Projekt anlegen"/></a><figcaption>Neues Visual Studio Projekt anlegen</figcaption></figure>



<p><strong>Lade </strong>Dir <strong>nun </strong>am besten die <strong><a href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener">von mir bereitgestellten Bibliotheken</a></strong> herunter, oder suche Diese alternativ im Netz.</p>



<p><strong>Erstelle</strong> im nächsten Schritt <strong>nun </strong>wie gewohnt ein <strong>neues </strong>Windows Forms-, oder z. B. ein neues WPF-<strong>Projekt</strong>.</p>



<p><strong>Füge </strong>die <strong>heruntergeladene </strong>&#8222;AutoItX3.Assembly.dll&#8220;-<strong>Datei </strong>nun <strong>als Verweis </strong>in dein Projekt <strong>ein </strong>– die anderen Dateien werden nicht funktionieren.</p>



<p>Einen <strong>Verweis </strong>kannst Du <strong>über </strong>den <strong>Projektmappen</strong>&#8211;<strong>Explorer </strong>rechts außen im Visual Studio <strong>hinzufügen</strong>.</p>



<p><strong>Klicke </strong>dazu <strong>einfach </strong>mit der <strong>rechten Maustaste auf </strong>&#8222;<strong>Verweise</strong>&#8220; und <strong>suche nach </strong>der <strong>Datei</strong>, wähle alternativ einen anderen Weg.</p>



<p>Du musst <strong>danach </strong>auch <strong>sämtliche anderen Dateien in </strong>das <strong>Debug</strong>&#8211;<strong>Verzeichnis </strong>deines Projekts <strong>legen</strong>.</p>



<p>Die <strong>oben Genannte </strong>ist <strong>bereits </strong>durch den vorhin geschehenen Import <strong>vorhanden</strong>.</p>



<h2 class="wp-block-heading">Ran an den Code –  VB NET ImageSearch </h2>



<p><strong>Die Funktion </strong>um die sich hier so gut wie alles drehen wird ist die <strong>&#8222;ImageSearch&#8220;-Funktion</strong> <strong>aus </strong>der &#8222;ImageSearchDLL.dll&#8220;.</p>



<p>Man <strong>beachte </strong>hier <strong>die komische Schreibweise</strong>, Welche trotz &#8222;doppelt-gemoppelt&#8220; tatsächlich richtig ist..</p>



<p><strong>Diese</strong> Funktion muss erst einmal wie folgt aus der passenden Library <strong>importiert werden</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">    &lt;DllImport("ImageSearchDLL.dll")>
    Private Shared Function ImageSearch(
                                 x As Integer,
                                 y As Integer,
                                 right As Integer,
                                 bottom As Integer,
                                 imagePath As String) As IntPtr
    End Function</pre>



<p><strong>Vergiss </strong>hier auch <strong>nicht </strong>den <strong>Import des </strong>&#8222;DllImport&#8220;-<strong>Attributs</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports System.Runtime.InteropServices</pre>



<p>Ich denke, dass die <strong>Parameter der Funktion </strong>zwar relativ einleuchtend sind, <strong>gehe </strong>aber dennoch gerne <strong>darauf ein</strong>.</p>



<p><strong>Dabei </strong>wird Dir denke ich das <strong>folgende Bild </strong>noch ein wenig unter die Arme greifen:</p>



<figure class="wp-block-image size-full"><a href="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-Searching-Area.png"><img loading="lazy" decoding="async" width="640" height="380" src="https://robbelroot.de/wp-content/uploads/2021/10/VB.NET-ImageSearch-Searching-Area.png" alt="VB.NET ImageSearch Searching Area" class="wp-image-6367" title="VB.NET ImageSearch Searching Area"/></a><figcaption>VB.NET ImageSearch Searching Area</figcaption></figure>



<p><strong>Je kleiner </strong>der <strong>durchsuchte Bereich </strong>ist und <strong>je weniger Bildfläche </strong>somit durchsucht werden muss, <strong>desto schneller </strong>ist die Bildsuche natürlich.</p>



<h3 class="wp-block-heading">Parameter</h3>



<h4 class="wp-block-heading">x As Integer</h4>



<p>Der X-Parameter gibt an, auf welcher <strong>Position der X-Achse</strong> die Funktion <strong>anfangen </strong>soll zu suchen.</p>



<h4 class="wp-block-heading">y As Integer</h4>



<p><strong>Als nächstes </strong>wird der Y-Parameter übergeben, um zu <strong>definieren</strong>, <strong>ab</strong> <strong>welcher Position</strong> auf der vertikalen Achse des Bildschirms gesucht werden soll. <strong>Achtung</strong>: Von <strong>oben nach unten </strong>gesehen = <strong>je größer </strong>der Wert, <strong>desto weiter unten </strong>auf dem Bildschirm.</p>



<h4 class="wp-block-heading">right As Integer</h4>



<p>Gibt an, <strong>bis </strong>zu <strong>welchem Punkt </strong>auf der <strong>X</strong>-Achse gesucht werden soll.</p>



<h4 class="wp-block-heading">bottom As Integer</h4>



<p>Legt fest, <strong>bis </strong>zu <strong>welchem vertikalen Punkt </strong>auf der Y-Achse gesucht wird.</p>



<h4 class="wp-block-heading">imagePath As String</h4>



<p><strong>Hier </strong>kannst Du den <strong>Pfad zum Bild </strong>angeben (z. B. &#8222;my_button.png&#8220;). <strong>Achtung</strong>: <strong>Wenn </strong>Du eine gewisse <strong>Toleranz </strong>für die Suche angeben möchtest, kannst Du dies <strong>mit </strong>einem <strong>voranstehenden Leerzeichen und </strong>dem <strong>einem Wert von 0-255 </strong>machen. Das sieht dann wie folgt aus: &#8222;50 my_button.png&#8220;. Wenn Du meine Wrapper-Klasse verwendest, macht Diese das für Dich.</p>



<h2 class="wp-block-heading">Ein einfacher Aufruf –  VB NET ImageSearch </h2>



<p><strong>Schaue </strong>Dir <strong>hier </strong>einen <strong>einfachen</strong>, beispielhaften <strong>Aufruf </strong>der rohen &#8222;ImageSearch&#8220;-Funktion <strong>an</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">' dont forget the import..
' Imports AutoIt

Dim x = 0
Dim y = 0
Dim right = 1920 ' full screen width, adjust..
Dim bottom = 1080 ' full screen height, adjust..
Dim tolerance = 50 ' a tolerance value between 0 and 255
Dim imagePath = "my_button.png"
Dim finalImagePath = $"{tolerance} {imagePath}"

Dim result = ImageSearch(x, y, right, bottom, finalImagePath)
Dim res = Marshal.PtrToStringAnsi(result)

Dim imageFound = res(0) = "1"
If Not imageFound Then
    MessageBox.Show("Image not found")
    Return
End If

Dim data = res.Split("|")

x = Integer.Parse(data(1))
y = Integer.Parse(data(2))

' optional, getting image dimensions
' Dim width = Integer.Parse(data(3))
' Dim height = Integer.Parse(data(4))

' do something with the coordinates, like moving to it
AutoItX.MouseMove(x, y)</pre>



<h2 class="wp-block-heading">Meine kleinen Hilfsklassen</h2>



<p><strong>Hier </strong>zeige ich Dir <strong>beiden </strong>(wirklich) <strong>kleinen Hilfsklassen</strong>, Welche die Arbeit mit der &#8222;ImageSearch&#8220;-Funktion ein wenig vereinfachen soll.</p>



<h3 class="wp-block-heading">ImageSearchResult-Klasse</h3>



<p>Die <strong>einfachere Klasse </strong>von beiden kommt dabei <strong>zuerst</strong>, einfach nur ein <strong>Zwischenspeicher für </strong>die <strong>Werte </strong>(alternativ könnte man eine <a href="https://docs.microsoft.com/de-de/dotnet/visual-basic/programming-guide/language-features/data-types/how-to-declare-a-structure" target="_blank" rel="noreferrer noopener"><strong>Structure </strong></a>verwenden).</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Public Class ImageSearchResult

    Public Property Found As Boolean

    Public Property X As Integer

    Public Property Y As Integer

    Public Property Width As Integer

    Public Property Height As Integer

    Sub New(found As Boolean)
        Me.Found = found
    End Sub

End Class</pre>



<h3 class="wp-block-heading">ImageSearch-Klasse</h3>



<p><strong>Hier </strong>wäre die <strong>Klasse</strong>, <strong>Welche </strong>Dir die <strong>Aufrufe </strong>der &#8222;ImageSearch&#8220;-Funktion ein wenig <strong>vereinfachen </strong>könnte:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Imports System.Runtime.InteropServices

Public NotInheritable Class ImageSearch

    &lt;DllImport("ImageSearchDLL.dll")>
    Private Shared Function ImageSearch(
                                 x As Integer,
                                 y As Integer,
                                 right As Integer,
                                 bottom As Integer,
                                 imagePath As String) As IntPtr
    End Function

    Public Shared Function Execute(imagePath As String, Optional tolerance As Integer = 0) As ImageSearchResult
        Dim workingArea = Screen.PrimaryScreen.WorkingArea
        Dim result = DoSearch(0, 0, workingArea.Width, workingArea.Height, imagePath, tolerance)
        Return result
    End Function

    Public Shared Function Execute(x As Integer, y As Integer, right As Integer, bottom As Integer, imagePath As String, Optional tolerance As Integer = 0) As ImageSearchResult
        Dim result = DoSearch(x, y, right, bottom, tolerance, imagePath)
        Return result
    End Function

    Public Shared Function Execute(location As Point, rightBottom As Point, imagePath As String, Optional tolerance As Integer = 0) As ImageSearchResult
        Dim result = DoSearch(location.X, location.Y, rightBottom.X, rightBottom.Y, tolerance, imagePath)
        Return result
    End Function

    Private Shared Function DoSearch(x As Integer, y As Integer, right As Integer, bottom As Integer, imagePath As String, Optional tolerance As Integer = 0) As ImageSearchResult
        imagePath = $"*{tolerance} {imagePath}"

        Dim result = ImageSearch(x, y, right, bottom, imagePath)
        Dim res = Marshal.PtrToStringAnsi(result)

        Dim imageSearchResult = New ImageSearchResult(res(0) &lt;> "0")
        If Not imageSearchResult.Found Then
            Return imageSearchResult
        End If

        Dim data = res.Split("|")

        imageSearchResult.X = Integer.Parse(data(1))
        imageSearchResult.Y = Integer.Parse(data(2))

        imageSearchResult.Width = Integer.Parse(data(3))
        imageSearchResult.Height = Integer.Parse(data(4))

        Return imageSearchResult
    End Function

End Class</pre>



<h3 class="wp-block-heading">Ein Beispiel mit den Hilfsklassen</h3>



<p><strong>Hier </strong>folgt nun das <strong>Beispiel mit </strong>Hilfe der <strong>Hilfsklassen</strong>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="visualbasic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Dim result = ImageSearch.Execute("stop_button.png")
' providing a tolerance
' ImageSearch.Execute("stop_button.png", 50)
' and more overloads..
If Not result.Found Then
    MessageBox.Show("Image not found")
    ' if inside a sub, etc..
    Return
End If
' move to the found coordinates
AutoItX.MouseMove(result.X, result.Y)</pre>



<p><strong>Besonders interessant </strong>dabei sind die <strong>verschiedenen Überladungen</strong>, <strong>Welche </strong>Dir den <strong>Aufruf </strong>vermutlich <strong>verkürzen </strong>werden.</p>



<h2 class="wp-block-heading">Weiterführende Links</h2>



<ul class="wp-block-list"><li><strong><a href="https://robbelroot.de/blog/vb-net-mouseclick-simulieren-mit-autoit3/" target="_blank" rel="noreferrer noopener">VB NET MouseClick simulieren – mit AutoIt3</a></strong></li><li><strong><a href="https://robbelroot.de/blog/vb-net-web-api-waehrungskurs-service-konsum-von-grund-auf-erklaert/" target="_blank" rel="noreferrer noopener">VB NET Web API &#8211; Währungskurs Service Konsum von Grund auf erklärt</a></strong></li></ul>



<h2 class="wp-block-heading">Downloads</h2>



<div class="wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/tools/AutoItPackage.zip" target="_blank" rel="noreferrer noopener">AutoIt Library Package.zip</a></div>



<div class="wp-block-button"><a class="wp-block-button__link" href="/downloads/vbnet/ImageSearchExample.zip" target="_blank" rel="noreferrer noopener">ImageSearchExample.zip</a></div>
</div>
<p>Der Beitrag <a href="https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/">VB NET ImageSearch – Bilder in Spielen, Desktop und Co. suchen</a> erschien zuerst auf <a href="https://robbelroot.de">Robert Skibbe</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://robbelroot.de/blog/vb-net-imagesearch-bilder-in-spielen-desktop-und-co-suchen/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
