Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

--------------------------------------------------------------------------------

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

: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:

Geschrieben

:D

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. :rolleyes:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...