PDA

View Full Version : Chiudere programma appena aperto


Zeratul
14-01-2023, 15:46
Ciao a tutti.
Ho un software che faccio eseguire in esecuzione automatica in avvio di Windows. Appena lanciato c'è la finestra principale del software che io chiudo con la X ma il software non si chiude, ma va nella tray in basso a destra. In pratica non viene chiuso con la X ma solo minimizzato. Per chiudere solito tasto destro su icona nella tray e poi esci.
Io vorrei che avvenisse tutto in automatico all'avvio di Windows. C'è qualche parametro da aggiungere al collegamento del exe in modo che avvenga una sorta di "esegui, e dopo chiuditi", così lui rimane nella tray? Non minimizzato nella barra centrale delle finestre aperte, ma proprio in tray, quindi finestra chiusa ma programma eseguito.
Ovviamente non c'è nessuna opzione del genere tra i settings del software.....

x_Master_x
15-01-2023, 09:06
Puoi gestire tutto da solo. Per prima cosa rimuovi il software dall'esecuzione automatica e usa invece "Pianifica Attività" (con Crea nuova attività di base, scegli all'accesso dell'utente come tipologia di avvio)
A quel punto crei due tipi di esecuzione:
1) Quella che avvia il software
2) Un VBS che chiude il software. Una cosa tipo:

WScript.Sleep 1000
Set oShell = CreateObject("WScript.Shell")
If oShell.AppActivate("Qui titolo della finestra") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If
Set oShell = Nothing

O volendo puoi gestire tutto dal VBS:

Set oShell = CreateObject("WScript.Shell")
oShell.Run("""C:\Percorso\eseguibile.exe""")
WScript.Sleep 1000
If oShell.AppActivate("Il titolo della finestra") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If
Set oShell = Nothing

Zeratul
16-01-2023, 09:00
Puoi gestire tutto da solo. Per prima cosa rimuovi il software dall'esecuzione automatica e usa invece "Pianifica Attività" (con Crea nuova attività di base, scegli all'accesso dell'utente come tipologia di avvio)
A quel punto crei due tipi di esecuzione:
1) Quella che avvia il software
2) Un VBS che chiude il software. Una cosa tipo:

WScript.Sleep 1000
Set oShell = CreateObject("WScript.Shell")
If oShell.AppActivate("Qui titolo della finestra") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If
oShell = Nothing

O volendo puoi gestire tutto dal VBS:

Set oShell = CreateObject("WScript.Shell")
oShell .Run("""C:\Percorso\eseguibile.exe""")
WScript.Sleep 1000
If oShell.AppActivate("Il titolo della finestra") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If
oShell = Nothing




grazie, ma non ci riesco.
con il primo metodo funziona l'avvio del programma al login, ma poi non mi chiude la finestra. in pratica come era prima con l'avvio automatico.
con il secondo metodo invece non mi avvia nemmeno il programma ma mi esce la finestra di windows classica con la richiesta "con cosa vuoi aprire il file"?
il programma si chiama ipWay e questo il codice tuo modificato, relativamente al primo metodo.

WScript.Sleep 1000
Set oShell = CreateObject("WScript.Shell")
If oShell.AppActivate("ipWay") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If
oShell = Nothing



https://i.ibb.co/Bss6jzG/www.png (https://ibb.co/Bss6jzG)

questa la finestra da chiudere. se faccio alt+f4 va regolarmente in stray
https://i.ibb.co/xY9bBHm/333.png (https://ibb.co/xY9bBHm)

Zeratul
16-01-2023, 10:03
sto facendo un po' di prove. la richiesta di come aprire il file vbs arriva proprio dall'utilità di pianificazione windows.
ci sono entrato ed ho provato a lanciare manualmente lo script e fa la richiesta.
se invece faccio doppio click sullo script lo esegue normalmente e funziona, ovvero chiude la finestra.
sapresti indicarmi dove fargli puntare quando mi chiede come aprire il file?
se guardo le associazioni dei file per estensione la situazione mi sembra corretta, ovvero i file .vbs sono associati a Microsoft windows Based scrip Host ed infatti col doppio click funziona. non capisco cosa gli cambi se invece viene eseguito tramite l'utilità di pianificazione.....

