|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
[VB6]Collegare processi
raga è possibile fare in modo che un applicazione si alleghi ad un processo?
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 1792
|
Quote:
|
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
vorrei fare in modo che il mio exe quando veda un processo chiamato gunzlauncher.exe avviato si termini.
è possibile ciò? Ultima modifica di 4ndr34s : 04-12-2008 alle 07:04. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
http://support.microsoft.com/kb/187913 Dalla lista, ad ottenere quello che chiedi direi che il passo è breve... |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
ehm per me non è tanto facile dato che sono alle prime armi mi serve il vostro aiuto per fare ciò che vi ho detto
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
1. Segui alla lettera quel tutorial, e hai già in mano il 95% della soluzione.
2. Quando hai la Form funzionante, basta che aggiungi alla Form un controllo Timer ( Enabled = True e Interval = 2000 ). 3. A questo punto prendi tutto il codice che era associato al pulsante Command1 e lo copi nella routine del Timer ( Private Sub Timer1_Timer() ). 4. Sempre nella routine Timer, in fondo, prima dell' End Sub aggiungi questo codice : Codice:
Dim j As Integer
j = 0
For j = 0 To List1.ListCount - 1
If List1.List(j) = "C:\WINDOWS\system32\gunzlauncher.exe" Then
Unload Me
End If
Next j
Semplicissimo, no ? |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
mmm ma il problema è che se il processo da controllare in questione non stia nella destinazione che dico io cosa succede?
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
Dim j As Integer
j = 0
Dim processo As String
processo = "gunzlauncher.exe"
For j = 0 To List1.ListCount - 1
Dim nomeProc As String
nomeProc = Right(List1.List(j), Len(processo))
If nomeProc = processo Then
Unload Me
End If
Next j
|
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
ma metto questo codice ma non funziona
oppure si puo fare in modo che se si termina theduel.exe si termina anche la mnia applicazione? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Devi essere meno ermetico. COSA non funziona ?
Comunque questo era il codice Timer che intendevo : Codice:
Private Sub Timer1_Timer()
List1.Clear
Select Case getVersion()
Case 1 'Windows 95/98
Dim f As Long, sname As String
Dim hSnap As Long, proc As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hSnap = hNull Then Exit Sub
proc.dwSize = Len(proc)
'Iterate through the processes
f = Process32First(hSnap, proc)
Do While f
sname = StrZToStr(proc.szExeFile)
List1.AddItem sname
f = Process32Next(hSnap, proc)
Loop
Case 2 'Windows NT
Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long
'Get the array containing the process id's for each process object
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4
For i = 1 To NumElements
'Get a handle to the Process
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
'Got a Process handle
If hProcess <> 0 Then
'Get an array of the module handles for the specified process
lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
'If the Module Array is retrieved, Get the ModuleFileName
If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
List1.AddItem Left(ModuleName, lRet)
End If
End If
'Close the handle to the process
lRet = CloseHandle(hProcess)
Next i
End Select
'Controllo processo :
Dim j As Integer
j = 0
Dim processo As String
processo = "gunzlauncher.exe"
For j = 0 To List1.ListCount - 1
Dim nomeProc As String
nomeProc = Right(List1.List(j), Len(processo))
If nomeProc = processo Then
Unload Me
End
End If
Next j
End Sub
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
grazie mille ,lo provo subito!!
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
mmm da un errore con il getversion()
sub or fuction not definied |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Ma il tutorial l'hai seguito ? Hai creato il modulo e ci hai messo tutte le funzioni ? Cmq, io quel tutorial c'ho messo 5 minuti a farlo, e posso garantire che funziona, almeno per quanto riguarda Win XP. |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
non so perchè ma mi da un sacco di errori del tipo ambigous name nonostante tutto abbia messo il modulo come è scritto nella guida non so forse sarà dovuto al fatto che uso + moduli? siccome questo programma mi serve anche per fare un altra operazone c'è anche un altro modulo.
come posso risolvere? |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Se in Modulo1 hai una Sub "nomeSub", e in Modulo2 una Sub con lo stesso nome non compilerà mai ! Inoltre dichiara sempre le variabili, anche per i semplici contatori di ciclo... |
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
non so proprio come risolvere potrei postare qui il mio progetto?
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
Raga volevo chiedervi: e se io volessi fare il contrario, cioè se non c'è il processo fai questo,altrimenti quest'altro, io ho provato con IF Not ma non va :-S
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Con una piccola modifica alla routine Controlla Processo precedente...: Codice:
'Controllo processo :
Dim j As Integer
j = 0
Dim processo As String
processo = "gunzlauncher.exe"
Dim procTrovato As Boolean
procTrovato = False
For j = 0 To List1.ListCount - 1
Dim nomeProc As String
nomeProc = Right(List1.List(j), Len(processo))
If nomeProc = processo Then
procTrovato = True
Exit For
End If
Next j
If procTrovato = True Then
MsgBox (processo & " trovato.")
Else
MsgBox (processo & " non trovato.")
End If
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:19.




















