Guhopa Geschrieben 15. Juli 2003 Geschrieben 15. Juli 2003 -------------------------------------------------------------------------------- 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
Guybrush Threepwood Geschrieben 15. Juli 2003 Geschrieben 15. Juli 2003 Hi, irgendwie hab ich dich nicht so ganz verstanden, willst du dein Programm immer im Vordergrund halten? Gruß Guybrush
Guhopa Geschrieben 15. Juli 2003 Autor Geschrieben 15. Juli 2003 ja genau es soll sozusagen als hauptprog immer laufen
Guybrush Threepwood Geschrieben 15. Juli 2003 Geschrieben 15. Juli 2003 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.
Guhopa Geschrieben 15. Juli 2003 Autor Geschrieben 15. Juli 2003 es geht aber eigentlich darum die über das menü gestarteten progs in den vordergrund zu holen
Diablo999 Geschrieben 15. Juli 2003 Geschrieben 15. Juli 2003 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
Guhopa Geschrieben 15. Juli 2003 Autor Geschrieben 15. Juli 2003 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
Guhopa Geschrieben 15. Juli 2003 Autor Geschrieben 15. Juli 2003 vielleicht könnt ihr mir ja auch sagen wie ich an das window handle komme .
Goos Geschrieben 15. Juli 2003 Geschrieben 15. Juli 2003 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
Guhopa Geschrieben 16. Juli 2003 Autor Geschrieben 16. Juli 2003 :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:
Goos Geschrieben 16. Juli 2003 Geschrieben 16. Juli 2003 Hab doch gesagt, dass das nicht ganz so einfach ist Hier ist ne ansich ganz gute Loesung. Goos
Guhopa Geschrieben 16. Juli 2003 Autor Geschrieben 16. Juli 2003 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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden