<?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[Fenster in den Vordergrund bringen]]></title><description><![CDATA[<p>Hey!</p>
<p>Ich möchte gern wissen wie man ein Fenster in den Vordergrund bringt.<br />
Ich kenne die Funktionen BringWindowToTop() und SetForegroundWindow(), allerdings ändert sich das Verhalten dieser Funktionen manchmal!</p>
<p>Habe das lange beobachtet, damals in einem Programm habe ich beide Funktionen untereinander geschrieben, hat gut geklappt. Irgendwann mal ging es plötzlich nicht mehr, das Fenster kam nicht in den Vordergrund. Ich musste die Reihenfolge der Aufrufe vertauschen! Und dann hat aber auch dies irgendwann nicht mehr funktioniert!<br />
Manchmal hat auch nur eine dieser Funktionen ausgereicht um den gewünschten Effekt zu erzielen, aber auch wieder nicht immer...</p>
<p>Aus dem MSDN werde ich nicht schlau!</p>
<ol>
<li>Was bedeutet dies:</li>
</ol>
<p>MSDN schrieb:</p>
<blockquote>
<p>The SetForegroundWindow function puts the thread that created the specified window into the foreground...</p>
</blockquote>
<p>Wie kann ein thread in den Vordergrund gelangen? Threads haben doch nix mit dem Z-Order zu tun...</p>
<ol start="2">
<li>Und das?</li>
</ol>
<p>MSDN schrieb:</p>
<blockquote>
<p>SetForegroundWindow...The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.</p>
</blockquote>
<p>Wieso pfuscht die Funktion in Thread-Prioritäten herum?</p>
<p>Ich verstehe es nicht, was muss ich tun damit ein Fenster ganz sicher im Vordergrund also ganz oben am Stapel erscheint?<br />
Danke!<br />
Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235756/fenster-in-den-vordergrund-bringen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Apr 2026 20:01:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235756.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Mar 2009 07:42:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Fri, 06 Mar 2009 07:42:40 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Ich möchte gern wissen wie man ein Fenster in den Vordergrund bringt.<br />
Ich kenne die Funktionen BringWindowToTop() und SetForegroundWindow(), allerdings ändert sich das Verhalten dieser Funktionen manchmal!</p>
<p>Habe das lange beobachtet, damals in einem Programm habe ich beide Funktionen untereinander geschrieben, hat gut geklappt. Irgendwann mal ging es plötzlich nicht mehr, das Fenster kam nicht in den Vordergrund. Ich musste die Reihenfolge der Aufrufe vertauschen! Und dann hat aber auch dies irgendwann nicht mehr funktioniert!<br />
Manchmal hat auch nur eine dieser Funktionen ausgereicht um den gewünschten Effekt zu erzielen, aber auch wieder nicht immer...</p>
<p>Aus dem MSDN werde ich nicht schlau!</p>
<ol>
<li>Was bedeutet dies:</li>
</ol>
<p>MSDN schrieb:</p>
<blockquote>
<p>The SetForegroundWindow function puts the thread that created the specified window into the foreground...</p>
</blockquote>
<p>Wie kann ein thread in den Vordergrund gelangen? Threads haben doch nix mit dem Z-Order zu tun...</p>
<ol start="2">
<li>Und das?</li>
</ol>
<p>MSDN schrieb:</p>
<blockquote>
<p>SetForegroundWindow...The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.</p>
</blockquote>
<p>Wieso pfuscht die Funktion in Thread-Prioritäten herum?</p>
<p>Ich verstehe es nicht, was muss ich tun damit ein Fenster ganz sicher im Vordergrund also ganz oben am Stapel erscheint?<br />
Danke!<br />
Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675033</guid><dc:creator><![CDATA[Frage8]]></dc:creator><pubDate>Fri, 06 Mar 2009 07:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Fri, 06 Mar 2009 07:57:00 GMT]]></title><description><![CDATA[<p>1. Wenn Du die Forumsuche zu SetForegroundWindow benutzt hättest, wärest Du auch schon auf die Lösungsvorschläge gestossen. Siehe unten.<br />
2. Das Windows den Threads eine höhere Prio zuweist ist nur gut. Der User möchte einen direkten Response auf Mausklicks und Benutzeraktivitäten.<br />
3. Ich hasse es, wenn sich Programme in den Vordergrund zwängen... Das wurde unter W&quot;K verhindert, damit Benutzer eben nichtim Schreiben eines Textes durch ein dämliches Popup unterborchen werden.<br />
Und die Regeln gehen IMHO komplett OK.</p>
<p>Sie MSDN Doku:</p>
<blockquote>
<p>Windows 98/Me: The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:</p>
<p>The process is the foreground process.<br />
The process was started by the foreground process.<br />
The process received the last input event.<br />
There is no foreground process.<br />
The foreground process is being debugged.<br />
The foreground is not locked (see LockSetForegroundWindow).<br />
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).<br />
Windows 2000/XP: No menus are active.<br />
With this change, an application cannot force a window to the foreground while the user is working with another window. Instead, Foreground and Background Windows will activate the window (see SetActiveWindow) and call the function to notify the user.</p>
</blockquote>
<pre><code class="language-cpp">BOOL ForceSetForegroundWindow(HWND hWnd) 
{ 
     // Ist das Fenster gültig 
     if (!hWnd || !::IsWindow(hWnd)) 
         return FALSE; 

     // Aktuelle Werte bestimmen 
     HWND hCurrentWnd  ::GetForegroundWindow(); 
     if (hCurrentWndNULL) 
         /* Wir können einfach das neue ForeGroundWindow setzen 
          * da es aktuell keines gibt */ 
          return ::SetForegroundWindow(hWnd); 

     /* Bestimme Thread und Prozess des aktuellen ForeGroundWindows 
      * damit wir sehen können was zu tun ist und auf welchen 
      * ThreadInput wir uns draufhängen */ 
     DWORD   dwCurrentProcessId, 
             dwCurrentThreadId  ::GetWindowThreadProcessId(hCurrentWnd, 
&amp;dwCurrentProcessId); 

     /* Das ganze ist nur notwendig, wenn der aktuelle Thread 
      * nicht zu dem Process gehört den wir aktivieren 
      * wollen */ 
     DWORD dwHwndProcessId; 
     ::GetWindowThreadProcessId(hWnd, &amp;dwHwndProcessId); 

     // Prüfe ob dies der selbe Process ist 
     BOOL bReturn  FALSE; 
     if (dwHwndProcessIddwCurrentProcessId) 
         /* Normale Funktion verwenden, da die Prozesse sowieso 
          * die selben sind */ 
          bReturn  ::SetForegroundWindow(hWnd); 
     else 
     { 
         // Meinen Thread bestimmen 
         DWORD   dwMyThreadId  ::GetCurrentThreadId(); 

         /* Unter Windows 2000 gibt es dazu eine Sperre, diese 
          * kann jedoch umgangen werden indem wir uns kurz auf den 
          * selben ThreadInput der aktuell im ForeGround ist attachen. 
          * Damit gehören wir beide zum selben ThreadInput und können 
          * SetForeGroundWindow durchführen */ 
         if (::AttachThreadInput(dwMyThreadId,dwCurrentThreadId,TRUE)) 
         { 
             // Nun dürfen wir das, also bringen wir uns in den Foreground 
             bReturn  ::SetForegroundWindow(hWnd); 

             // Nun heben wir den Attach einfach wieder auf 
             ::AttachThreadInput(dwMyThreadId,dwCurrentThreadId,FALSE); 
         } 
         else 
         { 
             /* AttachThreadInput ist schief gegangen dann versuchen 
              * wir es eben normal */ 
             bReturn  ::SetForegroundWindow(hWnd); 
         } 
     } 

     // Und exit 
     return bReturn; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1675042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675042</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 06 Mar 2009 07:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sat, 07 Mar 2009 11:44:44 GMT]]></title><description><![CDATA[<p>nie SetForeGroundWindow() !<br />
siehe in der fortgeschrittenen Gruppe win32<br />
news://nntp.aioe.org/comp.os.ms-windows.programmer.win32</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675638</guid><dc:creator><![CDATA[fred100]]></dc:creator><pubDate>Sat, 07 Mar 2009 11:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Fri, 03 Jul 2009 21:55:19 GMT]]></title><description><![CDATA[<p>Hey!</p>
<p>Hatte wenig Zeit. Nun, ich verstehe den Code nicht ganz. Und braucht es nicht noch ein &quot;AllowSetForegroundWindow()&quot;?</p>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Das Windows den Threads eine höhere Prio zuweist ist nur gut. Der User möchte einen direkten Response auf Mausklicks und Benutzeraktivitäten.</p>
</blockquote>
<p>Und die Priorität wird dann nicht wieder zurückgesetzt? Das finde ich schon eine Pfuscherei...</p>
<p>Martin Richter schrieb:</p>
<blockquote>
<p>Ich hasse es, wenn sich Programme in den Vordergrund zwängen...</p>
</blockquote>
<p>Verständlich. In meinem Fall ist es allerdings nützlich. Bei einem Klick auf ein Tray-Icon soll das Programmfenster ganz oben erscheinen, und nicht irgendwo unten begraben sein.</p>
<p>Wiegesagt, den Code blicke ich nicht ganz, zumal einige Zeichen zu fehlen scheinen. Und warum zwei GetWindowThreadProcessId()-Aufrufe.<br />
Vielleicht wäre jemand so nett und würde den &quot;entfrickeln&quot;.<br />
Ich möchte nur das Fenster des eigenen Prozesses (Aber nicht zwingend Threads) anzeigen und nach oben bringen. Jedenfalls nicht das eines fremden Prozesses.</p>
<p>Habe wenig Ahnung von den Windows Internals und tue mir schwer, auch nach MSDN lesen.</p>
<p>Danke!<br />
MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1736902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1736902</guid><dc:creator><![CDATA[Frage8]]></dc:creator><pubDate>Fri, 03 Jul 2009 21:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sat, 04 Jul 2009 16:10:05 GMT]]></title><description><![CDATA[<p>Nein! Dazu braucht es ein AttchThradIntput. Lies mal einfach die Doku.</p>
<p>Wieso denkst Du das die Prio nicht zurückgesetzt wird. Wie kommst Du darauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737079</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 04 Jul 2009 16:10:05 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sat, 04 Jul 2009 19:33:14 GMT]]></title><description><![CDATA[<p>MSDN schrieb:</p>
<blockquote>
<p>The system assigns a slightly higher priority to the thread that created the foreground window than it does to other threads.</p>
</blockquote>
<p>Daraus geht es halt nicht eindeutig hervor, dass die Priorität wieder zurückgesetzt wird...</p>
<p>Ja du sagst das so einfach, lies die Doku... Lauter eigentlich voneinander unabhängige Funktionen... man muss halt wissen, wie man die einsetzt.<br />
Mit dem Codefetzen oben fange ich wenig an, sorry.</p>
<p>Frage8 schrieb:</p>
<blockquote>
<p>Ich möchte nur das Fenster des eigenen Prozesses (Aber nicht zwingend Threads) anzeigen und nach oben bringen. Jedenfalls nicht das eines fremden Prozesses.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1737175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737175</guid><dc:creator><![CDATA[Frage8]]></dc:creator><pubDate>Sat, 04 Jul 2009 19:33:14 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sat, 04 Jul 2009 20:05:00 GMT]]></title><description><![CDATA[<p>Ichhabe Dich in die richtige Richtung gestossen: AttachThreadInput, SetForegorundWindow.</p>
<p>BTW: Gerade dasin den Vordergrund bringen des eigenen Prozesses ist für den Usre gerade störend, weil der was anderes macht. Wenn Du das Top-Level Fenbster bbist, kannst Du belieibig jedes Fenster (auch anderer Threads) in den Vordergrund bringen.<br />
Wenn Dein Fenster es nicht ist, ist es &quot;eine Frechheit&quot;, sich in den Vordergund zu bringen.. <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="😉"
    /><br />
Ich werde ungern beim schreiben meiner Postings/Emails/Docs/Programe von einem dämlichen Popup gestört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737202</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 04 Jul 2009 20:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sun, 05 Jul 2009 00:52:04 GMT]]></title><description><![CDATA[<p>Frage8 schrieb:</p>
<blockquote>
<p>In meinem Fall ist es allerdings nützlich. Bei einem Klick auf ein Tray-Icon ...</p>
</blockquote>
<p>Ok keine Lust für ein Minimalbeispiel, dann geh ich halt google'n.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737288</guid><dc:creator><![CDATA[Frage8]]></dc:creator><pubDate>Sun, 05 Jul 2009 00:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sun, 05 Jul 2009 01:00:28 GMT]]></title><description><![CDATA[<p>Ich glaube mit Minimieren und danach wiederherstellen ging das auch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737289</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Sun, 05 Jul 2009 01:00:28 GMT</pubDate></item><item><title><![CDATA[Reply to Fenster in den Vordergrund bringen on Sun, 05 Jul 2009 17:46:22 GMT]]></title><description><![CDATA[<p>Möchte es schon professionell lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1737532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1737532</guid><dc:creator><![CDATA[Frage8]]></dc:creator><pubDate>Sun, 05 Jul 2009 17:46:22 GMT</pubDate></item></channel></rss>