Tasknamen ermitteln

  • VB6

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    Tasknamen ermitteln

    Hi!

    In meinem bisherigen Code ermittle ich alle Tasks mit den Folgenden APIs:
    GetWindow, GetWindowText, GetWindowTextLength und GetWindowThreadProcessId

    In einer Combo-Box kann der Benutzer dann den Task auswählen.
    Ich würde in der Combo-Box aber gerne den Task- und nicht den Fenster-Namen anzeigen -.-
    Dafür muss es eine API geben, da in der Taskleiste ja dieser Name angezeigt wird, wenn mehrere Fenster zu einem Element zusammengefasst werden ...

    Kann mir jemand sagen, wie die API heißt?!
    Hi Malcolm!

    Das bringt mir leider nichts, da ich die Fenster ja bereits ermittle...
    Ich hab von Unknown nen Code bekommen, mit dem ich von den ProcessIDs aus den EXE-Namen bekomme...
    Das sollte fürn Anfang mal reichen :)

    Aber Danke für deine bemühungen...
    Hehe...

    Ich wollte eigentlich schon schreiben "Wer lesen kann is klar im Vorteil" ^^
    Erm... stellt sich nur die Frage, ob es diesen "Tasknamen" auch wirklich gibt, oder ob das der "Product Name" von der exe ist...

    Bleibt nurnoch die Frage:
    Wie lese ich den Productname einer exe aus? -.-
    Hi!

    Ich hab jetzt endlich Zeit gefunden an dem Projekt weiterzuarbeiten und bin gleich mal auf ein Problem gestoßen -.-

    Mit GetWindow hol ich mir alle WindowHandles
    Mit GetWindowThreadProcessID hol ich mir die TaskID / das ModuleHandle
    Mit OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lTaskID) bekomm ich ein Handle, das NICHT 0 ist
    Bis dahin scheint alles zu stimmen ...

    ABER:
    Wenn ich mit

    Visual Basic-Quellcode

    1. sFile = Space$(512)
    2. GetModuleFileName hProcess, sFile, Len(sFile)

    den EXE-Namen haben will, kommt nur ein String zurück, der 512 Spaces enthält -.-
    Was stimmt da nich?
    Die GetModuleFileNameEx-API hab ich auch schon ausprobiert; gleiches Ergebnis!


    PS: Sry für den Doppelpost... hab meinen alten Post übersehen -.-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    mh... kapier ich irgendwie nicht ganz...

    GetWindowThreadProcessID sollte die TaskID zurückgeben...
    und OpenProcess dann das ProzessHandle, das wiederrum bei GetModuleFilename gefragt ist, oder hab ich da einen Logischen Fehler drin?
    Sorry, genau umegekehrt meinte ich : Du übergibst das Handle des Prozesses, nicht das des Modules.

    Mit GetWindowThreadProcessID hol ich mir ... die ThreadID und optional die PID (ProcessID).

    Diese PID kannst Du wiederum für GetModuleInformation nutzen, um das ModuleHandle zu bekommen. Und dieses ModuleHandle wiederum, um mit GetModuleFileName den Pfad zu erhalten.

    Mit OpenProcess erhältst Du ein OpenHandle um Prozesse zu manipulieren (ReadProcessMemory bspw.).

    So zumindest habe ich das verstanden...
    Erm...
    Nehmen wir mal an, das das so funzt, wie du sagst...
    Warum find ich die API GetModuleInformation nicht !? ;(


    EDIT:
    Habs jetzt mit der Ex hinbekommen :)

    Visual Basic-Quellcode

    1. hwnd = GetWindow(frmMain.hwnd, GW_HWNDFIRST)
    2. Do: DoEvents
    3. sTitle = GetWindowTitle(hwnd)
    4. lTaskID = GetWindowTaskID(hwnd)
    5. If lTaskID <> 0 Then
    6. hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lTaskID)
    7. If hProcess <> 0 Then
    8. sPath = Space$(256)
    9. GetModuleFileNameEx hProcess, 0, sPath, Len(sPath)
    10. Debug.Print sPath
    11. End If
    12. CloseHandle hProcess
    13. End If
    14. hwnd = GetWindow(hwnd, GW_HWNDNEXT)
    15. Loop Until hwnd = 0

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()