Counter-Strike

pHoEnIxFuRy Messages postés 67 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 18 juillet 2006 - 19 janv. 2003 à 17:51
laurentpat Messages postés 1 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 12 avril 2005 - 12 avril 2005 à 17:24
Voilà je lance un server Counter-Strike sur un 2000 avec un simple shell et au bout d'un moment celui-là se ferme.
J'ai déjà fais le prog ki le lance avec le choix pour la map, le maxplayer, tec ...
Une fois lancé le server CS ressemble à fenètre DOS ( vrai si ca se trouve ) et je voudrais détecter quand celle-ci se ferme afin de relancer automatiquement le server.
Voilà merci d'avance.

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

Si ce que tu as à dire est moins proofond que le silence alors ne dis rien.

2 réponses

pHoEnIxFuRy Messages postés 67 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 18 juillet 2006 1
20 janv. 2003 à 23:38
Bon bah je me réponds a moi-même ca servira peu etre aux autres. Voici quelques bouts de code qui m'ont servis a résoudre mon problème.

Déclaration :

Private Declare Function _
CloseHandle Lib "Kernel32.dll" (ByVal _
Handle As Long) As Long
Private Declare Function _
OpenProcess Lib "Kernel32.dll" (ByVal _
dwDesiredAccessas As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long
Private Declare Function _
EnumProcesses Lib "PSAPI.DLL" (ByRef _
lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long
Private Declare Function _
GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal _
bhProcess As Long, _
ByVal hModule As Long, ByVal _
ModuleName As String, _
ByVal nSize As Long) As Long
Private Declare Function _
EnumProcessModules Lib "PSAPI.DLL" (ByVal _
hProcess As Long, ByRef _
lphModule As Long, ByVal cb As Long, ByRef _
cbNeeded As Long) As Long

Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16
Private Const MAX_PATH = 260

Private Type PROCESS_MEMORY_COUNTERS
cb As Long
PageFaultCount As Long
PeakWorkingSetSize As Long
WorkingSetSize As Long
QuotaPeakPagedPoolUsage As Long
QuotaPagedPoolUsage As Long
QuotaPeakNonPagedPoolUsage As Long
QuotaNonPagedPoolUsage As Long
PagefileUsage As Long
PeakPagefileUsage As Long
End Type
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' Le processus
th32DefaultHeapID As Long
th32ModuleID As Long ' exe associé
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type

Un bout de code qui appele une fonction qui vérifie les process actifs ( a mettre dans un timer ) :

For j = 1 To Processus(i) If InStr(Processus(j), "hlds") > 0 Then OK True Else OK False
Next

If OK = False Then
Shell ("lalignedecommandepourlancerleserver")
End If

Et la fameuse fonction :

Private Function Processus(ByVal _
ID As Integer) As String

On Error Resume Next

Dim booResult As Boolean
Dim lngLength As Long
Dim lngProcessID As Long
Dim strProcessName As String
Dim lngSnapHwnd As Long
Dim udtProcEntry As PROCESSENTRY32
Dim lngCBSize As Long
Dim lngCBSizeReturned As Long
Dim lngNumElements As Long
Dim lngProcessIDs() As Long
Dim lngCBSize2 As Long
Dim lngModules(1 To 200) As Long
Dim lngReturn As Long
Dim strModuleName As String
Dim lngSize As Long
Dim lngHwndProcess As Long
Dim lngLoop As Long
Dim pmc As PROCESS_MEMORY_COUNTERS
Dim strProcName, strProcName2 As String
Dim NbProc, ListeProc(1 To 10000) As String
NbProc = 0

booResult = False

' nom de Explorer
EXEName = "explorer.exe"
EXEName = UCase$(Trim$(EXEName))
lngLength = Len(EXEName)

lngCBSize = 8
lngCBSizeReturned = 96

Do While lngCBSize <= lngCBSizeReturned
DoEvents
'Incremente la taille
lngCBSize = lngCBSize * 2
'Loue la mémoire
ReDim lngProcessIDs(lngCBSize / 4) As Long
'Prends l' ID du processus
lngReturn = EnumProcesses(lngProcessIDs(1), lngCBSize, lngCBSizeReturned)
Loop

'Compte les processus
lngNumElements = lngCBSizeReturned / 4
For lngLoop = 1 To lngNumElements
DoEvents
'Donne le handle du processus et l' ouvre

lngHwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lngProcessIDs(lngLoop))

If lngHwndProcess <> 0 Then

lngReturn = EnumProcessModules(lngHwndProcess, lngModules(1), 200, lngCBSize2)

If lngReturn <> 0 Then
NbProc = NbProc + 1
strModuleName = Space(MAX_PATH)
lngSize = 500
'Prend le nom du processus

lngReturn = GetModuleFileNameExA(lngHwndProcess, lngModules(1), strModuleName, lngSize)

'Enlève les espaces
strProcessName = Left(strModuleName, lngReturn)
ListeProc(NbProc) = strProcessName
End If
End If
'Ferme les handles du processus
lngReturn = CloseHandle(lngHwndProcess)
DoEvents
Next

If ID = 0 Then
Processus = NbProc
ElseIf ID > 0 And ID <= NbProc Then
Processus = ListeProc(ID)
Else
Processus = ""
End If

End Function

Si ce que tu as à dire est moins profond que le silence alors ne dis rien.
0
laurentpat Messages postés 1 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 12 avril 2005
12 avril 2005 à 17:24
Visitez mon site web http://membres.lycos.fr/laurentn9
0
Rejoignez-nous