Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

WMI e elimina processo

  1. #1
    roccolamann non è in linea Scribacchino
    Post
    510
    Like Inviati  
    0
    Like Ricevuti  
    0
    Con la seguente routine elimino tutti i processi del programma NOTEPAD
    Sub PROCESSIWINDOWSNotepadChiudi()
        Dim objWMI As Object, objProcess As Object, objProcesses As Object
          Set objWMI = GetObject("winmgmts://.")
          Set objProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Notepad.exe'")
                For Each objProcess In objProcesses
                     Call objProcess.Terminate
                Next
        Set objProcesses = Nothing: Set objWMI = Nothing
    End Sub
    
    Vorrei poterla modificare in modo da eliminare solo alcuni processi avviati; cioè tenere alcuni files aperti
    e chiuderne altri.
    Come posso fare?

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,364
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    31
    E come possiamo rispondere se non sappiamo i criteri in base ai quali vorresti operare?
    ℹ️ Leggi di più su AntonioG ...

  3. #3
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,205
    Like Inviati  
    18
    Like Ricevuti  
    10

  4. #4
    roccolamann non è in linea Scribacchino
    Post
    510
    Like Inviati  
    0
    Like Ricevuti  
    0
    Chiarisco meglio; poniamo che abbia aperto tra files (rispettivamente Giallo.txt, Rosso.txt, Verde.txt); vorrei chiudere solo il primo "Giallo.txt".
    Magari forse servendomi di una proprietà Index (non so se esista) per chiudere solo il primo file aperto.
    In tal caso la routine dovrebbe essere corretta cosi:
    Sub PROCESSIWINDOWSNotepadChiudi()
        Dim objWMI As Object, objProcess As Object, objProcesses As Object
          Set objWMI = GetObject("winmgmts://.")
          Set objProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Notepad.exe'")
                For Each objProcess In objProcesses
                           If odjProcess.index=1 then
                                 Call objProcess.Terminate
                                    else
                           End if
                Next
        Set objProcesses = Nothing: Set objWMI = Nothing
    End Sub
    
    Ma non so se si può fare.

  5. #5
    roccolamann non è in linea Scribacchino
    Post
    510
    Like Inviati  
    0
    Like Ricevuti  
    0
    Credevo che la sezione Windows comprendesse anche il settore WMI.
    Altrimenti spostatemi pure.
    Grazie.

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,364
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    31
    Ma cosa usi access, word, vb6?
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Post
    17,364
    Blogs
    5
    Like Inviati  
    5
    Like Ricevuti  
    31
    Quote Originariamente inviato da roccolamann Visualizza il messaggio
    Ma non so se si può fare.
    Ma li hai aperti tu i file con notepad con il tuo codice?
    ℹ️ Leggi di più su AntonioG ...

  8. #8
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,205
    Like Inviati  
    18
    Like Ricevuti  
    10
    Quote Originariamente inviato da roccolamann Visualizza il messaggio
    Credevo che la sezione Windows comprendesse anche il settore WMI.
    Altrimenti spostatemi pure.
    Grazie.
    Ma se non spieghi il linguaggio che stai usando come fa il moderatore a spostare la discussione nella sezione corretta?

    Comunque oltre a contenere errori di scrittura, il tuo codice è sbagliato.
    Non devi interrogare la proprietà Index che nemmeno esiste e di conseguenza restituisce una bella pernacchia.
    Devi invece interrogare la proprietà:

    objProcess.CommandLine
    
    che restituisce il percorso completo del file aperto dal processo, ed è l'unica informazione che ti può consentire di distinguere quale processo andrà chiuso.

    Nella firma della tua routine io aggiungere un parametro sFileName e quando questo sarà presente nella proprietà CommandLine lo chiuderai (il processo).
    ℹ️ Leggi di più su gibra ...

  9. #9
    roccolamann non è in linea Scribacchino
    Post
    510
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ho corretto così il codice usando la proprietà CommandLine e mi funziona
    Sub PROCESSIWINDOWSNotepadElimina()
        Dim Messaggio As String
        Dim objWMI As Object, objProcess As Object, objProcesses As Object
          Set objWMI = GetObject("winmgmts://.")
          Set objProcesses = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'Notepad.exe'")
                For Each objProcess In objProcesses
                    If VBA.Left(objProcess.CommandLine, 10) = "PINCOPALLO.txt" Then     'Scelgo il file da chiudere mediante la proprietà LEFT
                          Call objProcess.Terminate
                              Else
                    End If
                Next
        Set objProcesses = Nothing: Set objWMI = Nothing
    End Sub
    
    Cioè, avendo aperto tre files col programma Notepad mi chiude soltanto quello con il nome PINCOPALLO.
    Uso questa routine nel Vba Word ma penso che (con le dovute correzioni) funzioni anche in Visual Basic.
    A proprosito come faccio a vedere tutte le proprietà e gli oggetti di WMI?
    Esiste una guida?
    Grazie del suggerimento

  10. #10
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Post
    6,205
    Like Inviati  
    18
    Like Ricevuti  
    10
    Quote Originariamente inviato da roccolamann Visualizza il messaggio
    A proprosito come faccio a vedere tutte le proprietà e gli oggetti di WMI?
    Esiste una guida?
    La trovi su Internet.
    ℹ️ Leggi di più su gibra ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. WMI e elimina processo
    Da roccolamann nel forum Microsoft Windows
    Risposte: 9
    Ultimo Post: 14-04-2020, 21:31
  2. Risposte: 8
    Ultimo Post: 14-11-2017, 19:30
  3. ~TMPCLPMacro: come si elimina?
    Da maxs84 nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 26-08-2016, 15:18
  4. [VB6] Elimina Record
    Da tippolo nel forum Visual Basic 6
    Risposte: 50
    Ultimo Post: 12-01-2007, 02:19
  5. surprise!.exe come si elimina?
    Da buji nel forum Microsoft Windows
    Risposte: 1
    Ultimo Post: 13-06-2004, 18:00