<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[An Fensterhandle kommen]]></title><description><![CDATA[<p>Hallo,<br />
ich muss aus einem Treeview Daten auslesen, komme aber nicht so recht<br />
an das eigentliche Treeview ran. In Spy++ stellt es sich etwa so dar:</p>
<p>-&gt;Fenster 0066542 &quot;&quot;ATL:023DE870<br />
|---&gt;Fenster 00205C0 &quot;&quot;ATL:023DE870<br />
|---&gt;Fenster 12345X0 &quot;&quot;ATL:023DE870<br />
.|-----&gt;Fenster 45121 &quot;&quot; TreeView20WndClass</p>
<p>Diese ATL-Fensterdinges gibt es mehrfach und ich finde irgendwie wohl<br />
immer nur das erste, müsste aber in das zweite rein, weil darunter<br />
das Treeview liegt.</p>
<p>Kann man irgendwie diese Handlenummer die direkt nach &quot;Fenster&quot; kommt<br />
direkt mit angeben, oder ist die auf jedem PC unterschiedlich?</p>
<p>Mein Versuch war soweit dieser hier:</p>
<pre><code class="language-cpp">//..
if(child = ::FindWindowEx(child,0,&quot;ATL:023DE870&quot;,0)) 
		{ 

			if(child = ::FindWindowEx(child,0,&quot;ATL:023DE870&quot;,0)) 
			{ 

			if(child = ::FindWindowEx(child,0,&quot;TreeView20WndClass&quot;,0)) 
			{ 
					::SendMessage(child,WM_GETTEXT,255,(long)&amp;buffer[0]); 
					CString tmp = &amp;buffer[0]; 
					AfxMessageBox(tmp); 
			}else
			{
				MessageBox(&quot;treeview nicht gefunden&quot;);
			}

			}else
			{
				MessageBox(&quot;zweites atl-fenster nicht gefunden&quot;);
			}

			} else
		{
			MessageBox(&quot;erstes atl-fenster nicht gefunden!&quot;);
		}
</code></pre>
<p>Ich erhalte meine Meldung, dass das Treeview nicht gefunden wurde...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244635/an-fensterhandle-kommen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 20:01:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244635.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 03 Jul 2009 08:44:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to An Fensterhandle kommen on Fri, 03 Jul 2009 08:44:54 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich muss aus einem Treeview Daten auslesen, komme aber nicht so recht<br />
an das eigentliche Treeview ran. In Spy++ stellt es sich etwa so dar:</p>
<p>-&gt;Fenster 0066542 &quot;&quot;ATL:023DE870<br />
|---&gt;Fenster 00205C0 &quot;&quot;ATL:023DE870<br />
|---&gt;Fenster 12345X0 &quot;&quot;ATL:023DE870<br />
.|-----&gt;Fenster 45121 &quot;&quot; TreeView20WndClass</p>
<p>Diese ATL-Fensterdinges gibt es mehrfach und ich finde irgendwie wohl<br />
immer nur das erste, müsste aber in das zweite rein, weil darunter<br />
das Treeview liegt.</p>
<p>Kann man irgendwie diese Handlenummer die direkt nach &quot;Fenster&quot; kommt<br />
direkt mit angeben, oder ist die auf jedem PC unterschiedlich?</p>
<p>Mein Versuch war soweit dieser hier:</p>
<pre><code class="language-cpp">//..
if(child = ::FindWindowEx(child,0,&quot;ATL:023DE870&quot;,0)) 
		{ 

			if(child = ::FindWindowEx(child,0,&quot;ATL:023DE870&quot;,0)) 
			{ 

			if(child = ::FindWindowEx(child,0,&quot;TreeView20WndClass&quot;,0)) 
			{ 
					::SendMessage(child,WM_GETTEXT,255,(long)&amp;buffer[0]); 
					CString tmp = &amp;buffer[0]; 
					AfxMessageBox(tmp); 
			}else
			{
				MessageBox(&quot;treeview nicht gefunden&quot;);
			}

			}else
			{
				MessageBox(&quot;zweites atl-fenster nicht gefunden&quot;);
			}

			} else
		{
			MessageBox(&quot;erstes atl-fenster nicht gefunden!&quot;);
		}
</code></pre>
<p>Ich erhalte meine Meldung, dass das Treeview nicht gefunden wurde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736444</guid><dc:creator><![CDATA[Shell32off]]></dc:creator><pubDate>Fri, 03 Jul 2009 08:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Fri, 03 Jul 2009 13:08:45 GMT]]></title><description><![CDATA[<p>Halloo habe das Fenster jetzt bekommen, kann gerne die Lösung posten am<br />
Montag (Wochenende juhuuu!!).</p>
<p>Nur jetzt weiss ich nicht, wie ich am besten die Daten aus dem externen Treeview<br />
mit SendMessage abhole.</p>
<p>Mein Versuch ist vermutlich totaler Käse <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">TVITEM tvi;
		ZeroMemory(&amp;tvi,sizeof(tvi));
		tvi.mask=TVIF_PARAM;
		::SendMessage(child,TVM_GETITEM,0,(long)&amp;tvi);

		CString val;
		val=tvi.pszText;
		MessageBox(bb,&quot;Wert des Eintrages im Treeview&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1736628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736628</guid><dc:creator><![CDATA[Shell32off]]></dc:creator><pubDate>Fri, 03 Jul 2009 13:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Fri, 03 Jul 2009 17:30:39 GMT]]></title><description><![CDATA[<p>Jein, nicht ganz. Also wenn du als .mask = TVIF_PARAM angibst, dann wird dir die GetItem Funktion auch nur .lParam füllen und nix anderes. Wenn du .pszText haben willst musst du:</p>
<p>1. einen Buffer dafür bereitstellen<br />
2. die Buffergröße in die Itemstruktur eintragen<br />
3. TVIF_TEXT für die .mask angeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736797</guid><dc:creator><![CDATA[*guggstdu*]]></dc:creator><pubDate>Fri, 03 Jul 2009 17:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Fri, 03 Jul 2009 17:32:15 GMT]]></title><description><![CDATA[<p>4. einen gültigen Handle auf ein Item unter .hItem angeben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736798</guid><dc:creator><![CDATA[*guggstdu*]]></dc:creator><pubDate>Fri, 03 Jul 2009 17:32:15 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Sat, 04 Jul 2009 16:19:49 GMT]]></title><description><![CDATA[<p>Du kannst aus dem Treeview gar nichts abholenn, wenn das Fenster zu einem anderen Prozess gehört. Dazu müsstest Du Code in diesen Prozess injezieren, oder anderes schweinisches machen.</p>
<p>Alle Zeiger, die Du übergibst beziehen sich immer auf Deinen Prozess und sind in dem anderen Prozess ungültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737086</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 04 Jul 2009 16:19:49 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Mon, 06 Jul 2009 08:00:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mich weiter im Forum umgesehen und auch eine Lösung gefunden.<br />
Dabei verstehe ich noch nicht, wie man durch die ganzen Einträge des<br />
Treeview enumerieren kann (also an Unterelemente ran kommt).</p>
<p>Ich erhalte immer das Rootelement, was wohl an TVGN_ROOT liegt.<br />
Aber an welcher Stelle baue ich eine for-schleife o.ä. ein?<br />
Ich muss ja irgendwie effektiv TVM_GETNEXTITEM nutzen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Sorry für meine absolute Unwissenheit, aber könnte mir jemand weiterhelfen?</p>
<p>Hier der relevante Teil:</p>
<pre><code class="language-cpp">GetWindowThreadProcessId(hWnd3, &amp;procid); 

		hproc = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, procid); 

		pt = VirtualAllocEx(hproc, NULL,  sizeof(tvItem), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 

		tvItem.mask = TVIF_TEXT | TVIF_HANDLE ; 
		tvItem.pszText =  (LPSTR)pt;
		tvItem.cchTextMax = 100; 

			it=(HTREEITEM)::SendMessage(hWnd3, TVM_GETNEXTITEM, TVGN_ROOT, 0); 
		tvItem.hItem = it; 

		WriteProcessMemory(hproc, pt,&amp;tvItem, sizeof(tvItem), NULL); 

		::SendMessage(hWnd3, TVM_GETITEM, 0, (LONG)pt); 

		ReadProcessMemory(hproc, pt,&amp;tvItem, sizeof(tvItem), NULL); 
		ReadProcessMemory(hproc, LPCVOID(pt),&amp;buffer, sizeof(buffer), NULL);  
		MessageBox(buffer,&quot;Eintrag im Treeview&quot;);

		VirtualFreeEx(hproc, pt, 0, MEM_RELEASE); 

		CloseHandle(hproc);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1737739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737739</guid><dc:creator><![CDATA[Shell32off]]></dc:creator><pubDate>Mon, 06 Jul 2009 08:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to An Fensterhandle kommen on Mon, 06 Jul 2009 09:44:48 GMT]]></title><description><![CDATA[<p>Ok, habe gefunden wie ich die Untereinträge vom Root durchlaufen kann (lParam):</p>
<pre><code class="language-cpp">it=(HTREEITEM)::SendMessage(hWnd3, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)it);
</code></pre>
<p>Und für die Childs darunter dann:</p>
<pre><code class="language-cpp">it=(HTREEITEM)::SendMessage(hWnd3, TVM_GETNEXTITEM,TVGN_CHILD, (LPARAM)it);
</code></pre>
<p>Mal sehen wie ich das sinnvoll in eine Funktion packe um rekursiv alles zu durchlaufen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737796</guid><dc:creator><![CDATA[Shell32off]]></dc:creator><pubDate>Mon, 06 Jul 2009 09:44:48 GMT</pubDate></item></channel></rss>