<?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[Instanzensperrung + Daten austauschen]]></title><description><![CDATA[<p>Ahoi zusammen,<br />
Also ich habe folgendes Problem:</p>
<p>Ich möchte verhindern, dass mein Programm zweimal ausgeführt werden kann! Allerdings soll bei einem 2. Aufruf der Befehlsparamter (LPSTR lpCmdLine) aus der WinMain dem bereits laufenden Programm übermittelt werden bevor sich die 2. Programminstanz schließt. (Ich hoffe das war jez verständlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>Ich überprüfen durch den folgenden Code, ob mein Programm bereits ausgeführt wurde um es -wenn das der Fall war- dann zu beenden:</p>
<pre><code class="language-cpp">// in der WinMain
// ...
HANDLE hMutex;
hMutext = OpenMutex(MUTEX_ALL_ACCESS, FALSE, TEXT(&quot;MeinProgramm&quot;));
if(hMutex == NULL)
{
    hMutex = CreateMutex(MUTEX_ALL_ACCESS, FALSE, TEXT(&quot;MeinProgramm&quot;));
    // =&gt; Das Programm läuft noch nicht:
    //    ...
}
else
{
    // =&gt; Das Programm läuft bereits:
    //    ...
    return (0); // Programm beenden
}
ReleaseMutext(hMutex);
</code></pre>
<p>Der Code funktioniert soweit.</p>
<p>Wie übermittle ich nun dem bereits laufendem Programm den Befehlsstring (lpCmdLine). Hab schon diverses probiert, aber funktioniert hat das alles nicht (richtig).</p>
<p>Hoffe aus hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> und Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/144034/instanzensperrung-daten-austauschen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 10:52:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/144034.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Apr 2006 20:44:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Thu, 13 Apr 2006 20:44:41 GMT]]></title><description><![CDATA[<p>Ahoi zusammen,<br />
Also ich habe folgendes Problem:</p>
<p>Ich möchte verhindern, dass mein Programm zweimal ausgeführt werden kann! Allerdings soll bei einem 2. Aufruf der Befehlsparamter (LPSTR lpCmdLine) aus der WinMain dem bereits laufenden Programm übermittelt werden bevor sich die 2. Programminstanz schließt. (Ich hoffe das war jez verständlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
<p>Ich überprüfen durch den folgenden Code, ob mein Programm bereits ausgeführt wurde um es -wenn das der Fall war- dann zu beenden:</p>
<pre><code class="language-cpp">// in der WinMain
// ...
HANDLE hMutex;
hMutext = OpenMutex(MUTEX_ALL_ACCESS, FALSE, TEXT(&quot;MeinProgramm&quot;));
if(hMutex == NULL)
{
    hMutex = CreateMutex(MUTEX_ALL_ACCESS, FALSE, TEXT(&quot;MeinProgramm&quot;));
    // =&gt; Das Programm läuft noch nicht:
    //    ...
}
else
{
    // =&gt; Das Programm läuft bereits:
    //    ...
    return (0); // Programm beenden
}
ReleaseMutext(hMutex);
</code></pre>
<p>Der Code funktioniert soweit.</p>
<p>Wie übermittle ich nun dem bereits laufendem Programm den Befehlsstring (lpCmdLine). Hab schon diverses probiert, aber funktioniert hat das alles nicht (richtig).</p>
<p>Hoffe aus hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> und Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037168</guid><dc:creator><![CDATA[Häää?]]></dc:creator><pubDate>Thu, 13 Apr 2006 20:44:41 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Thu, 13 Apr 2006 22:43:23 GMT]]></title><description><![CDATA[<p>Hallo, das kannst du mit SendMessage und WM_COPYDATA machen :</p>
<p><a href="http://msdn.microsoft.com/library/?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/datacopyreference/datacopymessages/wm_copydata.asp" rel="nofollow">http://msdn.microsoft.com/library/?url=/library/en-us/winui/winui/windowsuserinterface/dataexchange/datacopy/datacopyreference/datacopymessages/wm_copydata.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037207</guid><dc:creator><![CDATA[Goblin2]]></dc:creator><pubDate>Thu, 13 Apr 2006 22:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Fri, 14 Apr 2006 03:38:13 GMT]]></title><description><![CDATA[<p>ersmal danke für antwort...<br />
Aber da muss man meines Wissens die Daten (also den String) über GlobalAlloc reservieren (und den Pointer dann im lpData-Element sichern)...sowat hab ich so ähnlich schon versucht..und das hat nit gefunzt....weitere Ideen ?</p>
<pre><code class="language-cpp">typedef struct tagCOPYDATASTRUCT {
    ULONG_PTR dwData;
    DWORD cbData;
    PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1037245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037245</guid><dc:creator><![CDATA[häää??]]></dc:creator><pubDate>Fri, 14 Apr 2006 03:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Fri, 14 Apr 2006 12:24:32 GMT]]></title><description><![CDATA[<p>Hat nicht vll einer von euch noch n kleinen Tipp, Hinweis, Codeschnipsle, was weiß ich....<br />
???</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1037417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037417</guid><dc:creator><![CDATA[häää?]]></dc:creator><pubDate>Fri, 14 Apr 2006 12:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Fri, 14 Apr 2006 13:09:15 GMT]]></title><description><![CDATA[<p>wenn dein programm ein fenster hat dann mach das doch mit wm_copydata das is am einfachsten und genau für sowas gedacht. wenn du es unbedingt kompliziert machen willst kannste ja auch den command line string in die laufende programm instanz kopieren und das dem programm dann mit einer eigenen nachricht mitteilen aber ich würd einfach wm_copydata benutzen</p>
<pre><code class="language-cpp">if(!(hMutex = OpenMutex( MUTEX_ALL_ACCESS, FALSE, &quot;LOLMUTEX?&quot; ))) {
		hMutex = CreateMutex( NULL, FALSE, &quot;LOLMUTEX?&quot; );
	}
	else {
		HWND hWnd = FindWindow( NULL, &quot;LOLMutex&quot; );
		if( !hWnd )
			return 0;

		DWORD	dwProcessID;
		HANDLE	hProcess;
		LPVOID	lpMem;

		GetWindowThreadProcessId( hWnd, &amp;dwProcessID );
		hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessID );

		lpMem = VirtualAllocEx( hProcess, NULL, strlen(lpCmdLine) + 1, MEM_COMMIT, PAGE_READWRITE );
		WriteProcessMemory( hProcess, lpMem, lpCmdLine, strlen(lpCmdLine) + 1, NULL );
		CloseHandle(hProcess);

		SendMessage( hWnd, WM_CMDLINE, 0, (LPARAM)lpMem );
		return 0;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1037442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1037442</guid><dc:creator><![CDATA[LOLMutex?]]></dc:creator><pubDate>Fri, 14 Apr 2006 13:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Sat, 15 Apr 2006 17:54:38 GMT]]></title><description><![CDATA[<p>danke für deinen Code ich werd ihn nachher mal ausprobieren ... sieht gut aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038071</guid><dc:creator><![CDATA[hoho...von häää??]]></dc:creator><pubDate>Sat, 15 Apr 2006 17:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Sat, 15 Apr 2006 18:52:44 GMT]]></title><description><![CDATA[<p>Hab nochmal ne Frage; kannst du mir mal die Funktion -&gt; VirtualAllocEx &lt;- erklären...hab die noch nie so richtig gecheckt...<br />
Also mit GlobalAlloc kann man ja 'für alle Proggs' speicher reserv.<br />
mit malloc(C), new(C++) bzw die ganzen WinAPI Paralellen LocalAlloc, etc. ...mit denen man im lokalen Heap speicher reserviert richtig??</p>
<p>Ach ja wenn wir schonmal dabei sind wozu is dann HeapAlloc() ? <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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1038111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038111</guid><dc:creator><![CDATA[häää nochmal^^]]></dc:creator><pubDate>Sat, 15 Apr 2006 18:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Sat, 15 Apr 2006 19:47:13 GMT]]></title><description><![CDATA[<p>Mit VirtualAllocEx kannst du Speicher innerhalb eines fremden Prozesses allozieren. Der 1.Parameter ist das Handle zu dem jeweiligen Prozeß was du mit OpenProcess erhalten kannst.</p>
<p>Details findest du hier, dort werden auch die anderen Funktionen erklärt: <a href="http://msdn.microsoft.com/library/en-us/memory/base/virtualallocex.asp?frame=true" rel="nofollow">http://msdn.microsoft.com/library/en-us/memory/base/virtualallocex.asp?frame=true</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038171</guid><dc:creator><![CDATA[fsdffd]]></dc:creator><pubDate>Sat, 15 Apr 2006 19:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Sat, 15 Apr 2006 19:53:22 GMT]]></title><description><![CDATA[<p>ok ok die Fkts hab ich jez gecheckt, aber ich muss den Speicher im Beispielcodefragment (schönes Wort^^) mit VirtualAllocEx auch wieder freigeben, jez meine Frage...: Welches Flag muss ich angeben: MEM_DECOMMIT oder MEM_RELEASE ? Ich versteh die Erklärungen inner MSDN irg wie nit janz...-&gt; Danke für Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038183</guid><dc:creator><![CDATA[Häää?]]></dc:creator><pubDate>Sat, 15 Apr 2006 19:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to Instanzensperrung + Daten austauschen on Sat, 15 Apr 2006 22:48:43 GMT]]></title><description><![CDATA[<p>ok erledigt is klar: MEM_RELEASE</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1038253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1038253</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Sat, 15 Apr 2006 22:48:43 GMT</pubDate></item></channel></rss>