<?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[Handle des MainWindow eines Prozesses ermitteln]]></title><description><![CDATA[<p>Hallo Allerseits!</p>
<p>Folgendes:</p>
<p>Ich starte in meinem Programm mit CreateProcess() eine Exe und merke mir die dazugehörigen TProcessInformation und TStartupInfo in den entsprechenden Variablen. Jetzt ist es so, dass ich aus einem Menü, in dem die gestarteten Exen gelistet sind, die gestartete Exe wieder in den Vordergrund bringen will.</p>
<p>Also, ich habe eine ProzessId einer Exe und möchte dazu das gehörende MainWindow maximieren bzw. wieder in den Vordergrund bringen.</p>
<p>Wie stelle ich das am Besten an?</p>
<p>F98</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/83416/handle-des-mainwindow-eines-prozesses-ermitteln</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 12:56:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/83416.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Aug 2004 11:36:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Fri, 20 Aug 2004 11:37:21 GMT]]></title><description><![CDATA[<p>Hallo Allerseits!</p>
<p>Folgendes:</p>
<p>Ich starte in meinem Programm mit CreateProcess() eine Exe und merke mir die dazugehörigen TProcessInformation und TStartupInfo in den entsprechenden Variablen. Jetzt ist es so, dass ich aus einem Menü, in dem die gestarteten Exen gelistet sind, die gestartete Exe wieder in den Vordergrund bringen will.</p>
<p>Also, ich habe eine ProzessId einer Exe und möchte dazu das gehörende MainWindow maximieren bzw. wieder in den Vordergrund bringen.</p>
<p>Wie stelle ich das am Besten an?</p>
<p>F98</p>
]]></description><link>https://www.c-plusplus.net/forum/post/587141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587141</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Fri, 20 Aug 2004 11:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Fri, 20 Aug 2004 11:49:38 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=437" rel="nofollow">Jansen</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=2" rel="nofollow">Borland C++ Builder (VCL/CLX)</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=4" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/587157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587157</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 20 Aug 2004 11:49:38 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Fri, 20 Aug 2004 12:24:39 GMT]]></title><description><![CDATA[<p>Mit EnumWindows alle Fenster durchgehen und dir dann jeweils mit GetWindowThreadProcessId dessen Process-ID holen und mit deiner Vergleichen.<br />
Siehe auch: <a href="http://www.c-plusplus.net/forum/viewtopic.php?t=83314" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=83314</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/587178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/587178</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Fri, 20 Aug 2004 12:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Mon, 23 Aug 2004 09:18:10 GMT]]></title><description><![CDATA[<p>Jo, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/588894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/588894</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Mon, 23 Aug 2004 09:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Mon, 23 Aug 2004 13:26:42 GMT]]></title><description><![CDATA[<p>So, mein Code sieht jetzt so aus und funktioniert ... nicht <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>
<pre><code class="language-cpp">HWND hwndFromCallBack;

BOOL CALLBACK EnumWindowsProc2(HWND hwnd, LPARAM lParam)
{
     static DWORD dwID;
     static HWND  hwnd_Owner;

     GetWindowThreadProcessId(hwnd, &amp;dwID);

     if (dwID == (DWORD)lParam)
     {
        hwnd_Owner = GetWindow(hwnd, GW_OWNER);

        if (hwnd_Owner)
        {
           hwndFromCallBack = hwnd_Owner;
           return false;
        }
     }

     return true;
}

...
        if (TempJob)
        {
           // ProzessID ermitteln und an die Callback Fkt. übergeben
           EnumWindows((WNDENUMPROC)EnumWindowsProc2, DBAccess-&gt;GetJobExeProcId(TempJob-&gt;iId));
           HandleWindow = hwndFromCallBack;

           if (HandleWindow != NULL)
           {
              // in den Vordergrund holen
              ShowWindow(HandleWindow, SW_SHOWNORMAL);
              BringWindowToTop(HandleWindow);
              //SendMessage(HandleWindow, WM_SHOWWINDOW, true, 0);
           }
           else
           {
               //Starten
           }
        }

        ...
</code></pre>
<p>Ich starte aus dem Code heraus mit CreateProcess() z.B. calc.exe (ProzessId == 292). Die ProzessID ist korrekt (Taskmanager), nur stimmt in der Callback Funktion 2x &quot;dwID == (DWORD)lParam&quot; überein. GetWindow(hwnd, GW_OWNER) liefert dann 2x &quot;NULL&quot; zurück, also ist hwndFromCallBack ebenfalls NULL.</p>
<p>Letztendlich findet die Funktion nicht das passende Fenster zum Prozess. Was mach ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589112</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Mon, 23 Aug 2004 13:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Mon, 23 Aug 2004 13:36:54 GMT]]></title><description><![CDATA[<p>GetWindow liefert dir NULL zurück, wenn das angegebene Fenster kein Ownerfenster hat. Ich glaub mit GetAncestor(hwnd, GA_ROOTOWNER); gehts. Wenn der Prozess nur ein TopLevel Fenster hat, brauchst du die Funktion gar nicht aufzurufen.</p>
<p>Das static kannst du wegmachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589120</guid><dc:creator><![CDATA[D*niel *chumann]]></dc:creator><pubDate>Mon, 23 Aug 2004 13:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Mon, 23 Aug 2004 14:21:18 GMT]]></title><description><![CDATA[<p>Ok, ich hatte schon sowas vermutet. Meine Lösung sieht jetzt wie folgt aus (funktioniert):</p>
<pre><code class="language-cpp">BOOL CALLBACK EnumWindowsProc2(HWND hwnd, LPARAM lParam)
{
     WINDOWPLACEMENT wp;
     char Caption[255];
     hwndFromCallBack = 0;

     if (!GetWindow(hwnd, GW_OWNER) &amp;&amp; IsWindowVisible(hwnd))
     {
        GetWindowText(hwnd, Caption, 255);
        GetWindowPlacement(hwnd, &amp;wp);

        if (wp.showCmd != SW_HIDE &amp;&amp; strcmp(&quot;&quot;, Caption) != 0)
        {
           DWORD dwID;
           GetWindowThreadProcessId(hwnd, &amp;dwID);
           if (dwID == (DWORD)lParam)
           {
              hwndFromCallBack=hwnd;
              return false;
           }
        }
     }

     return true;
}
</code></pre>
<p>Danke an alle für die 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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/589171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589171</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Mon, 23 Aug 2004 14:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Handle des MainWindow eines Prozesses ermitteln on Mon, 23 Aug 2004 14:33:30 GMT]]></title><description><![CDATA[<p>du kannst die Funktion schneller machen indem du nicht zwei mal prüfst, ob das Fenster sichtbar ist (IsWindowVisible langt) und indem du GetWindowTextLength verwendest um zu prüfen, ob das Fenster ienen Titel hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/589192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/589192</guid><dc:creator><![CDATA[D*niel *chumann]]></dc:creator><pubDate>Mon, 23 Aug 2004 14:33:30 GMT</pubDate></item></channel></rss>