<?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[SendMessage schickt Unsinn]]></title><description><![CDATA[<p>Ich habe vor ein paar Tagen VisualBasic aufgegeben wegen eines Programmierfehlers von Microsoft (glaubte ich). Das Problem war folgendes:<br />
Ich sendete mit SendMessage(hWndTV, TVM_EXPAND, 8001, ?weißIchNichtMehr?) die Nachricht an die SysTreeView32 der WindowsMedia Player Library. Als es nach verschiedenen Versuchen nicht funktionierte, habe ich mit Spy++ herausgefunden, dass statt 0x00008001 0xFFFF8001 angekommen war. Der lParam hatte immer irgendeinen unsinnigen Wert. Deshalb bin ich auf Visual C++ umgestiegen. Innerhalb kurzer Zeit hab ich es geschafft ein neues Item in die fremde TreeView einzufügen. Einen Tag später hat das ganze plötzlich nicht mehr funktioniert. Die Pointer auf die TVINSERTSTRUCT waren im Programmcode und in der abgefangenen Nachricht über Spy++ identisch, aber immer gleich:0012FEFC (glaub ich) auch nach einem Neustart des PCs, wo sich doch eigentlich der Zeiger auf die Speicherstelle verändert haben müsste. wParam und uMsg stimmten auch noch überein. Aber die TVINSERTSTRUCT in lParam gaben jedesmal irgendwelche Werte zurück, die ich auf keinen Fall so definiert habe.</p>
<p>Jetzt sitze ich seit zwei Tagen da, drehe und wende das Programm und es FUNKTIONIERT EINFACH NICHT MEHR!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Hilft mir bitte ich bin am verzweifeln...</p>
<pre><code class="language-cpp">//Imports
#include &lt;windows.h&gt;		//Fensterprozeduren
#include &lt;commctrl.h&gt;
#include &lt;winuser.h&gt;

//Deklarationen
HWND FindWindowMN();
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//Variablen
LONG OldWndProc;

//Einsprungsfunktion
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   TVINSERTSTRUCTA pTvInsert;
	TVITEMA         pItem;
	HWND           hWndTV;
	HTREEITEM      hItem;
	DWORD dwError;

	SetLastError(0);
	dwError = GetLastError();

	//Definiere Window-handle der Medienbibliotheksnavigation
	hWndTV = FindWindowMN();
	if(SendMessage(hWndTV, TVM_GETCOUNT, 0, 0) == 0)
	{
		if   (hWndTV == 0) MessageBox(NULL, &quot;Fenster nicht gefunden&quot;, &quot;Fehler&quot;, 0);
		else MessageBox(NULL, &quot;Fenster ist keine TreeView&quot;, &quot;Fehler&quot;, 0);
		return 0;
	}

	OldWndProc = GetWindowLong(hWndTv, GWL_WNDPROC);
	if (!(SetWindowLong(hWndTV, GWL_WNDPROC, (LONG) &amp;NewWndProc))) MessageBox(0, &quot;WNDPROC konnte verändert werden&quot;, &quot;Fehler&quot;, 0);

	pTvInsert.hInsertAfter = TVI_LAST;
	pTvInsert.hParent = TVI_ROOT;
	pTvInsert.item.cChildren = 0;
	pTvInsert.item.cchTextMax = 10;
	pTvInsert.item.hItem = 0;
	pTvInsert.item.iImage = 0;
	pTvInsert.item.iSelectedImage = 0;
	pTvInsert.item.lParam = 0;
	pTvInsert.item.mask = TVIF_TEXT;
	pTvInsert.item.pszText = &quot;Testentry&quot;;
	pTvInsert.item.state = 0;
	pTvInsert.item.stateMask = 0;

	//Neues Element einfügen
	hItem = TreeView_InsertItem(hWndTV, &amp;pTvInsert);
	dwError = GetLastError();
	if (hItem == 0) MessageBox(NULL, (const char *) GetLastError(), &quot;Fehler&quot;, 0);

	/*Neues Element anpassen
	pItem.mask = TVIF_HANDLE;
	pItem.hItem = hItem;
	if(SendMessage(hWndTV, TVM_GETITEM, 0, (LONG) &amp;pItem) == 0)
	{
		MessageBox(NULL, &quot;Item konnte nicht geladen werden&quot;, &quot;Fehler&quot;, 0);
	}
	else
	{
		pItem.mask = pItem.mask || TVIF_TEXT;
		pItem.pszText = &quot;Sampler&quot;;
		SendMessage(hWndTV, TVM_SETITEM, 0, (LONG) &amp;pItem);
	}
	*/
	return 0;
}

//Findet die TreeView der Mediennavigation
HWND FindWindowMN()
{
	HWND hwndTopLevel;
	HWND hwndRet;

	hwndTopLevel = FindWindow(&quot;WMPlayerAPP&quot;, NULL);
	hwndRet = FindWindowEx(hwndTopLevel, NULL, &quot;WMPAppHost&quot;, NULL);
	hwndRet = GetWindow(hwndRet, GW_CHILD);
	hwndRet = GetWindow(hwndRet, GW_CHILD);
	return FindWindowEx(hwndRet, NULL, &quot;SysTreeView32&quot;, NULL);
}

//Neue Fensterprozedur
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	const char charHWND   = (const char) hwnd;
	const char charLPARAM = (const char) &amp;lParam;
	MessageBox(NULL, *charLPARAM, *charHWND, 0);
}
</code></pre>
<p>Die restlchen Unfertigkeiten sind egal, ich hab das mal schnell beim Arbeiten kopiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/98850/sendmessage-schickt-unsinn</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 03:47:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/98850.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Jan 2005 11:17:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SendMessage schickt Unsinn on Sun, 23 Jan 2005 11:17:35 GMT]]></title><description><![CDATA[<p>Ich habe vor ein paar Tagen VisualBasic aufgegeben wegen eines Programmierfehlers von Microsoft (glaubte ich). Das Problem war folgendes:<br />
Ich sendete mit SendMessage(hWndTV, TVM_EXPAND, 8001, ?weißIchNichtMehr?) die Nachricht an die SysTreeView32 der WindowsMedia Player Library. Als es nach verschiedenen Versuchen nicht funktionierte, habe ich mit Spy++ herausgefunden, dass statt 0x00008001 0xFFFF8001 angekommen war. Der lParam hatte immer irgendeinen unsinnigen Wert. Deshalb bin ich auf Visual C++ umgestiegen. Innerhalb kurzer Zeit hab ich es geschafft ein neues Item in die fremde TreeView einzufügen. Einen Tag später hat das ganze plötzlich nicht mehr funktioniert. Die Pointer auf die TVINSERTSTRUCT waren im Programmcode und in der abgefangenen Nachricht über Spy++ identisch, aber immer gleich:0012FEFC (glaub ich) auch nach einem Neustart des PCs, wo sich doch eigentlich der Zeiger auf die Speicherstelle verändert haben müsste. wParam und uMsg stimmten auch noch überein. Aber die TVINSERTSTRUCT in lParam gaben jedesmal irgendwelche Werte zurück, die ich auf keinen Fall so definiert habe.</p>
<p>Jetzt sitze ich seit zwei Tagen da, drehe und wende das Programm und es FUNKTIONIERT EINFACH NICHT MEHR!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
Hilft mir bitte ich bin am verzweifeln...</p>
<pre><code class="language-cpp">//Imports
#include &lt;windows.h&gt;		//Fensterprozeduren
#include &lt;commctrl.h&gt;
#include &lt;winuser.h&gt;

//Deklarationen
HWND FindWindowMN();
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//Variablen
LONG OldWndProc;

//Einsprungsfunktion
int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   TVINSERTSTRUCTA pTvInsert;
	TVITEMA         pItem;
	HWND           hWndTV;
	HTREEITEM      hItem;
	DWORD dwError;

	SetLastError(0);
	dwError = GetLastError();

	//Definiere Window-handle der Medienbibliotheksnavigation
	hWndTV = FindWindowMN();
	if(SendMessage(hWndTV, TVM_GETCOUNT, 0, 0) == 0)
	{
		if   (hWndTV == 0) MessageBox(NULL, &quot;Fenster nicht gefunden&quot;, &quot;Fehler&quot;, 0);
		else MessageBox(NULL, &quot;Fenster ist keine TreeView&quot;, &quot;Fehler&quot;, 0);
		return 0;
	}

	OldWndProc = GetWindowLong(hWndTv, GWL_WNDPROC);
	if (!(SetWindowLong(hWndTV, GWL_WNDPROC, (LONG) &amp;NewWndProc))) MessageBox(0, &quot;WNDPROC konnte verändert werden&quot;, &quot;Fehler&quot;, 0);

	pTvInsert.hInsertAfter = TVI_LAST;
	pTvInsert.hParent = TVI_ROOT;
	pTvInsert.item.cChildren = 0;
	pTvInsert.item.cchTextMax = 10;
	pTvInsert.item.hItem = 0;
	pTvInsert.item.iImage = 0;
	pTvInsert.item.iSelectedImage = 0;
	pTvInsert.item.lParam = 0;
	pTvInsert.item.mask = TVIF_TEXT;
	pTvInsert.item.pszText = &quot;Testentry&quot;;
	pTvInsert.item.state = 0;
	pTvInsert.item.stateMask = 0;

	//Neues Element einfügen
	hItem = TreeView_InsertItem(hWndTV, &amp;pTvInsert);
	dwError = GetLastError();
	if (hItem == 0) MessageBox(NULL, (const char *) GetLastError(), &quot;Fehler&quot;, 0);

	/*Neues Element anpassen
	pItem.mask = TVIF_HANDLE;
	pItem.hItem = hItem;
	if(SendMessage(hWndTV, TVM_GETITEM, 0, (LONG) &amp;pItem) == 0)
	{
		MessageBox(NULL, &quot;Item konnte nicht geladen werden&quot;, &quot;Fehler&quot;, 0);
	}
	else
	{
		pItem.mask = pItem.mask || TVIF_TEXT;
		pItem.pszText = &quot;Sampler&quot;;
		SendMessage(hWndTV, TVM_SETITEM, 0, (LONG) &amp;pItem);
	}
	*/
	return 0;
}

//Findet die TreeView der Mediennavigation
HWND FindWindowMN()
{
	HWND hwndTopLevel;
	HWND hwndRet;

	hwndTopLevel = FindWindow(&quot;WMPlayerAPP&quot;, NULL);
	hwndRet = FindWindowEx(hwndTopLevel, NULL, &quot;WMPAppHost&quot;, NULL);
	hwndRet = GetWindow(hwndRet, GW_CHILD);
	hwndRet = GetWindow(hwndRet, GW_CHILD);
	return FindWindowEx(hwndRet, NULL, &quot;SysTreeView32&quot;, NULL);
}

//Neue Fensterprozedur
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	const char charHWND   = (const char) hwnd;
	const char charLPARAM = (const char) &amp;lParam;
	MessageBox(NULL, *charLPARAM, *charHWND, 0);
}
</code></pre>
<p>Die restlchen Unfertigkeiten sind egal, ich hab das mal schnell beim Arbeiten kopiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/703701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/703701</guid><dc:creator><![CDATA[DjFishbone]]></dc:creator><pubDate>Sun, 23 Jan 2005 11:17:35 GMT</pubDate></item></channel></rss>