Newsgroup: it.comp.appl.access
Titolo: Batch in VB o WSH per chiudere file, riaprirlo e aprirne un altro

Dovrei verificare se in Task Manager è aperto un determinato file.exe;
Se presente lo chiudo e lo riapro, altrimenti lo apro comunque;
Poi attendo x secondi e apro File2.exe
Dovrei creare un batch per effettuare questa operazione ma ... mi sono 
perso in un bicchiere d'acqua e sono arenato da ieri sera, chiedo il Vs. 
cortese aiuto per risolvere l'arcano mistero (per me) e per poter 
proseguire con meno stress ;o)
Grazie anticipatamente
--
T.R.


Dimenticavo, se durante il controllo trovo file.exe attivo nel task 
manager ... vorrei *forzare* \ *obbligare* la sua chiusura un pò come 
farei con il comando Dos
taskkill /IM file.exe /T per capirci
Rigrazie
--
T.R.

 ha scritto nel messaggio

file.exe /T per capirci> Rigrazie> --> T.R.'OTTENERE L'Elenco dei processi
in esecuzione:
    Dim obj As Object
    For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process ")
        Debug.Print "Name=" & obj.Name & " PID=" & obj.Handle
    Next
    set obj=Nothing
'Killare un processo
    Dim obj As Object
    For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='NomeFile.exe'")
        obj.Terminate
    Next
    set obj=Nothing'Eseguire un EXE    Dim oWshShell    Set oWshShell =
CreateObject("WScript.Shell")    oExec = oWshShell.Run("NomeFile.exe")
Set oWshShell = NothingVedi se ti può essere utile
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Perfetto, ma dopo aver killato il file, vorrei che passassero x secondi 
prima di lanciare il file, come posso gestire il tutto?
P.S.: sarà OT ma qui da 15 minuti nevica da far paura!!!!
Saluti e grazie 1000
--
strano...mavero

[CUT]
Scusate il post precedente inviato in un formato strano:
'OTTENERE L'Elenco dei processi in esecuzione:
    Dim obj As Object
    For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process ")
        Debug.Print "Name=" & obj.Name & " PID=" & obj.Handle
    Next
    set obj=Nothing
'Killare un processo
    Dim obj As Object
    For Each obj In GetObject("winmgmts:").ExecQuery("SELECT * FROM
Win32_Process WHERE Name='NomeFile.exe'")
        obj.Terminate
    Next
    set obj=Nothing
'Eseguire un EXE
    Dim oWshShell
    Set oWshShell =CreateObject("WScript.Shell")
    oExec = oWshShell.Run("NomeFile.exe")
    Set oWshShell = NothingVedi se ti può essere utile
Ovviamente usando le API otterresti tempi d'esecuzione
non paragonabili, ma la semplicità di queste istruzioni può
essere argomento di valutazione.


 strano...mavero
Quì hai tutto su WSH
http://msdn.microsoft.com/library/en-us/script56/html/wsoriObjects.asp
http://msdn.microsoft.com/library/en-us/script56/html/wsoriMethods.asp
http://msdn.microsoft.com/library/en-us/script56/html/wsoriProperties.asp
Per il timer la vedo durissima non usando un linguaggio standard
che non ha possibilità di Timer.
Sarà banale ma una chiamata alla funzione API Sleep in VBS potrebbe
essere l'unico metodo.


 Ciao
Sei stato gentilissimo,
grazie!


Infatti trovo estremamente interessante il tutto,
ho cercato, per mia comodità, degli elenchi di comandi WSH su google, ma 
non mi è parso di risocntrare Link particolarmente interessanti,
...


 >
[CUT]
Altro link per il WSH
http://www.microsoft.com/technet/scriptcenter/default.mspx
da cui ti puoi scaricare SCRIPTOMATIC 2.0.
Ciao
MarcoMac

 Poi attendo x secondi e apro File2.exe
Puoi provare a dare un'occhiata a Process Viewer:
http://www.xmlsp.com/pview/prcview.htm
HTH.
Alessandro

Private Sub Form_Load()
Dim obj As Object
Dim LancioBat
On Error Resume Next
If obj("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name =
'file1.exe'") Then
Set obj = Nothing
    'codice per seguire un EXE
    Dim oWshShell
    Set oWshShell = CreateObject("WScript.Shell")
    oExec = oWshShell.Run("c:\directory\file2.exe") 'Esegue solo il file2 in
modalita standard
Set oWshShell = Nothing
Else
Dim RetVal
RetVal = Shell("c:\dir2\filebat.bat", vbHide) 'Esegue file1.exe, poi dipo 6
secondi esegue file2.exe
End If
Unload Me
End Sub
Praticamente la parte ELSE non viene considerata, parte sempre solo
file2.exe ... dove ho sbagliato?
--
strano...mavero

Nel subject
MAssimialino 

 MAssimialino
Lo so, ma mi legavo al vecchio post, credevo quindi fosse corretto apportare
modifiche al subject per indicare dei cambiamenti...
chiedo scusa!
--
strano...mavero

 wrote in message
news:4222f...@x-privat.org

Questo non č proprio il codice che ti ho indicato...!!
Se si tratta di VBS in ogni caso cosa ti aspetti da :ů
  obj("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name =
  'file1.exe'")
Rimettilo nel Ciclo, ed inserisci una Variabile che conta il
Numero dei File Trovati.
Gli EXE possono girare in MultiIstanza e non č corretto quello che
hai messo.
Uscendo dal Ciclo controlli con un IF....ELSE....ENDIF il
Counter che hai messo.
Ricordati che non č esattamente VB, e forse anche VB avrebbe
avuto lo stesso problema in questo caso.
@Alex 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

;o) hai ragione,  la neve, il traffico, il fattore lunedì ... ho fatto
proprio una stupidata immane.
Ho risolto il problema e tanto per la cronaca, posto il codice, sia mai che
possa tornare utile a qualcuno!
Option Explicit
Global Task(200) As Long
Global iTask As Integer
Global NewTask(10) As String
Global iNewTask As Integer
Global CercaTask As Boolean
Global gTrovato As Boolean
Global gNomeTask As String
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal
lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal
hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As
Boolean
Dim sSave As String, Ret As Long
Dim Trovato As Boolean
Dim I As Integer
Ret = GetWindowTextLength(hwnd)
sSave = Space(Ret)
GetWindowText hwnd, sSave, Ret + 1
If UCase(sSave) = gNomeTask Then gTrovato = True
EnumWindowsProc = True
End Function
Sub Main()
Dim obj As Object
Dim LancioBat
Dim RetVal As Single
On Error GoTo Errore
gTrovato = False
gNomeTask = "QUIQUOQUA"
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
If Not gTrovato Then
  RetVal = Shell("c:\dir1\paperino.bat", vbHide)
Else
  RetVal = Shell("c:\dir2\gastone.exe", vbHide)
End If
End
Exit Sub
Errore:
MsgBox "Errore: " & Err.Number & vbCrLf & Err.Description
End
End Sub
Buona giornata,
--
strano...mavero

 proprio una stupidata immane.
Ragazzeeeeetttiiiii....
Ma 'sto subject?!!!?!?
Antonio


E come lo trova???
Cercando "Dove" o "sbaglio"??????
E' proprio questo il senso del subject corretto
MAssimiliano 

 MAssimiliano
Ciao.
-- 
Sergio MAZZA