Newsgroup: it.comp.lang.visual-basic
Titolo: help netcafe'

salve
premetto di non essere un mega esperto
sto realizzando un programma per la gestione di quattro pc collegati in rete
piu un quinto usato come server in un pub gestito da un mio amico, il
programma gestisce utenti,tariffe,ed accesso al pc, con un sistema di
credito decrescente e ricaricabile con l'immissione di un codice, funziona
tutto a meraviglia, tranne il reset della postazione quando finiscono i
soldini, ho provato ad usare il sorgente wincontrol prelevato dal sito
comune funziona ma non in certi casi tipo quando e in esecuzione un gioco
(es. gp500).
Che soluzione mi proponete.

Puoi provare e vedere Mega 3D...
Le sue pagine sono nel mio sito (l'ho fatto io), ma il prodotto non è mio,
quindi è in vendita... Gestisce gettoniere a banconote, accesso ad Internet,
IRC e qualsiasi gioco... Anche in rete...
Nel caso di IRC può utilizzare anche server locali, senza accesso alla
rete...
Usa W95/98...
--
--[GbC]--
http://www.chiappori.net

sono sempre io
ieri sera sono stato fino alle tre di notte davanti al pc tentando di
risolvere il problema, ma niente
l'unica cosa in piu che ho capito o che credo di aver capito e che molto
probabilmente il pc non si resetta non per il modo con cui si ci prova ma
perche il gioco gp500, dico gp500 perche è l'unico per il momento che mi da
questo problema tra quelli posseduti, sicuramente congela tutte le
applicazioni in background, quindi credo si dovrebbe risolvere modificando
il tipo di exe o le priorita con sui sono eseguiti i codici, ne sparo una,
su NT i programmi chiamati servizi vengono eseguiti al boot penso hanno
queste caratteristiche ma molto probabilmente non possono avere interfaccia
utente(form)?
Vi prego aiutatemi, non sto tentando di sproteggere il gioco in questione
anche perche sicuramente qualcuno l'avrà gia fatto, ma solo risolvere quello
che vi ho esposto.
ciao

il modo c'è...
non devi pensare al programma attivo, ma al so...
cioè...
non come fa il sistema operativo a chiudere un prg, ma cosa accade quando
viene chiuso un prg...
Questo è un esempio (non posso di + perché sono stato pagato per questo
lavoro e ne va della mia etica):
Sub KillProcess()
    Static f As Boolean, Ended As Boolean
    Static oldID As String, l As Integer
    'ci sono programmi nell'elenco dei programmi attivi?
    If monID.ListCount = 0 Then Exit Sub
    'monName.ListCount = elenco dei processi attivi lanciati dall'utente
    While Not monName.ListCount = 0
        Ended = False
        'nonID = elenco degli handles dei processi elencati in monName
        oldID = monID.List(0)
        'pMaster classe con l'API PostMessage, che con l'opzione WM_Close...
        'setta l'handle da chiudere
        pMaster.TaskHandleToKill = Val(monID.List(0))
        'chiude il task
        pMaster.KillTask = True
        'un secondo per dare tempo al tempo...
        Aspetta 1
        While Not Ended = True
            'aspetta che l'handle del task da chiudere scompaia dall'elenco
dei task...
            RileggiProcessi
            'se il task non è ancora chiuso, il suo handle è ancora nella
stringa
            'eID, che contiene gli handles di tutti i task; se c'è aspetto
che scompaia
            If InStr(eID, oldID) <= 0 Then Ended = True
            'questo potrebbe piantare tutto
            'ma non è mai successo con nessun applicativo, anche DOS
        Wend
    Wend
    RileggiProcessi
End Sub
--[GbC]--

inanzi tutto ti ringrazio per avermi risposto sei stato l'unico,
il codice che allego sotto dovrebbe essere, dico dovrebbe, simile al tuo
consiglio l'ho inserito all'interno del programma ed eliminando il
thread(pid) della mia applicazione dal list eseguo un ciclo tra tutti gli
item contenuti, ma ti posso assicurare che non funziona, non per errore del
codice ma sicuramente perche non viene eseguito, infatti ho provato ha
preventivamente spostare il gioco in questione con alt+tab sotto e chiudere
il suo processo con la stessa routine e funziona, stasera voglio provare
facento partire il mio programma  inserendo una key in
HLM\software\microsoft\windows\currentversion\runservices
ciao
informazioni aggiuntive sul processo
Private Function GetProcessModule(pID As Long, ModuleID As Long, EntryModule
As MODULEENTRY32) As Boolean
    Dim HSnapShot       As Long
    GetProcessModule = False
    HSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID)
    If HSnapShot <> -1 Then
        EntryModule.dwSize = Len(EntryModule)
        Esito = Module32First(HSnapShot, EntryModule)
        Do While Esito
            If EntryModule.th32ModuleID = ModuleID Then
                GetProcessModule = True
                Exit Do
            End If
            Esito = Module32Next(HSnapShot, EntryModule)
        Loop
        Call CloseHandle(HSnapShot)
    End If
