Anfänger sucht dringent hilfe

ATdrag0N

Erfahrenes Mitglied
Hallo erstemal ^^,

Ich habe ein kleines Tool geschrieben womit ich Programme starten kann und deren Status abfragen kann.
Aber das Problem ist, wenn ich das Tool schließe und wieder starte zeigt er mir das Programm als Not running an.
Gibt es da eine möglichkeit das der Status beim starten des Tools aktualisiert wird?
Dann habe ich da noch ein Problem, wenn ich mehrere Programme starten möchte über ein button dann zeigt er sie an als running, aber sobald ich eins ausschalte davon dann stehen trotzdem alle als running da.
Ich habe erste mal die anzeige von allen Programmen rausgenommen, so das es erste mal um die eine Funktion geht.
Das mit dem Menü bekomme ich auch noch nicht hin ich habe das so gemacht das wenn ich eine neue Seite aufrufe das er dann die erste Seite schließen tut, ich wollte das aber so haben das er die neue Seite unter dem Menü laden tut, also sozusagen als iframe.
Ich füge euch mal die Dateien hinzu hoffe ihr könnt mir da was zaubern, weil soviel ahnung habe ich ja auch noch nicht davon.
Code:
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
        hObject As Long) As Long
        
Private Declare Function OpenProcess Lib "kernel32" (ByVal _
        dwDesiredAccess As Long, ByVal bInheritHandle As _
        Long, ByVal dwProcessId As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
        (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Declare Function ShellExecute _
    Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
    
Private Declare Sub Sleep _
    Lib "kernel32" ( _
    ByVal dwMilliseconds As Long)

Const STILL_ACTIVE = &H103
Const PROCESS_ALL_ACCESS = &H1F0FFF

Dim TaskID&

Private Function IsActive() As Boolean
  Dim Handle&, ExitCode&
  
    Handle = OpenProcess(PROCESS_ALL_ACCESS, False, TaskID)
    Call GetExitCodeProcess(Handle, ExitCode)
    Call CloseHandle(Handle)
    
    IsActive = IIf(ExitCode = STILL_ACTIVE, True, False)
End Function
Private Sub cmdStartMIRC_Click()
  TaskID = Shell("D:\Westwood\Game\AOW\mIRC\mircAOW.exe", vbNormalFocus)
  Timer1.Interval = 500
  Timer1.Enabled = True
  cmdStartMIRC.Enabled = False
End Sub
Private Sub start_seite_Click()
    start.Show
    Unload Me
End Sub

Private Sub Timer1_Timer()

    If IsActive Then
      lblMIRC.Caption = "Running !"
    Else
      lblMIRC.Caption = "Not running !"
      Timer1.Enabled = False
      cmdStartMIRC.Enabled = True
    End If

End Sub

'----------------Alles aufeinmal starten--------
Private Sub cmdStartAll_Click()

  TaskID = Shell("D:\Westwood\Game\AOW\mIRC\mircAOW.exe", vbNormalFocus)
    cmdStartAll.Enabled = False
    Sleep 4000
    cmdStartAll.Enabled = True
  TaskID = Shell("D:\Westwood\Game\AOW\RenegadeFDS\Server\AOWServer.exe", vbNormalFocus)
    cmdStartAll.Enabled = False
    Sleep 4000
    cmdStartAll.Enabled = True
  TaskID = ShellExecute(hwnd, "open", "D:\Westwood\Game\AOW\RenegadeFDS\Server\BRenBot\AOW_BR.lnk", "", "D:\Westwood\Game\AOW\RenegadeFDS\Server\BRenBot", 1)
    cmdStartAll.Enabled = False
    Sleep 4000
    cmdStartAll.Enabled = True
  TaskID = ShellExecute(hwnd, "open", "D:\Westwood\Game\AOW\RenegadeFDS\Server\AOW-TS-AUTO-SWITCH.lnk", "", "D:\Westwood\Game\AOW\RenegadeFDS\Server", 1)

End Sub

Tool
Leider konnte ich die datei hier über diese HP nicht hochladen, daher habe ich sie auf mein root server geladen.
Ich versichere das diese datei keine viren oder der gleichen beinhaltet.

Am wichtiegsten ist mir das wenn ich die seite aufrufe wo die info ist das er nach schaut ob die programme schon laufen oder nicht.
 
Zuletzt bearbeitet:
Also ein Fehler wäre, das wenn du das Programm schliesst und wieder öffnest wird der Timer nicht gesetzt dadurch bekommst du keine Aktualisierung hin. -> im Form Load den Timer setzten

Grüsse bb
 
Wie muss ich denn timer setzen habe da jetzt einiges ausprobiert aber er zeigt es mir nicht als running an.
Also es handelt sich nicht um das Programm was ich mit dem Tool starte, wenn ich das Programm über denn button starte zeigt er es mir ja an das es running ist, und wenn ich das Programm was ich über denn button gestartet habe schließe ändert sich das auch gleich zum not running.
Aber wenn ich das Tool schließe mit was ich die Programme starte und dann das Tool wieder starte steht da not running.
Könnte mir jemand denn Code erweitern auf die Funktion das er denn Status anzeigt wenn ich das Programm wieder starte ?
Also denn timer?
BITTE BITTE ^^ hört sich kindisch an ich weiß^^
 
Zuletzt bearbeitet:
eigentlich nur so

Visual Basic:
 Timer1.Interval = 500
  Timer1.Enabled = True



dann solltest du mal einen stoppunkt in isactive setzen, hier ist wahrscheinlich deine TaskId =0

ich vermute mal das du dir die erst über die Api mit fensternamen holen musst. ( hierfür empfehle ich die Suche !)


Grüsse bb
 
Hallo,
das Problem mit dem aktualisieren ist gelöst, nun habe ich ein anderes Problem^^.

Ich bin gestern auf visual basic 2005 express edition umgestiegen und da erkennt der denn ein Befehl nicht an.
Code:
lblMIRC.Caption

Das ist der complete code bis jetzt, er mekert nur wegen der sache da oben rum.
Code:
Public Class test
    Private Declare Function CloseHandle Lib "kernel32" (ByVal _
            hObject As Long) As Long

    Private Declare Function OpenProcess Lib "kernel32" (ByVal _
            dwDesiredAccess As Long, ByVal bInheritHandle As _
            Long, ByVal dwProcessId As Long) As Long

    Private Declare Function GetExitCodeProcess Lib "kernel32" _
            (ByVal hProcess As Long, ByVal lpExitCode As Long) As Long

    Private Declare Function ShellExecute _
        Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long

    Private Declare Sub Sleep _
        Lib "kernel32" ( _
        ByVal dwMilliseconds As Long)

    Const STILL_ACTIVE = &H103
    Const PROCESS_ALL_ACCESS = &H1F0FFF

    Dim TaskID&
    Private Function IsActive() As Boolean
        Dim Handle&, ExitCode&

        Handle = OpenProcess(PROCESS_ALL_ACCESS, False, TaskID)
        Call GetExitCodeProcess(Handle, ExitCode)
        Call CloseHandle(Handle)

        IsActive = IIf(ExitCode = STILL_ACTIVE, True, False)
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TaskID = Shell("C:\Programme\ICQLite\ICQLite.exe", vbNormalFocus)
        Timer1.Enabled = True
        Button1.Enabled = False
    End Sub

    Private Sub Timer1_Timer()

        If IsActive Then
            lblMIRC.Caption = "Running !"
        Else
            lblMIRC.Caption = "Not running !"
            Timer1.Enabled = False
            Button1.Enabled = True
        End If

    End Sub

End Class

Ich bin darauf umgestiegen, weil ich ein Menü gebaut habe wo die aktuellen Daten erhalten bleiben.
Ach eh ich es vergesse, wenn ich das Programm beende was ich über denn button gestartet habe dann wird der button nicht mehr drückbar, wo kann da der Fehler liegen ?
 
VB 2005 ist ein anderes Forum und da ich keinen VB2005 Compiler auf demn rechner habe kann ich dir nicht mehr weiterhelfen versuch es mal im .Net Forum
Grüsse bb
 
Ne ganz banale Frage,
heißen die Labels auch wirklich so ?
Also hast du die im neuem Compiler auch umbenannt etc ?

Vermute liegt einfach nur am Namen das er meckert
 
Wenn ich die labels so umbenne das sie so heißen wie sie da stehen: lblMIRC
dann meckert er deswegen rumm: "Running !"

Fehlermeldung heißt denn da:
Der Wert vom "string" kann nicht zu " System.Windows.Forms.Label" konvertiert werden.

Und wenn ich das label direkt so umbenne dann kommt :
Der Bezeichner lblMIRC.Caption ist ungültig.
 
Zurück