hMutex zu hWND
-
Quelle: http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc06014.php
Ich möchte mein Programm nur einmal starten können. Sollte es schon laufen, soll es in den Vordergrund kommen. Nun habe ich das Problem das ich FindWindow nicht nutzen kann, da sich der Titel ständig ändern kann.
Ich dachte man könnte Handle und HWND gleichsetzen und somit das Problem lösen, das klappte leider nicht

HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS, 0, "MeineAnwendung1.0");
SetForegroundWindow(hMutex);
(Meldet aber auch keinerlei Fehler, klappt nur nicht)Wie bekomme ich aus dem OpenMutex es hin, das ich dadruch das Fenster in Vordergrund setzen kann? Also ohne das HWND hWnd = FindWindow(0, "FensterTitel");

-
Lösung:
HWND hWnd = FindWindowEx(0, 0, "TForm1", 0);
SetForegroundWindow(hWnd);TForm1 ist aus
Application->CreateForm(__classid(TForm1), &Form1);have fun
-
Ist die Anwendung minimiert oder nur tatsächlich nur im Hintergrund?
-
Bei minimierter Anwendung funktioniert folgendes:
HANDLE hInstanceMutex = ::CreateMutex(NULL, TRUE, "FP3.MUTEX"); if (GetLastError() == ERROR_ALREADY_EXISTS) { if (hInstanceMutex) CloseHandle(hInstanceMutex); Application->Title = ""; HWND hPrevApp = ::FindWindow(NULL, "Fertigungsplanung"); if (hPrevApp) PostMessage(hPrevApp, WM_SYSCOMMAND, SC_RESTORE, 0); return 0; }Edit: Hatte die Code-Tags vergessen...
-
Danke für den Tip. Ein minimiertes Fenster holte er nicht in den Vordergrund, nun gehts. Allerdings hast du "SetForegroundWindow(hWnd);" vergessen, denn ohne das kommt es nicht nach vorne

Allerdings lässt sich nun die Anwendung nicht mehr minimieren.

-
Lösung: http://www.c-plusplus.net/forum/viewtopic.php?p=373620#373620
(Man muss es natürlich bissle umschreiben, aber dann gehts)