|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
[vb6]Processi
ciao a tutti
raga vorrei fare in modo che la mia applicazione se viene chiusa si deve chiudere anche un altra applicazione , è possibile farlo?se è possibile come posso farlo? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo, nell'evento di chiusura devi usare le API.
Questo chiude direttamente un processo (non è una chiusura safe): http://www.eggheadcafe.com/community...ng-visual.aspx Questo è un metodo alternativo, guarda quello che ti granatisce più compatibilità: http://www.andreavb.com/tip020021.html Questo manda un messaggio equivalente alla chiusura premendo la X dell'interfaccia grafica: http://www.thescarms.com/vbasic/stopprocess.aspx |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Qui trovi il Tip Of The Day di un certo Francesco Balena, che penso faccia al caso tuo, molto ben commentato :
http://www.devx.com/vb2themax/Tip/19049 |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
hem c'è scritto che funziona solo su NT e 2000 :-S
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
mmm non credo sia quello che cerco , io vorrei che se la mia applicazione viene killata me ne deve chiudere un altra
esempio: mia applicazione e notepad , quando viene killata la mia applicazione viene killato anche il notepad |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' quello che cerchi, lo devi mettere nell'evento unload della form.
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
cioè dovrebbe diventare :
private sub form1_unload() Type PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long szexeFile As String * 260 End Type '------------------------------------------------------- Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, _ ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long Declare Function ProcessFirst Lib "kernel32.dll" Alias "Process32First" (ByVal hSnapshot As Long, _ uProcess As PROCESSENTRY32) As Long Declare Function ProcessNext Lib "kernel32.dll" Alias "Process32Next" (ByVal hSnapshot As Long, _ uProcess As PROCESSENTRY32) As Long Declare Function CreateToolhelpSnapshot Lib "kernel32.dll" Alias "CreateToolhelp32Snapshot" ( _ ByVal lFlags As Long, lProcessID As Long) As Long Declare Function TerminateProcess Lib "kernel32.dll" (ByVal ApphProcess As Long, _ ByVal uExitCode As Long) As Long Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long end sub e poi vabbè il modulo? |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No, metti tutto quello che trovi lì in un modulo. Dopo dall'unload chiami la funzione KillProcess passando come parametro il nome dell'eseguibile.
In ogni caso mi sembra meglio quella linkata da MarcoGG. Sempre che tu abbia lanciato tu l'eseguibile e quindi hai il pid. |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
quale parametro intendi? Public Sub KillProcess(NameProcess ?
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
al posto di nameprocess ci metto il nome del processo che si deve chiudere?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
purtroppo no
potresti insegniarmi a farlo? Ultima modifica di 4ndr34s : 07-01-2009 alle 18:21. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
E' semplicissimo :
1. Metti tutte le dichiarazioni / chiamate API nell'area di codice (generale)/(dichiarazioni) della Form che vuoi usare : Codice:
Private Type LUID
lowpart As Long
highpart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
LuidUDT As LUID
Attributes As Long
End Type
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As _
Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle _
As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias _
"LookupPrivilegeValueA" (ByVal lpSystemName As String, _
ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal _
TokenHandle As Long, ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _
PreviousState As Any, ReturnLength As Any) 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 TerminateProcess Lib "kernel32" (ByVal hProcess As _
Long, ByVal uExitCode As Long) As Long
3. Il codice utilizzatore c'è già. Lo trovi commentato a metà codice : Codice:
' Usage: Dim pID As Long
' pID = Shell("Notepad.Exe", vbNormalFocus)
' '...
' If KillProcess(pID, 0) Then
' MsgBox "Notepad was terminated"
' End If
Questo è il solo ed unico codice che va sotto il Click di un pulsante VB ! Leva i commenti e adattalo alle tue esigenze... |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
fino al primo passaggio ci sono , basta che incolli quel codice nel form no? ma dal secondo in poi non riesco a seguire
|
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
adesso il problema è un altro ,sono riuscito a fare tutto ma funziona solo se il processo viene chiuso dalla x della finestra ma se viene killato dal task manager non succ niente.
|
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
mm oppure dato che se il processo viene killato non si puo far nulla , non si potrebbe fare in modo che il processo non si potesse terminare?
cioè se tentano di killarlo gli esce scritto che è impossibile? |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non credi che sarebbe un po' pericoloso se non si potesse killare ? Solitamente solo i servizi non li puoi terminare così, ma dalla lista dei servizi.
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 224
|
forse hai ragione ma l'unico rimedio sarebbe quello , se hai una soluzione migliore...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:03.




















