<?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[HookMainWindow]]></title><description><![CDATA[<p>Hallo<br />
mein Programm bringt vor verlassen eine Messagebox mit Abfrage ob wirklich<br />
verlassen werden soll. Wenn Windows heruntergefahren wird, will ich das um-<br />
gehen. Habe dazu mit Application-&gt;HookMainWindow() eine Routine eingebunden,<br />
die die WM_QUERYENDSESSION-Message abfängt und darin das Programm beendet.<br />
Das funktioniert auch, nur fährt Windows selbst jetzt nicht mehr herunter.</p>
<p>Code:</p>
<pre><code class="language-cpp">bool __fastcall TForm1::WinMessageHook(TMessage&amp; WinMsg)
{
   bool retval;
   switch( WinMsg.Msg )
   {
       case WM_QUERYENDSESSION:
             // Cleanup data , Application-&gt;Terminate()
             ExitWithoutQuestion();
             WinMsg.Result = true;    //  ??
             //WinMsg.LParam = true;  //  ??
             retval = true;           // (ob retval true oder false ist macht 
                                      //     kein Unterschied)
             break;
       default : 
             retval = false; break;
   }

   return retval;
}
</code></pre>
<p>Wenn mir jemand weiterhelfen kann, waere ich sehr dankbar<br />
Gruesse<br />
Juergen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/85858/hookmainwindow</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 12:12:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/85858.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Sep 2004 15:17:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to HookMainWindow on Mon, 13 Sep 2004 15:17:06 GMT]]></title><description><![CDATA[<p>Hallo<br />
mein Programm bringt vor verlassen eine Messagebox mit Abfrage ob wirklich<br />
verlassen werden soll. Wenn Windows heruntergefahren wird, will ich das um-<br />
gehen. Habe dazu mit Application-&gt;HookMainWindow() eine Routine eingebunden,<br />
die die WM_QUERYENDSESSION-Message abfängt und darin das Programm beendet.<br />
Das funktioniert auch, nur fährt Windows selbst jetzt nicht mehr herunter.</p>
<p>Code:</p>
<pre><code class="language-cpp">bool __fastcall TForm1::WinMessageHook(TMessage&amp; WinMsg)
{
   bool retval;
   switch( WinMsg.Msg )
   {
       case WM_QUERYENDSESSION:
             // Cleanup data , Application-&gt;Terminate()
             ExitWithoutQuestion();
             WinMsg.Result = true;    //  ??
             //WinMsg.LParam = true;  //  ??
             retval = true;           // (ob retval true oder false ist macht 
                                      //     kein Unterschied)
             break;
       default : 
             retval = false; break;
   }

   return retval;
}
</code></pre>
<p>Wenn mir jemand weiterhelfen kann, waere ich sehr dankbar<br />
Gruesse<br />
Juergen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606183</guid><dc:creator><![CDATA[nav]]></dc:creator><pubDate>Mon, 13 Sep 2004 15:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to HookMainWindow on Tue, 14 Sep 2004 05:26:44 GMT]]></title><description><![CDATA[<p>Hm,</p>
<p>was ist denn ExitWithoutQuestion()? Wird aus der Funktion zurückgekehrt?</p>
<p>Ich hab's bei mir sehr ähnlich gelöst:<br />
Header:</p>
<pre><code class="language-cpp">void __fastcall WndProc(Messages::TMessage &amp;Message);
</code></pre>
<p>CPP:</p>
<pre><code class="language-cpp">void __fastcall TForm_MainViewer::WndProc(Messages::TMessage &amp;Message)
{
	bool handled = false;
	if ((Message.Msg == WM_SYSCOMMAND) &amp;&amp; (Message.WParam == SC_SCREENSAVE))
	{
		Message.Result = false;
		ShowMessage(&quot;Windows kann den Bildschirmschoner nicht aktivieren, solange die Fertigungsplanung aktiv ist.&quot;);
		handled = true;
	}
	if (!handled)
	{
		if (Message.Msg == WM_QUERYENDSESSION)
		{
			Message.Result = false;
			ShowMessage(&quot;Windows kann nicht beendet werden. Beenden Sie zuerst die Fertigungsplanung.&quot;);
			handled = true;
		}
	}
	if (!handled)
		TForm::WndProc(Message);
}
</code></pre>
<p>Im ersten Schritt wird überprüft ob der User versucht den ScreenSaver zu reaktivieren. Im zweiten Schritt wird überprüft, ob Windows heruntergefahren werden soll und dieses unterbunden. Wenn die Nachricht nicht von der Routine bearbeitet wird, wird die der normale Messagehandler aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606519</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 14 Sep 2004 05:26:44 GMT</pubDate></item><item><title><![CDATA[Reply to HookMainWindow on Tue, 14 Sep 2004 11:34:45 GMT]]></title><description><![CDATA[<p>Danke fuer die Antwort, deine Vermutung war richtig.<br />
Da in Fkt ExitWithoutQuestion() Application-&gt;Terminate()<br />
aufgerufen wird, ist dort scheinbar Schluss.<br />
Werde mir was anderes ueberlegen muessen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606830</guid><dc:creator><![CDATA[nav]]></dc:creator><pubDate>Tue, 14 Sep 2004 11:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to HookMainWindow on Tue, 14 Sep 2004 11:54:20 GMT]]></title><description><![CDATA[<p>Wenn Du statt Terminate() Close() verwendest geht es doch fast. Nur noch in dem Messagehook eine globale Variable setzen (WindowsShuttingDown = true) und wenn die Varible = true ist in der OnCloseQuery des Forms alle Benutzerabfragen weglassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/606846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/606846</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 14 Sep 2004 11:54:20 GMT</pubDate></item></channel></rss>