End Function
 Enumero tutti i processi presenti, e li visualizzo nella lista
Sub GetProcessList(Lista As Control)
    Dim HSnapShot       As Long
    Dim EntryProcess    As PROCESSENTRY32
    Dim EntryModule     As MODULEENTRY32
    Dim Esito           As Long
    Dim StrAppo$
    List1.Clear
    HSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
    If HSnapShot = -1 Then
        MsgBox "Errore creazione SnapShot Processi"
        Exit Sub
    End If
    EntryProcess.dwSize = Len(EntryProcess)
    Esito = Process32First(HSnapShot, EntryProcess)
    Do While Esito
        If GetProcessModule(EntryProcess.th32ProcessID,
EntryProcess.th32ModuleID, EntryModule) Then
            StrAppo$ = Left$(EntryModule.szModule,
InStr(EntryModule.szModule, Chr$(0)) - 1)
            StrAppo$ = Format$(StrAppo$, "@@@@@@@@@@@@@@@ ") &
Left$(EntryModule.szExePath, InStr(EntryModule.szExePath, Chr$(0)) - 1)
            Lista.AddItem Right$("00000000" &
Hex(EntryProcess.th32ProcessID), 8) & " " & StrAppo$
            Esito = Process32Next(HSnapShot, EntryProcess)
        End If
    Loop
    Call CloseHandle(HSnapShot)
End Sub
Function CloseProcess(pID As Long) As Boolean
    Dim EntryThread     As THREADENTRY32
    Dim HSnapShot       As Long
    CloseProcess = False
    '
    ' Estraggo tutti i threads del processo, e a tutti invio un WM_QUIT
    '
    HSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, pID)
    If HSnapShot <> -1 Then
        EntryThread.dwSize = Len(EntryThread)
        Esito = Thread32First(HSnapShot, EntryThread)
        Do While Esito
            If EntryThread.th32OwnerProcessID = pID Then
                CloseProcess = True
                ' invio il messaggio di chiusura
                Call PostThreadMessage(EntryThread.th32ThreadID, WM_quit, 0,
0)
            End If
            Esito = Thread32Next(HSnapShot, EntryThread)
        Loop
        Call CloseHandle(HSnapShot)
    End If
End Function

ciao a tutti sono sempre io
ieri sera ho fatto la prova che vi dicevo
"hlm\software\microsoft\windows\currentversion\runservices\myprog.exe"
e funziona alla grande.....................
e............vai................in culo a gp500.............
era proprio come pensavo, il codice per chiudere tutti i processi e
resettare il ristema era giusto solo che non veniva eseguito perche quando
gp500 e in esecuzione congela tutti i processi in background, facendo
partire il prog come sopra sicuramente il so gli attribuisce una priorità
rispetto a gli altri processi e quindi continua a funzionare.
arrivederci e grazie a tutti.