Accedi per seguire   
Seguaci 0
ghiepo

Chiusura Automatica Programmi

25 messaggi in questa discussione

Ciao a tutti,

qualcuno sa spiegarmi come si puo' scrivere un file batch in modo che chiuda i programmi aperti in un computer basato su windows?

Tnx

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ciao non penso che con i file batch puoi avere la capacità di gestire i processi.

Ti consiglio di vederti i file hta che contengono VBScript.

Ciao

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Per chiudere rapidamente un programma: premi Alt+F4

Oppure puoi scaricare il freeware SmartClose

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

puoi chiudere i servizi da un batch file con il comando

net stop nomeservizio

per poterlo fare con altri programmi dovresti prima lanciarli come servizi.

teoricamente dovrebbe essere possibile, prova fare una ricerca con google x

run application as service

ho trovato questo ma e' a pagamento

e questo, srvany di M$ sembra free

Modificato da Angelo

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

Sto dando un'occhiata per ottenere la cosa con Visual Basic (di cui non so assolutamente nulla) e ho visto che si puo' terminare un processo (tipo notepad.exe) con un programma scritto cosi':

Dim proc As System.Diagnostics.Process
Dim pList() As Process

pList = Process.GetProcessesByName("notepad")
For Each proc In pList
   Dim resp As MsgBoxResult
   resp = MsgBox("Terminate " & proc.ProcessName & "?", _
       MsgBoxStyle.YesNo, "Terminate?")
   If resp = MsgBoxResult.Yes Then
       proc.Kill()
   End If
Next

Solo che dicono che come requisiti ci vuole, oltre ad un'istanza in esecuzione del Blocco note (notepad.exe), anche un riferimento allo spazio dei nomi System.Diagnostics, solo che non ho la piu' pallida idea di cosa voglia dire :sigh: : o meglio, una pallida idea ce l'ho ma non so come fare.

Qualcuno puo' aiutarmi??? :)

Modificato da ZipGenius

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

Salve,

Beh...per terminar eun processo...non sono proprio quelle le istruzioni necessarie....

Devi utiizzare le API di Windows (API = Application Programming Interface)....

Nella fattispecie la TerminateProcess, la quale pressuppone di avere la conoscenza dell' Handle del Processo.....il quale Handle si ottiene utilizzando la OpenProcess .....

Comunque, in serata, ti posto un po' di codice in VB6 sicuramente funzionante in quanto tratto dal "Task (quasi) Manager" ...

Se hai pazienza fino a stasera .... :) .... hai voglia ...è dal 16 Maggio.....l'ho visto solo ora....va beh...

Ciao !!

Modificato da ceccus

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

Salve,

Allora , come promesso, ecco un po' di codice VB6 ...

Private Sub CmdKillProc_Click()
Dim hProcess As Long
Dim RetBool As Boolean
Dim lngreturnvalue As Long
Dim Pid As Long
Dim hr As Long
Dim Ret As Long
Dim I As Long
   
   On Error GoTo Errore
   Ret = MsgBox("Si è SICURI di voler Terminare il Processo ??", vbExclamation + vbOKCancel, "Task (quasi) Manager")
   If Ret = vbOK Then
      Pid = CLng(Fg1.TextMatrix(Fg1.RowSel, 1))
      EsitoContr = CtrProcesso(Fg1.RowSel)
      If EsitoContr = True Then
         glPid = Pid
         If GTipoPiattaforma > 1 Then
            RetBool = MaxPriorityTqM("HI")
            Sleep (100)
         End If
          hProcess = OpenProcess(PROCESS_TERMINATE + SYNCHRONIZE, False, Pid)
          hr = GetLastError()
          lngreturnvalue = TerminateProcess(hProcess, 0&)
          lngreturnvalue = CloseHandle(hProcess)
         If GTipoPiattaforma > 1 Then
            RetBool = MaxPriorityTqM("NM")
         End If
         Call Sleep(400)
         Call RefreshProc
      Else
         Call SegnalaAnomalia("Processo di Sistema. Impossibile eseguirne il KILL")
      End If
   End If
   Exit Sub
   
Errore:
   Err.Raise Err.Number
End Sub

Questa è la routine principale.....c'è anch euna routine che serve per innalzare i livelli di esecuzione del Processo che deve "killare" gli altri...ed è la MaxPriorityTqM che accetta un parametro....NM = Normale , HI = High

