View Full Version : File batch aprire programma ridotto a icona
luciopro
19-03-2013, 11:45
Salve ragazzi,
vi chiedo un aiuto prezioso.
allora devo aprire un programma per visualizzare delle telecamere tramite un file Telecamera.bat.
Se il programma non è in esecuzione deve lanciarmi l'eseguibile.
Se invece è ridotto a icona mi deve richiamare la stessa istanza e portarmela in primo piano.
Allora per il primo punto ci sono riuscito: non riesco a richiamarlo se ridutto a icona.
Vi posto il codice che ho scritto:
@echo off
tasklist|find /i /c "UMS_Client.exe" > nul
set INSTANCE=%errorlevel%
if "%INSTANCE%"=="0" goto already
"C:\Programmi\DVR\UMS Client\UMS_Client.exe" %1
exit
:: «%1» is the name and path of the file you want to run.
goto end
:already
!!!! in questo punto ho il problema: non riesco a mandarlo in primo piano
pause>nul
:end
set INSTANCE=
exit
Grazie a tutti per l'aiuto
ciao
PS: spero di non avere sbagliato sezione.....nel caso chiedo scusa in anticipo.
Blue_screen_of_death
19-03-2013, 12:43
Salve ragazzi,
vi chiedo un aiuto prezioso.
allora devo aprire un programma per visualizzare delle telecamere tramite un file Telecamera.bat.
Se il programma non è in esecuzione deve lanciarmi l'eseguibile.
Se invece è ridotto a icona mi deve richiamare la stessa istanza e portarmela in primo piano.
Allora per il primo punto ci sono riuscito: non riesco a richiamarlo se ridutto a icona.
Vi posto il codice che ho scritto:
@echo off
tasklist|find /i /c "UMS_Client.exe" > nul
set INSTANCE=%errorlevel%
if "%INSTANCE%"=="0" goto already
"C:\Programmi\DVR\UMS Client\UMS_Client.exe" %1
exit
:: «%1» is the name and path of the file you want to run.
goto end
:already
!!!! in questo punto ho il problema: non riesco a mandarlo in primo piano
pause>nul
:end
set INSTANCE=
exit
Grazie a tutti per l'aiuto
ciao
PS: spero di non avere sbagliato sezione.....nel caso chiedo scusa in anticipo.
Che programma è?
Se lo apri mentre è già aperta un'istanza che succcede? Non succede nulla o viene aperta un'altra istanza?
luciopro
19-03-2013, 13:56
ciao Blue,
è il programma per collegarsi con in video del TVCC.
Se clicco sopra una seconda volta mi apre un'altra istanza.
Il problema è che non ha il login automatico, quindi l'utente dovrebbe inserire nuovamente ID e password.
Grazie
ma perchè devi richiamarlo se ridotto a icona? non basta far click sull'icona in barra da ridotto? o hai dovuto eliminare la shell di explorer e quindi non hai la barra applicazioni?
luciopro
19-03-2013, 14:20
ciao Kronos,
esatto non ho la barra delle applicazioni e non posso cliccare sulla icona...
grazie
x_Master_x
19-03-2013, 15:15
Non mi risulta che sia possibile con i batch di modificare lo stato di una finestra.
Con i vbs puoi inviare alla finestra una combinazione di tasti per ingrandire-minimizzare etc. ( soluzione che fà ribrezzo ), ma non è questo il caso perché la finestra non è attiva ma ridotta.
L'unica soluzione semplice con i bat/vbs è verificare che il software è attivo nei processi ( anche se minimizzato è presente nella lista ), terminarlo dal task e riaprirlo.
Altrimenti impara un qualsiasi linguaggio di programmazione che ti permette di agire sullo stato delle finestre
luciopro
19-03-2013, 16:34
ciao Master,
il problema è che se lo chiudo e lo riapro mi richiede il login...cosa che vorrei evitare....
Hai da consigliarmi magari un esempio di qualche linguaggio che puo fare la caso mio???
Grazie
x_Master_x
19-03-2013, 19:44
Tutti sfruttano, chi più chi meno le API di Windows, uno vale l'altro
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633544(v=vs.85).aspx
luciopro
27-03-2013, 08:43
Cè un'anima buona che mi da un link per l'utilizzo di tale libreria in c# o simili.
Ho installato visual studio express.... :mc: :mc:
Grazie a tutti :) :)
luciopro
27-03-2013, 09:10
va bene anche in c++, anzi meglio il c un po lo conosco
grazie
x_Master_x
27-03-2013, 18:11
Non è la sede adatta...questo forse ti può aiutare, è in C++:
#include <windows.h> //HWND,FindWindow,ShowWindow
#include <dos.h> //Sleep
using namespace std;
int start()
{
HWND hWnd; //dichiarare variabile
system("notepad"); //Avvia notepad
sleep(1); //Aspetta 1 secondo
hWnd = FindWindow(NULL,"notepad"); //Cerca la finestra the notepad
ShowWindow(hWnd, SW_MAXIMIZED); //Attiva la finestra di notepad è la mostra ingrandita
}
E' uno script veramente di base, senza If..EndIf o SetError
luciopro
28-03-2013, 17:12
grazie mille x_master.
Inizio a giocarci un po...
aal prossima
Blue_screen_of_death
28-03-2013, 19:31
Non è la sede adatta...questo forse ti può aiutare, è in C++:
#include <windows.h> //HWND,FindWindow,ShowWindow
#include <dos.h> //Sleep
using namespace std;
int start()
{
HWND hWnd; //dichiarare variabile
system("notepad"); //Avvia notepad
sleep(1); //Aspetta 1 secondo
hWnd = FindWindow(NULL,"notepad"); //Cerca la finestra the notepad
ShowWindow(hWnd, SW_MAXIMIZED); //Attiva la finestra di notepad è la mostra ingrandita
}
E' uno script veramente di base, senza If..EndIf o SetError
Ne approfitto per chiedere una cosa: con questo procedimento viene cercata la finestra che si chiama notepad e ingrandita (se esiste).
Ma se voglio cercare una finestra per processo? cioè voglio vedere la finestra che corrisponde al processo notepad.exe e ingrandirla?
x_Master_x
28-03-2013, 22:52
Ne approfitto per chiedere una cosa: con questo procedimento viene cercata la finestra che si chiama notepad e ingrandita (se esiste).
Ma se voglio cercare una finestra per processo? cioè voglio vedere la finestra che corrisponde al processo notepad.exe e ingrandirla?
É la stessa cosa.
In genere se esiste il processo esiste una finestra ( a meno che il programma non abbia una GUI, ma in tal caso non c'é nulla da cercare ) quindi che sia nascosta, minimizzata o qualsiasi stato abbia verrà sempre trovata.
Il codice sarà tipo:
Se il processo(nome processo.exe) esiste quindi
--Se la finestra(i parametri sono es. classe-nome/titolo finestra oppure testo ) esiste quindi
--Ingrandisci finestra ( sarebbe meglio controllare lo stato, se non é ingrandita -- ingrandisci )
--FineSe
FineSe
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.