PDA

View Full Version : vb.net chiudere un processo quando compare nel taskmanager


thekazar
11-05-2014, 11:17
Ho un programma che quando è in esecuzione avvia un'altro programma chiamato ads.exe e vorrei eliminare questo avvio direttamente con una mia applicazione in backgroud.
Ho provato ad eliminare direttamente ads.exe ma da errore poi l programma principale mentre se carica ads.exe e poi lo killo con taskmanager tutto funziona!
Dovrei fare un loop con la funzione if credo ma non so una cippa.
La mia idea è questa:
Avvio il programma principale
Avvio il taskkiller che fa un loop sino a quando ads.exe non si apre
Il taskkiller killa ads.exe e si autochiude.
Chi mi aiuta?

das
12-05-2014, 09:38
Ho un programma che quando è in esecuzione avvia un'altro programma chiamato ads.exe e vorrei eliminare questo avvio direttamente con una mia applicazione in backgroud.
Ho provato ad eliminare direttamente ads.exe ma da errore poi l programma principale mentre se carica ads.exe e poi lo killo con taskmanager tutto funziona!
Dovrei fare un loop con la funzione if credo ma non so una cippa.
La mia idea è questa:
Avvio il programma principale
Avvio il taskkiller che fa un loop sino a quando ads.exe non si apre
Il taskkiller killa ads.exe e si autochiude.
Chi mi aiuta?

Per esempio in C#:

try
{
foreach (Process proc in Process.GetProcessesByName("ads"))
{
proc.Kill();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}


Altrimenti usi le windows api e fai qualcosa del genere:

foreach(Process proc in Process.GetProcesses())
{
if(proc.MainWindowTitle.StartsWith("TITOLO-FINESTRA"))
{
IntPtr handle = proc.MainWindowHandle;
DestroyWindow(handle);
}
}

lorenzo001
12-05-2014, 10:44
Scrivi un programma che all'avvio termina senza fare nulla e compilalo come ads.exe

das
12-05-2014, 19:38
Vedo adesso che nel titolo si fa riferimento a vb.net e non a C#. Non conosco vb.net ma è qualcosa di simile.
Cmq il suggerimento di lorenzo001 è più semplice, prova prima quello.

thekazar
12-05-2014, 21:16
Vedo adesso che nel titolo si fa riferimento a vb.net e non a C#. Non conosco vb.net ma è qualcosa di simile.
Cmq il suggerimento di lorenzo001 è più semplice, prova prima quello.
Purtroppo il suggerimento di lorenzo non funziona (fará un checksize?mah) cmq il. Codice il codicd postato in c non prevede il loop nel senso che non aspetta ma killa ciascun processo di nome ads. Come si potrebbe strutturare?

tomminno
13-05-2014, 16:15
Purtroppo il suggerimento di lorenzo non funziona (fará un checksize?mah) cmq il. Codice il codicd postato in c non prevede il loop nel senso che non aspetta ma killa ciascun processo di nome ads. Come si potrebbe strutturare?

Aggiungere un loop non dovrebbe essere un problema. Cosa vorresti strutturare?

das
13-05-2014, 17:06
Purtroppo il suggerimento di lorenzo non funziona (fará un checksize?mah) cmq il. Codice il codicd postato in c non prevede il loop nel senso che non aspetta ma killa ciascun processo di nome ads. Come si potrebbe strutturare?

Nessun loop, basta che tu crei un timer (tipo ogni sec) e metti le istruzioni di chiusura nell'evento onTimer.

thekazar
14-05-2014, 13:50
Nessun loop, basta che tu crei un timer (tipo ogni sec) e metti le istruzioni di chiusura nell'evento onTimer.
Il caricamento di ads.exe è random a volte dopo 15 a volte dopo 30..credo ci voglia?
L'idea per il programma è: cerca ads.exe sino a quando nel taskmanager è presente il processo, poi killa il processo e chiuditi

tomminno
14-05-2014, 16:28
Il caricamento di ads.exe è random a volte dopo 15 a volte dopo 30..credo ci voglia?
L'idea per il programma è: cerca ads.exe sino a quando nel taskmanager è presente il processo, poi killa il processo e chiuditi

Appunto dove sta il problema?
Una volta che hai il codice per chiudere il programma dove sta la difficoltà nel metterlo in un loop (o in un timer)?
Ovviamente il loop era la soluzione più immediata e semplice.

Su msdn c'è l'esempio di codice su come si usa un Timer (http://msdn.microsoft.com/it-it/library/system.timers.timer%28v=vs.110%29.aspx)
Lo unisci con quello per chiudere il programma ed hai fatto.

thekazar
14-05-2014, 20:47
Appunto dove sta il problema?
Una volta che hai il codice per chiudere il programma dove sta la difficoltà nel metterlo in un loop (o in un timer)?
Ovviamente il loop era la soluzione più immediata e semplice.

Su msdn c'è l'esempio di codice su come si usa un Timer (http://msdn.microsoft.com/it-it/library/system.timers.timer%28v=vs.110%29.aspx)
Lo unisci con quello per chiudere il programma ed hai fatto.

Non ho capito come dici che dovrei usare il timer :/ se non so quando si avvia ads.exe(è random)che valore imposto al timer?
Vorrei che il mio programma chiudesse ads appena si avvia

tomminno
15-05-2014, 08:33
Non ho capito come dici che dovrei usare il timer :/ se non so quando si avvia ads.exe(è random)che valore imposto al timer?
Vorrei che il mio programma chiudesse ads appena si avvia

Fai un timer impostato a 500 millisecondi, dove sta il problema?
Il timer ogni 500ms chiamerà il tuo metodo per il kill di ads. Appena trova ads lo killerà, poi deciderai te cosa fare del programma se uscire appena terminato ads o se continuare ad eseguire (nel caso in cui ads possa essere avviato più volte dal programma originale)

thekazar
16-05-2014, 13:50
Fai un timer impostato a 500 millisecondi, dove sta il problema?
Il timer ogni 500ms chiamerà il tuo metodo per il kill di ads. Appena trova ads lo killerà, poi deciderai te cosa fare del programma se uscire appena terminato ads o se continuare ad eseguire (nel caso in cui ads possa essere avviato più volte dal programma originale)
Scusami ma son un somaro :)
Creo un timer imposto i secondi lo setto enabled ma poi che codice aggiungo?
Puoi postare un esempio?

das
16-05-2014, 19:14
Scusami ma son un somaro :)
Creo un timer imposto i secondi lo setto enabled ma poi che codice aggiungo?
Puoi postare un esempio?

Una volta creato il timer e fatto doppio click sull'evento Timer, avrai nel codice qualcosa così:

Private Sub Timer1_Timer()

End Sub


Lì nel mezzo ci metti:

try
{
foreach (Process proc in Process.GetProcessesByName("ads"))
{
proc.Kill();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

tradotto però in vb (che non conosco) perchè questo sopra è C#.

A quel punto nelle proprietà del timer metti 500 millisecondi e lo lanci.

Lui ogni 500 ms guarda se c'è in memoria un programma che si chiama ads. Se c'è lo chiude, se non c'è non fa niente.
Puoi anche decidere che se c'èchiude "ads" e poi chiude se stesso.

lorenzo001
17-05-2014, 08:28
Scusami ma son un somaro

Prima di eliminare la protezione dal tuo gioco potresti imparare le basi della programmazione ...

thekazar
17-05-2014, 18:08
Una volta creato il timer e fatto doppio click sull'evento Timer, avrai nel codice qualcosa così:

Private Sub Timer1_Timer()

End Sub


Lì nel mezzo ci metti:

try
{
foreach (Process proc in Process.GetProcessesByName("ads"))
{
proc.Kill();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

tradotto però in vb (che non conosco) perchè questo sopra è C#.

A quel punto nelle proprietà del timer metti 500 millisecondi e lo lanci.

Lui ogni 500 ms guarda se c'è in memoria un programma che si chiama ads. Se c'è lo chiude, se non c'è non fa niente.
Puoi anche decidere che se c'èchiude "ads" e poi chiude se stesso.

Grazie mille provo ad adattarlo appena posso

thekazar
17-05-2014, 18:16
Prima di eliminare la protezione dal tuo gioco potresti imparare le basi della programmazione ...
Se fosse questo il mio lavoro sarei pienamente d'accordo con te..ma non lo è.
Mi sono avvicinato da poco a vb,solo perchè è molto semplice come script/linguaggio:D
Di solito uso youtube o google per trovare quello che mi serve ma questa funzione non l'ho trovata. Cmq se non ti va di aiutarmi non c'è bisogno di commentare;)

lorenzo001
17-05-2014, 20:57
Tanto per cominciare VB.NET non è molto semplice, forse la sintassi è "amichevole" ma è sempre programmazione OOP, teoricamente complessa.

Rispetto tantissimo il lavoro del programmatore e mille volte di più chi impara (da solo) riuscendo a raggiungere buoni livelli studiando.

In tutti i casi, io commento quanto voglio, anzi, maggiormente in questi casi; non so che lavoro fai ma non penso tu saresti così contento che qualcuno violasse una tua creazione.

Sono molto critico - e abbastanza libero per dirlo - su chi utilizza questo o quel suggerimento solo per mettere in piedi la sprotezione di un giochetto. Ti dirò di più, è forte la tentazione di segnalare questa discussione al produttore del gioco e a chi di competenza.