Ecco il suo codice :

Public Function MaxPriorityTqM(ByVal Mode As String) As Boolean
Dim hProcessTqM As Long
Dim Retval As Long
Dim lngreturnvalue As Long

   If Mode = "HI" Then
      'assegno alta priorità al TqM......
      hProcessTqM = OpenProcess(PROCESS_SET_INFORMATION, False, GIDProcTqM)
      Retval = SetPriorityClass(hProcessTqM, HIGH_PRIORITY_CLASS)
      lngreturnvalue = CloseHandle(hProcessTqM)
      ' fine assegnazione alta priorità Tqm
   Else
      'assegno priorità normale al TqM......
      hProcessTqM = OpenProcess(PROCESS_SET_INFORMATION, False, GIDProcTqM)
      Retval = SetPriorityClass(hProcessTqM, NORMAL_PRIORITY_CLASS)
      lngreturnvalue = CloseHandle(hProcessTqM)
      ' fine assegnazione priorità normale Tqm
   End If
   MaxPriorityTqM = True
End Function

Il TqM (e anche il 2) riesce a Killare qualsiasi processo perchè si "appropria" di diritti ch ealtrimenti non avrebbe...

Ecco la Routine :

Public Function SetPrivilegi() As Boolean
Dim Hproc       As Long
Dim hToken      As Long
Dim mLUID       As LUID
Dim mPriv       As TOKEN_PRIVILEGES
Dim mNewPriv    As TOKEN_PRIVILEGES
Dim lngResult   As Long
   
   Hproc = GetCurrentProcess()
   lngResult = OpenProcessToken(Hproc, _
                                TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, _
                                hToken)
   lngResult = LookupPrivilegeValue("", _
                                    "SeDebugPrivilege", _
                                    mLUID)
   
   With mPriv
       .PrivilegeCount = 1
       .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
       .Privileges(0).pLuid = mLUID
   End With
   
   lngResult = AdjustTokenPrivileges(hToken, _
                                     False, _
                                     mPriv, _
                                     4 + (12 * mPriv.PrivilegeCount), _
                                     mNewPriv, _
                                     4 + (12 * mNewPriv.PrivilegeCount))
End Function

Chiaramente , occorrono le dichiarative di tutte le strutture presenti nel codice e delle relative API.......

Se poi hai difficoltà ad "assemblare"...beh..un programmino semplice semplice lo posso mettere in piedi io nel giro di qualche ora..... (B)

Ciao !!

Modificato da ZipGenius

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Grazie Ceccus, caspita e' complicatino per un profano come me... :)

Vedo cosa riesco a combinare e ti faccio sapere, grazie ancora, ciao.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Inviato (modificato)

Salve,

Non ti preoccupare...s epoi , alla fine non dovesse venire niente di buono....te lo 'Assemblo" io un .exe che "killa" i processi in modo Impalcabile....

Ciao !!

P.S. : hai visto che casino.....e tutto per killare un processo.... :P

P.S. 2 : ringrazio l'amico ZipG ch eha editato il Post e lo ha reso notevolmente più leggibile :)

Modificato da ceccus

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Basta usare i tags [ CODE ] e [ /CODE ] :)

A proposito, ceccus, non si potrebbe ottnere lo stesso risultato con un file .VBS?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Salve,

Con VBS intendi VB Script ?

Se è questo il caso, direi di no, perchè i privilegi particolari li devi dare ad un processo ... almeno non senza alcune modifiche al codice riportato ....

E poi bisogna appunto vedere quale è il processo ospitante, se della famiglia ASP o ASPX ...o qualcos'altro... per "calibrare" bene tali privilegi.....

In definitiva , se vuoi realizzare una versione "Internet" del "ruzzino" un po' di lavoro c'è da farlo.....ma , a mio avviso, converrebbe realizzare una Dll che contiene il metodo "KillProc" e richiamare la Dll dalla pagina ASP.

In questo modo , non solo sarà richiamabile dalla tecnologia ASP, ma anche da quella ASPX e in generale .NET ......

Ciao !!

P.S. : E' vero....non me l'ero mica data per il tag <CODE> .... :popò:

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

da vbs non si può ... non può manipolare il processo figlio!

