|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Mancato focus su sw eseguito all'avvio
Buongiorno a tutti,
ho un serio problema sull'avvio automatico di un browser web. Vi spiego il mio problema. Ho la necessità di avviare un browser (possibilmente chrome o al massimo firefox) automaticamente all'avvio di windows, a schermo intero e soprattutto che quest'ultimo sia la finestra attiva all'interno di esplora risorse. Ho provato di tutto, su vari computer con windows 8 ma all'avvio, in maniera apparentemente random (a volte lo fa a volte no), il browser si avvia ma non risulta la finestra attiva di windows. Essendo a schermo intero l'unico modo che ho di accorgermene è utilizzare una periferica di input per verificare se questa scrive nella casella di testo impostata nella pagina iniziale del browser Mi spiego meglio. Immaginate di avere impostato www.google.it come pagina iniziale. Se avviate il browser automaticamente all'avvio a tutto schermo, senza intervenire in alcun modo, dovreste ritrovarvi sulla schermata di google con il cursore lampeggiante posizionato sulla barra di ricerca (autofocus). Bene a me si avvia tutto correttamente ma il browser non risulta essere la finestra attiva... Ho provato molte soluzioni ma il problema persiste. Provato chrome in modalità metro, in modalità normale, in modalità kiosk (e varie altri comandi da suffisso), cambiando browser non cambia nulla, provato ad avviare in esecuzione automatica, creando un task all'accesso, un task posticipato (pensavo potesse essere qualcosa del tipo "si avvia prima chrome e poi qualcos'altro che mi sposta il focus" ma niente), provato con un sw terze parti per l'avvio automatico. Niente, non riesco a venirne a capo, anche perchè la cosa più fastidiosa è che a volte si avvia "onfocus" a volte no.... Cosa potrebbe essere, o come potrei aggirare il problema considerando che deve essere tutto automatizzato, ogni giorno i pc si accendono automaticamente da bios (timer o in emergenza wol) e si spengono con un task? Grazie 1000 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Utilizza un VBS ( o altro linguaggio a tua scelta ) che esegua il browser e allo stesso tempo attivi quella finestra. Per quanto riguarda i VBS devi cercare:
Codice:
WshShell ( WScript.CreateObject("WScript.Shell") )
WshShell.Run
WshShell.AppActivate
Codice:
1 Activate and display the window (restore size and position) 3 Activate & maximize etc.
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Quote:
Ho preferito usare wshshell.Run "%comspec% /c start c:\chrome.lnk" inserendo nel link il suffisso --start-fullscreen altrimenti non riesco a farlo partire a tutto schermo ma solo massimizzato. Se non ho capito male devo utilizzare WshShell.AppActivate con l'argomento "chrome", corretto? in definitiva il mio script è così: set wshShell = CreateObject("WScript.Shell") wshshell.Run "%comspec% /c start c:\chrome.lnk" wshshell.appactivate("chrome") mi chiedevo, esiste mica un modo per mantenere lo script attivo e controllare se perde il focus e nel caso ridarglielo? Ultima modifica di Drin-Drina : 20-04-2015 alle 15:43. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Codice:
' x_Master_x
Option Explicit
Dim WshShell, Infinite
Infinite = 0
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """X:\Cartella\Google\Chrome\Application\chrome.exe"" --kiosk https://www.google.it/", 1, False
WshShell.AppActivate("Google Chrome")
Do While Infinite = 0
WshShell.AppActivate("Google Chrome")
WScript.Sleep(100)
Loop
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 20-04-2015 alle 20:13. |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Quote:
Ci stiamo avvicinando... Premesso che pare funzionare per il mio scopo se lanciato all'avvio, l'unico dubbio è che mi aspettavo che lo script intervenisse anche su azioni umane, nel senso, se premo su una finestra diversa non mi fa tornare il focus sulla finestra di chrome. Però ripeto se inserito in esecuzione automatica parrebbe funzionare quindi grazie mille. Così per curiosità ho inserito un msgbox esattamente prima del loop per capire quando e se intervenisse realmente ma il msgbox mi compare solamente se chiudo chrome... Non dovrebbe comparire ogniqualvolta chrome perde il focus?Qualcosa mi sfugge... |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Riprova, ho aggiornato il codice. Il VBS è limitato senza le API...
P.S. Non quotare se non è necessario, soprattutto i codici.
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
RISOLTO
Limitato o no è esattamente quello che cercavo.... ma proprio esatto esatto! Non so come ringraziarti
senza contare che mi hai fatto venire voglia di rispolverare vecchi codici. |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Stavo pensando che per essere proprio al top sarebbe meglio sostituire Do While Infinite = 0 con un Do While chrome-è-aperto
Ho provato a guardare ma non sembra esserci un oggetto preposto, bisogna analizzare con Service.InstancesOf se esiste il Process.Name di chrome e agire di conseguenza (stoppare lo script). Viceversa lo script resta aperto se si chiude chrome e torna anche ad influire sul focus nel caso si riapra il browser.
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Chrome lancia un moltitudine di processi, non uno solo. A quel punto dovresti usare WMI in loop con qualcosa tipo:
Codice:
"SELECT * FROM Win32_Process WHERE Name='chrome.exe'"
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Codice:
' x_Master_x
Dim WshShell, Infinite
Infinite = 0
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" --start-fullscreen https://www.google.it/", 1, False
WshShell.AppActivate("Google Chrome")
strcomputer = "."
Set objwmiservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Do While Infinite = 0
Set colprocesslist = objwmiservice.execquery("SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'")
if colprocesslist.count >0 Then
'msgbox "bravo"
WshShell.AppActivate("Google Chrome")
WScript.Sleep(100)
else exit do
end if
'set colprocesslist.count = 0
Loop
Ottimizzazioni? Scusa se mi permetto di editarti il codice EDIT: nelle impostazioni di chrome è necessario togliere la spunta alle app in background altrimenti NON si chiudono tutti i task chrome.exe che, come hai già detto te, ne fa aprire una marea all'avvio (ma se chiudo li termina tutti se si toglie la spunta) Ultima modifica di Drin-Drina : 21-04-2015 alle 11:30. |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Codice:
Dim WshShell, Infinite
Infinite = 0
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" --start-fullscreen https://www.google.it", 1, False
WshShell.AppActivate("Google Chrome")
strcomputer = "."
Set objwmiservice = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colprocesslist = objwmiservice.execquery("SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'")
Do While colprocesslist.count >0
Set colprocesslist = objwmiservice.execquery("SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'")
'msgbox "bravo"
WshShell.AppActivate("Google Chrome")
WScript.Sleep(100)
Loop
Okok adesso sto esagerando |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Codice:
' x_Master_x
Option Explicit
Dim WshShell, objWMIService, Infinite, colItems
Infinite = 0
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "notepad.exe", 1, False
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Do While Infinite = 0
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'")
If colItems.count = 0 Then
WsCript.Echo "Quit"
WScript.Quit
End If
WScript.Sleep(100)
Loop
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Di più
Codice:
' x_Master_x
Option Explicit
Dim WshShell, objWMIService, Infinite, colItems
Infinite = 0
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"" --start-fullscreen https://www.google.it", 1, False
WShshell.AppActivate("Google Chrome")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Do While Infinite = 0
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'chrome.exe'")
If colItems.count = 0 Then
'WsCript.Echo "Quit"
WScript.Quit
End If
WshShell.AppActivate("Google Chrome")
WScript.Sleep(100)
Loop
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Che barba! ho cantato vittoria troppo presto...
Su vari computer AppActivate non funziona. Che frustrazione... sembra che provi a mettere onfocus la finestra ma resta in loop; nelle versioni di win con aero si vede lampeggiare alla frequenza del loop l'icona di chrome sulla barra delle applicazioni ma non lo mette onfocus. Ho letto in giro di vari problemi su questo dannato AppActivate ma non riesco a capire cosa non vada. Già ieri sera la tua prima versione probabilmente funzionava, solo che lo provavo su un computer "sbagliato". Quando sono arrivato a casa sul pc di casa (con stesso sysop) funzionava tutto e anche stamattina. Poi tornato in ufficio mi sono accorto che qua invece non va... Non funziona proprio l'appactivate. |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
Te l'avevo detto che i VBS sono limitati. Considerando che non voglio stare qui fino a natale...
Un eseguibile, fa tutto lui di quello che hai chiesto. L'unica cosa che devi fare tu è metterlo nella stessa directory dell'.exe di Chrome: http://www.yourfilelink.com/get.php?fid=1057696 Password:
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . Ultima modifica di x_Master_x : 22-04-2015 alle 09:48. |
||
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Ma come, io mi sbatto e tu mi porti la pappa pronta?!
Mi stavo orientando verso, autoitx e WinActivate... non vorrei abusare della tua pazienza ma non potresti rimuovermi la pagina iniziale di google.it e lasciare quella predefinita del browser? E magari passarmi il sorgente EDIT: dai che natale è vicino
Ultima modifica di Drin-Drina : 21-04-2015 alle 16:44. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 8699
|
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
Grazie ancora...
io ero arrivato a questo, ma pare non faccia il loop e non capisco perchè... Codice:
Opt("WinTitleMatchMode", 2)
#include <MsgBoxConstants.au3>
Example()
Func Example()
Run("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --start-fullscreen")
Local $hWnd = WinWaitActive("[TITLE:Google Chrome]", "", 1)
WinActivate($hWnd)
EndFunc ;==>Example
Do
If WinActive("[TITLE:Google Chrome]") Then ; Check if Notepad is currently active.
Else
WinActivate("[TITLE:Google Chrome]")
EndIf
Sleep(1000)
Until WinExists(("[TITLE:Google Chrome]")) = 1
Ultima modifica di Drin-Drina : 22-04-2015 alle 10:15. Motivo: Rimossi commenti sbagliati nel codice |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Jun 2009
Messaggi: 40
|
ahahahh ho fatto un po' di casino!
Ce l'ho fatta, grazie 1000! Il tuo exe funziona alla perfezione ma adesso anche il mio scriptino autoit!!!!! Adesso ricordo perchè mi piaceva programmare! Codice:
Opt("WinTitleMatchMode", 2)
#include <MsgBoxConstants.au3>
Example()
Local $hWnd
Func Example()
Run("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe --start-fullscreen")
Local $hWnd = WinWaitActive("[TITLE:Google Chrome]", "", 1)
WinActivate($hWnd)
While 1
If WinExists("[TITLE:Google Chrome]") = 0 Then
MsgBox($MB_SYSTEMMODAL, "Adieu", "Chrome è stato chiuso", 10)
ExitLoop
Else
WinActivate("[TITLE:Google Chrome]")
EndIf
Sleep(100)
WEnd
EndFunc
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:38.












Non dovrebbe comparire ogniqualvolta chrome perde il focus?








