PDA

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

Khronos
19-03-2013, 14:02
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