ovvio che se chiami una dll che lo gestisce... non è comunque il codice vbs! :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Salve,

Non ti preoccupare...s epoi , alla fine non dovesse venire niente di buono....te lo 'Assemblo" io un .exe che "killa" i processi in modo Impalcabile....

Compliementi per il codice :P

ma il programma proposto sopra sa esattamente la setssa cosa e senza la fatica di compilarlo :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Salve,

Ti ringrazio :P ...ma vuoi mettere la soddisfazione di scriverlo il programma ....

E comunque , anche il TqM (e prossimamente il TqM2 ...manca poco ormai) è perfettamente in grado di farlo....ed è ITALIANO .... :)

Ciao !!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Caspita complimenti per il codice veramente :) , anch'io se lo sapessi fare seguirei la strada di costruirlo da me il programma è proprio una soddisfazione :wub:, anche la spiegazione è ottima, se vuoi anche metter un corso di VB lo seguo volentieri :P :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Salve,

Ringrazio anche Te.... :)

Per il corso di VB....sì...prima o poi lo faccio...solo che per primo lo inserisco nel mio sito , liberamente linkabile e raggiungibile da qualsiasi parte...solo ch ele cosa da fare sono tante e le mie giornate (come quelle di tantissimi altri) bisognerebbe fossero di 28 ore.... :P

A breve breve un software per la criptatura dei files e la guida su come rendere un PC più sicuro, sia con semplici accorgimenti che con manovre "un po più complicate".....

Ciao !!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

[ot] Sai che c'ho pensato di costruire un softwerino che aggiungesse ore alla giornata :P è che non so quali librerie usare le god.dll non esistono ancora :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Salve,

[ot] ...ahahahahahahahahahahahahah :) (B) :P

Ciao !!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Salve,

Ti ringrazio  :P ...ma vuoi mettere la soddisfazione di scriverlo il programma ....

Tutta un'altra cosa non c'è dubbio :P

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

In effetti ho provato pskill e dovrebbe essere esattamente quello che cercavo :) , ora lo testo sulle macchine.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Pskill direi che risponde esattamente alle mie esigenze, comunque grazie lo stesso Ceccus, e complimenti... :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ciao a tutti,

qualcuno sa spiegarmi come si puo' scrivere un file batch in modo che chiuda i programmi aperti in un computer basato su windows?

Puoi usare i comandi "tskill" o "taskkill". Con questi comandi puoi anche chiudere i processi "figli", ossia avviati dal programma che vuoi chiudere.

Qua la sintassi e le opzioni di taskkill:

TASKKILL [/S sistema [/U nomeutente [/P [password]]]]
        { [/FI filtro] [/PID idprocesso | /IM nomeimmagine] } [/F] [/T]

Descrizione:

Questo strumento della riga di comando può essere utilizzato per terminare uno o più processi.

I processi possono essere interrotti dalla id processo o dal nome immagine.

Elenco parametri:

/S sistema Specifica il sistema remoto a cui connettersi.

/U [dominio\]utente Specifica il contesto utente in cui

eseguire il comando.

/P [password] Specifica la password per il dato

contesto utente. Se omesso, viene richiesto.

/F Specifica la terminazione forzata

processo(i).

/FI filtro Visualizza una serie di attivit… che corrispondono a un

dato criterio specificato dal filtro.

/PID id processo Specifica il PID del processo che

deve essere terminato.

/IM nome immagine Specifica il nome immagine del processo

che deve essere terminato. Carattere jolly '*'

può essere utilizzato per specificare tutti i nomi immagine.

/T Eliminazione struttura: termina il processo specificato

e tutti i processi figlio avviati dallo stesso.

/? Visualizza la Guida\Utilizzo.

Esempi:

TASKKILL /S sistema /F /IM notepad.exe /T

TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

TASKKILL /F /IM notepad.exe /IM mspaint.exe

TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe

TASKKILL /S sistema /U dominio\nomeutente /FI "USERNAME ne NT*" /IM *

TASKKILL /S sistema /U nomeutente /P password /FI "IMAGENAME eq note*"

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

[ben]Tittoproject[/ben] :P

Verissimo quel che dici, ma se non sbaglio, il comando taskkill è disponibile solo su XP e 2003 server. :P:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0