Veröffentlicht 15. Juli 200322 j -------------------------------------------------------------------------------- hi zusammen, ich will ein prog schreiben mit einem menü in dem dynamisch aus einer db exefiles eingetragen werden und durch den nutzer auszuwählen sind. nun soll wenn der nutzer eine exe gestartet hat und den eintrag wieder auswählt der process weitergeführt werden. also der process wieder in den vordergrund geholt werden wie bei alt+tab nun mein problem: ich kann mir die threadID merken aber dann scheiterts wie kann ich weiter vorgehen ? hier ein bißchen code
15. Juli 200322 j Hi, irgendwie hab ich dich nicht so ganz verstanden, willst du dein Programm immer im Vordergrund halten? Gruß Guybrush
15. Juli 200322 j Dann reicht es doch normalerweise aus wenn du beim erstellen des Fensters das Flag WS_EX_TOPMOST setzt. Das kannst du aber auch im Nachhinein per SetWindowPos() machen.
15. Juli 200322 j es geht aber eigentlich darum die über das menü gestarteten progs in den vordergrund zu holen
15. Juli 200322 j Hab ich das richtig verstanden? Du willst ein Programm haben welches in einem Menü mehere andree Programme verwaltet. Diese sind über ein Menü zu starten, und wenn sie schon mal gestartet wurden sollen sie nicht erneut gestartet werden sondern in den vordergrund geholt werden... Sollte das so richtig sein könnte eine mögliche Lösung sein: - Du merkst dir die ThreadID - Mit EnumThreadWindows und der ThreadID bekommst du alle Fenster des Threads - Eines dieser Fenster ist mir sicherheit das Haupfenster, kann dir aber leider nicht sagen wie du das rausbekommst... - Jedenfalls musst du dieses Fenster dann eben in den Vordergrund holen wir Guybrush schon gesagt hat. Hoffe das hilft?!? Diablo999
15. Juli 200322 j also ich hab jetzt die process id und versuche mit OpenProcess die gewählte Anwendung wieder anzuzeigen hProc = OpenProcess(PROCESS_ALL_ACCESS,false, ((*runProcIter)->processId)) aber ich komm nich an die anwendung ran
15. Juli 200322 j FindWindow() halt ich fuer nicht unbedingt geeignet, weil man ja nicht unbedingt den Window Titel der gestarteten Anwendung weiss. Ueber EnumThreadWindows() solltest aber an ein Window Handle kommen. So weit ich mich erinnern kann ists dann aber trotzdem nicht immer ganz trivial das gewuenschte Fenster in den Vordergrund zu bekommen. Ich glaub da verhielten sich verschiedene Windows Versionen auch etwas unterschiedlich. Goos
16. Juli 200322 j :confused: :confused: :confused: ich hab das jetzt mit EnumWindows und EnumWindowsProc gelöst, leider scheint der weder der Aufruf ShowWindow(hwnd, SW_SHOWNORMAL) oder SendMessage(hwnd, WM_SHOWWINDOW ) etwas zu bewirken. :confused: :confused: :confused:
16. Juli 200322 j Hab doch gesagt, dass das nicht ganz so einfach ist Hier ist ne ansich ganz gute Loesung. Goos
16. Juli 200322 j danke an alle habs jetzt hinbekommen, mit BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { int pID = (int) lParam; bool res = true; DWORD dwProcessId = 0; DWORD dwThreadId = GetWindowThreadProcessId (hwnd, &dwProcessId); if (pID == dwProcessId) { res = BringWindowToTop(hwnd); ShowWindow(hwnd, SW_SHOWNORMAL); return res; } return res; } ein kleiner wermutstropfen bleibt , es werden nämlich auch alle childwindows des aufgerufenen windows angezeigt.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.