CreateProcess -> Window topmost



  • Hi,

    also ich habe eine Anwendung, in der mit bestimmten Shortcuts andere Anwendungen gestartet werden können, z.B. cmd, taskmgr, regedit usw.
    Diese werden per CreateProcess gestartet.

    Soweit alles gut, aber wie kann ich dann das Fenster dieses Prozesses topmost setzen ?? 😕
    Ich habe ja das Handle des Prozesses, die Thread ID des Hauptfensters usw...

    Wer kann mir das verraten ?
    Ich bedanke mich schonmal ! 🙂





  • Ok, aber wie komme ich am besten an das Window-Handle (HWND) des Prozesses ?

    Ist mir soweit bekannt, dass ich damit topmost setzen kann, aber ich habe eher das Problem, das Handle zu ermitteln...


  • Mod

    Du wirst wohl alle Topmost sichtbaren Handles des Threads/Prozesses enumerieren müssen.

    Ein Fenster muss ja nicht nur ein Top-Level Fenster haben sondern kann deren x haben.



  • Ok, werde es am besten etwas anders formulieren:
    Meine Hauptanwendung ist immer topmost und über die kann ich andere festegelegte Programme starten, wie eben cmd, Verwaltung, taskmgr usw.

    Wenn ein Programm gestartet wird, soll es über meiner Hauptanwendung erscheinen, weiß jetzt nicht genau, ob da auch einfach ein BringWindowToTop reicht.
    Hier der Code:

    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
    	DWORD dwThreadID = ::GetWindowThreadProcessId(hwnd, NULL);
    	if (dwThreadID == static_cast<DWORD>(lParam))
    	{
    		::BringWindowToTop(hwnd);    // Breakpoint
    		//::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
    		return FALSE;
    	}
    
    	return TRUE;
    }
    
    ...
    
    if (!CreateProcess(szExeFile, szExeCmd, NULL, NULL, FALSE, 0, NULL, szExePath, &si, &procInf))
    {
        ...
    }
    
    WaitForInputIdle(procInf.hProcess, 3000);
    ::EnumWindows(&EnumWindowsProc, procInf.dwThreadId);
    CloseMyHandle(procInf.hProcess);
    CloseMyHandle(procInf.hThread);
    

    Nur wird mein Breakpoint in der EnumWindowsProc nicht angesprungen, wieso ?
    Sollte doch alles so in Ordnung sein...



  • Hi

    Wie Martin gesagt hat,

    1.bsp: hwnd = FindWindow(wc ,n);

    oder wie auch immer ... wobei es andere Methoden gibt.

    lowbyte


Anmelden zum Antworten