[VB.NET] Prozess Vorgang anhalten

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von 8BitDoggo.

    [VB.NET] Prozess Vorgang anhalten

    Hi. Ich hab eine frage unzwar habe ich folgende Idee. In Gta V kann man eine Öffentliche Sitzung alleine bekommen, wenn man im Resourcenmonitor bei Gta5.exe auf Vorgang anhalten geht und es 5 sekunden so lässt.
    Ich dachte mir ich könnte schnell mal ein kleines programm schreiben, welches den Vorgang für 5 Sekunden anhält und dannach wieder weiterlaufen lässt um quasi die Lobby zu leeren.
    Mein Problem besteht darin, den Vorgang anzuhalten. Ich finde dazu leider nichts. Vielleicht weiß einer von euch wie das umsetzbar ist.
    Ich bedanke mich im Vorraus.

    8BitDoggo schrieb:

    Gta5.exe
    Willst Du dieses Programm fernsteuern?
    Lässt das Programm das zu, was Dir vorschwebt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    8BitDoggo schrieb:

    Gta5.exe

    Lässt das Programm das zu, was Dir vorschwebt?


    Ja, er macht es ja bereits mithilfe des Taskmanagers.

    B2T:
    Du kannst meines Wissens nach keinen Prozess, sondern nur Threads pausieren.
    Habe dazu etwas gefunden:

    Dafür benutzt du einfach die kernel32.dll:

    VB.NET-Quellcode

    1. Public Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As ThreadAccess, ByVal bInheritHandle As Boolean, ByVal dwThreadId As UInteger) As IntPtr
    2. Public Declare Function SuspendThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
    3. Public Declare Function ResumeThread Lib "kernel32.dll" (ByVal hThread As IntPtr) As UInteger
    4. Public Declare Function CloseHandle Lib "kernel32.dll" (ByVal hHandle As IntPtr) As Boolean
    5. Public Enum ThreadAccess As Integer
    6. TERMINATE = (&H1)
    7. SUSPEND_RESUME = (&H2)
    8. GET_CONTEXT = (&H8)
    9. SET_CONTEXT = (&H10)
    10. SET_INFORMATION = (&H20)
    11. QUERY_INFORMATION = (&H40)
    12. SET_THREAD_TOKEN = (&H80)
    13. IMPERSONATE = (&H100)
    14. DIRECT_IMPERSONATION = (&H200)
    15. End Enum



    So sehen die Funkitionen dafür aus:

    VB.NET-Quellcode

    1. Private Sub SuspendProcess(ByVal process As System.Diagnostics.Process)
    2. For Each t As ProcessThread In process.Threads
    3. Dim th As IntPtr
    4. th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
    5. If th <> IntPtr.Zero Then
    6. SuspendThread(th)
    7. CloseHandle(th)
    8. End If
    9. Next
    10. End Sub
    11. Private Sub ResumeProcess(ByVal process As System.Diagnostics.Process)
    12. For Each t As ProcessThread In process.Threads
    13. Dim th As IntPtr
    14. th = OpenThread(ThreadAccess.SUSPEND_RESUME, False, t.Id)
    15. If th <> IntPtr.Zero Then
    16. ResumeThread(th)
    17. CloseHandle(th)
    18. End If
    19. Next
    20. End Sub

    VB.NET-Quellcode




    Aufruf:

    VB.NET-Quellcode

    1. Dim GTAV As Process() = Process.GetProcessesByName("gtavmp") 'oder wie der Prozess auch heißt



    Pausieren:

    VB.NET-Quellcode

    1. SuspendProcess(GTAV(0))


    Weiterlaufen lassen:

    VB.NET-Quellcode

    1. ResumeProcess(GTAV(0))


    0 Wird hierbei denke ich der Hauptthread sein. Hat das Game mehrere Threads (was ziemlich sicher ist), musst du natürlich herausfinden, welcher Thread es ist, sofern du nicht den Mainthread anhalten möchtest. Probier es aber mal mit 0, sollte reichen.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza