2016-11-11 4 views
-1

In Ordnung, wie Sie unten im Code sehen, habe ich eine einfache Versuchsanweisung. Immer wenn ich das Werkzeug öffne, sucht es nach einem Prozess namens csgo, wenn es einen Prozess gibt, wird es mit dem Werkzeug weitermachen, sonst wird es einfach eine MsgBox senden und das Werkzeug verlassen.Warten Sie, bis ein spezielles Programm geöffnet wird, bevor Sie fortfahren. VB.NET

Ich möchte es jedoch überprüfen, ob es einen csgo-Prozess läuft, wenn es läuft sollte es so weitergehen wie es jetzt ist, aber wenn es keinen Prozess namens csgo running gibt würde ich gerne machen Werkzeug Sleep and loop bis es einen Prozess namens csgo findet.

Try 
     gameProcess = Process.GetProcessesByName("csgo")(0) 
     gameHandle = OpenProcess(PROCESS_ALL_ACCESS, False, csgoProcess.Id) 
    Catch ex As Exception 
     MsgBox("Please Start CS:GO before opening this tool") 
     Environment.Exit(0) 
    End Try 

Ich habe versucht, wie dies zu tun, und es funktioniert lol, gibt es einen besseren Weg, dies zu tun?

Dim Found = 0 
    While Found = 0 
     Try 
      gameProcess = Process.GetProcessesByName("csgo")(0) 
      cgameHandle = OpenProcess(PROCESS_ALL_ACCESS, False, csgoProcess.Id) 
      Found = 1 
     Catch ex As Exception 
      MsgBox("Waiting for csgo to launch.") 
      Threading.Thread.Sleep(1000) 
     End Try 
    End While 
+0

Okay. Schreibe etwas Code, um das zu tun. Wenn Sie ein Problem damit haben, geben Sie den Code ein und erläutern Sie das Problem. – Blackwood

+0

Verwenden eines Timers wäre eine Möglichkeit, dies zu tun. Tue es. – topshot

+0

@Randomizers: Es ist besser, wenn Sie Ihre Frage bearbeiten und Ihren neuen Code einschließen. Es ist fast unmöglich, in den Kommentaren zu lesen. Bitte erläutern Sie auch, was nicht funktioniert. –

Antwort

2

Angenommen, dies ist eine Konsolenanwendung, können Sie einige Verbesserungen machen, was Sie haben.

' Use a boolean for binary logic. 
' This takes up 1 bit whereas your Int32 took up 32 bits 
Dim allDone = False 
While Not allDone 
    Try 
     Dim processes = Process.GetProcessesByName("csgo") 
     If processes.Count > 0 Then 
      csgoProcess = processes(0) 
      Dim handle = OpenProcess(PROCESS_ALL_ACCESS, False, csgoProcess.Id) 
      If handle IsNot Nothing Then 
       allDone = True 
      End If 
     Else 
      ' Use a Retry/Cancel MsgBox to allow the user to retry or cancel 
      ' Clicking Cancel will now exit the application 
      Select Case MsgBox("Waiting for csgo to launch.", 
           MsgBoxStyle.RetryCancel, "Confirm retry") 
       Case MsgBoxResult.Retry 
        Threading.Thread.Sleep(1000) 
       Case MsgBoxResult.Cancel 
        Environment.Exit(0) 
      End Select 
     End If 
    Catch ex As Exception 
     ' Something bad happened, but you don't know what exactly. 
     ' You should exit, else it might keep happening 
     MsgBox("Your application encountered the following error and will now close: " _ 
      & ex.Message) 
     Environment.Exit(0) 
    End Try 
End While 
' continue application 
+0

Vielen Dank, es ist eine Winform-Anwendung. Allerdings ist der Teil, wo der Benutzer erneut versuchen muss, nicht das, was ich brauche. CSGO wird im Vollbildmodus gestartet, sodass der Benutzer in diesem Fall die Tabulatortaste drücken und erneut versuchen muss. Ich möchte nur, dass das Werkzeug eine Schleife macht, bis es csgo findet und dann automatisch fortfährt. Eine Option, um den Exit zu schließen statt zu wiederholen, wäre schön. – Randomizers

Verwandte Themen