x_Master_x
16-01-2023, 20:25
Per i VBS come operazione pianificata, devi usare come eseguibile cscript e come argomento il percorso completo del file VBS

P.S. Nel titolo della finestra vedo anche la versione, la devi aggiungere nella stringa.

Zeratul
17-01-2023, 09:27
Per i VBS come operazione pianificata, devi usare come eseguibile cscript e come argomento il percorso completo del file VBS

P.S. Nel titolo della finestra vedo anche la versione, la devi aggiungere nella stringa.


grazie, ci siamo quasi.
ci sono le due arrività nella pianificazione windows, quella che lancia al login utente e quella che esegue lo script sempre in login utente.
se le eseguo da utilità di pianificazione funzionano entrambe.
ma facendo logout/login oppure riavvia windows la cosa non funziona, perchè prima esegue quella con lo script di chiusura e poi quella che lancia il programma, e quindi mi trovo la finestra aperta.

c'è un modo per mettere la sequenza corretta, ovvero prima l'attività che apre e poi quella che esegue lo script di chiusura?

ho provato anche la seconda strada, ovvero quella di fare gestire tutto al vbs. lancio lo script dalla pianificazione ma non avvia il software (ma il percorso è giusto....)

Unax
17-01-2023, 10:49
questo software ipway è scaricabile da qualche parte?

Zeratul
17-01-2023, 10:58
questo software ipway è scaricabile da qualche parte?

certo
è il software ufficiale di una nota marca di videocitofoni ip.
https://www.farfisa.com/ip-farfisa-ip-way.html#

Unax
18-01-2023, 17:31
allora ho provato lo script di X_master modificato così

Set oShell = CreateObject("WScript.Shell")
oShell.Run("D:\ipWay\ipway.exe")
WScript.Sleep 1000
If oShell.AppActivate("IpWay 1.2.1") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If

funziona se Ipway è installato in un percorso senza spazi, puoi anche ridurre un po' i tempi di sleep in 500 e 250 credo

come lo mandi in esecuzione automatica lo script nin so

forse questo ti può essere utile

https://turbolab.it/windows-10/eseguire-file-.vbs-tramite-operazioni-pianificate-errore-0x41301-oppure-finestra-apri-588

Zeratul
18-01-2023, 17:48
allora ho provato lo script di X_master modificato così



funziona se Ipway è installato in un percorso senza spazi, puoi anche ridurre un po' i tempi di sleep in 500 e 250 credo

come lo mandi in esecuzione automatica lo script nin so

forse questo ti può essere utile

https://turbolab.it/windows-10/eseguire-file-.vbs-tramite-operazioni-pianificate-errore-0x41301-oppure-finestra-apri-588

Ah ecco perché non mi andava....era questione di spazi nel percorso c programmi x86......
A sto punto però potrei lasciare li dove sta e creare un collegamento in c e fare lanciare dallo script il collegamento.....
Domani provo e vi aggiorno.....

Unax
18-01-2023, 18:27
Ah ecco perché non mi andava....era questione di spazi nel percorso c programmi x86......
A sto punto però potrei lasciare li dove sta e creare un collegamento in c e fare lanciare dallo script il collegamento.....
Domani provo e vi aggiorno.....

sì dovrebbe funzionare a patto che il percorso del collegamento nello script sia corretto tipo C:\ipWay.exe.lnk

meglio non ridurre i tempi di sleep, se la finestra non appare in tempo credo che il comando activate che rende attiva la finestra poi non funziona correttamente e il ALT F4 non va a buon fine

Zeratul
19-01-2023, 08:37
ok è andata, grazie mille a tutti, ce l'avete fatta.
Unax, manca le " e ) sulla seconda riga per questo non mi andava.....

Unax
19-01-2023, 08:47
niente, non funziona, ne lasciando l'installazione in origine e fare puntare al .lnk ne installando la cartella in c. se eseguo col doppio click l'exe nella cartella parte regolarmente.
il vbs viene eseguito nell'utilità di pianificazione con cscript.
il vbs è in c.
in c c'è la cartella ipWay con dentro ipWay.exe.

e questo è il tuo script, che a te va e a me no.
PS: quando dici che va, lo esegui col doppio click e basta o dall'utilità di pianificazione?

Set oShell = CreateObject("WScript.Shell")
oShell.Run("C:\ipWay\ipWay.exe
WScript.Sleep 1000
If oShell.AppActivate("IpWay 1.2.1") Then
WScript.Sleep 500
oShell.SendKeys "%{F4}"
End If

mi funziona solo per farlo chiudere ma non ne vuole sapere di lanciare il programma

correggi il vbs, strano che non ti dia errore
oShell.Run("C:\ipWay\ipWay.exe")

Zeratul
19-01-2023, 09:03
correggi il vbs, strano che non ti dia errore
oShell.Run("C:\ipWay\ipWay.exe")

si si certo, se no non funziona.

PS: funziona anche sul percorso c programmi.....
l'errore nello script iniziale, che poi tu hai corretto nel tuo, è che c'è lo spazio su
oShell .Run

x_Master_x
19-01-2023, 20:28
Purtroppo questo forum anteguerra ha tecnologie anteguerra, mettendo spazi a caso nel codice... :doh:

Comunque, per la cronaca, se in un comando scrivo:
oShell.Run("""C:\Percorso\eseguibile.exe""")

Con tre virgolette all'inizio e alla fine del path, c'è un motivo. E il motivo sono gli spazi nel percorso. Con una virgoletta all'inizio e alla fine funziona solo se nel percorso non ci sono spazi, cosa che avete ampiamente notato da soli.

Visto l'impegno, questo VBS fa quello che chiedi e in modo quasi istantaneo

Dim oShell
Dim i

i = 0

Set oShell = CreateObject("WScript.Shell")
oShell.Run("""C:\Program Files (x86)\ipWay\ipWay.exe""")

Do
isActive = oShell.AppActivate("IpWay 1.2.1")
If isActive Then
oShell.SendKeys "%{F4}"
i = 1
End If
WScript.Sleep 100
Loop Until i = 1

Set oShell = Nothing

Unax
20-01-2023, 10:27
@x_Master_x una curiosità, non che mi serva veramente

ho provato il tuo script con un altro software DNS JUMPER (https://www.sordum.org/7952/dns-jumper-v2-2/), ovviamente cambiando i percorsi in:

"""D:\TOOL-TRICK\DNS JUMPER\DnsJumper.exe"""

e il titolo della finestra

"DNS Jumper v2.2"

il software si avvia ma il ALT +F4 che dovrebbe chiudere il software nella tray non sortisce effetto

dipende dal fatto che DNS Jumper si avvia chiedendo i privilegi di amministratore?

x_Master_x
20-01-2023, 12:20
dipende dal fatto che DNS Jumper si avvia chiedendo i privilegi di amministratore?

Esatto. Prova così:

Dim oShell
Dim i

i = 0

If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If

Set oShell = CreateObject("WScript.Shell")
oShell.Run("""C:\Percorso\DnsJumper\DnsJumper.exe""")

Do
isActive = oShell.AppActivate("DNS Jumper v2.2")
If isActive Then
oShell.SendKeys "%{F4}"
i = 1
End If
WScript.Sleep 100
Loop Until i = 1

Set oShell = Nothing

Unax
20-01-2023, 13:30
esatto col nuovo script DNS JUMPER si avvia e si chiude in un attimo :D

Zeratul
20-01-2023, 15:34
confermo anche io, l'ultima versione è davvero perfetta.

e visto che ci siamo ti do un'altra sfida, cosi mi fai una fattura unica:D :D
avrei bisogno che un giorno X del mese, sempre lo stesso giorno del mese, mettiamo il 25 di ogni mese, "il pc" (ovvero un tuo script, se possibile ovviamente:D :D ) copiasse 1 dato file locato in un dato percorso in un altro pecorso, del tipo copia da C:\programi\xxxx in cartella C:\backups\yyyyyy

è possibile secondo te? o mi muovo con un software di backup?

x_Master_x
20-01-2023, 21:34
if day(now) = 25 Then
Dim fso, FiletoCopy, DestinationFolder

FiletoCopy = "C:\Percorso\File.ext"
DestinationFolder = "C:\Cartella\Destinazione"

Set fso = CreateObject("Scripting.FileSystemObject")
If Right(DestinationFolder, 1) <> "\" Then
DestinationFolder = DestinationFolder & "\"
End If
fso.CopyFile FiletoCopy, DestinationFolder, True

Set fso = Nothing
End If


È possibile usare le wildcard se i file sono più di uno o deve fare un match con un nome specifico o un'estensione specifica:
FiletoCopy = "C:\Percorso\*.ext"

P.S. CopyFile method. Boolean value that indicates if existing files are to be overwritten. If True, files are overwritten; if False, they are not.
P.P.S. Con Pianifica Attività puoi scegliere il giorno di esecuzione del mese in cui vuoi far partire lo script, quindi in linea di massima il controllo sulla data non è necessario se lo script parte il 25 direttamente.

Zeratul
23-01-2023, 09:11
if day(now) = 25 Then
Dim fso, FiletoCopy, DestinationFolder

FiletoCopy = "C:\Percorso\File.ext"
DestinationFolder = "C:\Cartella\Destinazione"

Set fso = CreateObject("Scripting.FileSystemObject")
If Right(DestinationFolder, 1) <> "\" Then
DestinationFolder = DestinationFolder & "\"
End If
fso.CopyFile FiletoCopy, DestinationFolder, True

Set fso = Nothing
End If


È possibile usare le wildcard se i file sono più di uno o deve fare un match con un nome specifico o un'estensione specifica:
FiletoCopy = "C:\Percorso\*.ext"

P.S. CopyFile method. Boolean value that indicates if existing files are to be overwritten. If True, files are overwritten; if False, they are not.
P.P.S. Con Pianifica Attività puoi scegliere il giorno di esecuzione del mese in cui vuoi far partire lo script, quindi in linea di massima il controllo sulla data non è necessario se lo script parte il 25 direttamente.

grazie, ma ho notato un problema che non ti avevo detto prima e non può funzionare l'automatismo. in pratica il file da copiare cambia nome ogni mese (è un elenco di accessi sul file txt). in pratica il file si chiama 0123 poi 0223, ecc.....quindi ovviamente il mese dopo lo script non troverebbe il file che cerca.
in alternativa si risce a fare la stessa cosa ma con la cartella che contiene questo file? questa sono sicuro che non cambia nome.....

Unax
23-01-2023, 11:59
"C:\Percorso\*.txt"

l'asterisco vale per qualsiasi nome se c'è solo quel file nella cartella copia quello

se ci sono più file con estensione txt li copia tutti e 2

Zeratul
23-01-2023, 14:25
"C:\Percorso\*.txt"

l'asterisco vale per qualsiasi nome se c'è solo quel file nella cartella copia quello

se ci sono più file con estensione txt li copia tutti e 2

ottimo, funziona perfettamente, sia lasciando l'ozione della data, sia togliendola IF iniziale/end IF finale, in caso si usi la programmazione di windows per lanciare lo script solo in un dato giorno. grazie mille