|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1929
|
[C++] ShellExecute
ciao a tutti,
devo realizzare un codice che sia in grado di lanciare e terminare un programma non scritto da me (dovrà girare per 5 minuti, ma questo è un problema successivo). ho letto in giro, e mi sembra d'aver capito, che sia possibile lanciare un applicazione usando ShellExecute. mi sto allenando con degli esempi trovati in rete ma non riesco assolutamente a compilare nulla di quanto ho trovato (uso dev c++). non sono un programmatore esperto, ho mosso i miei primi passi con c++ solo 2 mesi fa, quindi non abbiate paura di essere banali nelle vostre spiegazioni. sto provando il seguente esempio (aprire una pagina web) ma non c'è verso di compilare. dove sbaglio? Codice:
#include <iostream>
#include <windows.h>
#include <shellapi.h>
using namespace std;
int main ()
{
ShellExecute ( Handle,"open","http://www.google.com",NULL,NULL,SW_NORMAL);
return 0;
}
__________________
♫ Now that you've found it, it's gone. Now that you feel it, you don't. You've gone off the rails. ♫ |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
E l'errore è?
Handle da quanto vedo non è definito... |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3739
|
anzichè handle puoi mettere 0
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1929
|
vi amo!!!
è brutto doversi mettere a fare qualcosa senza avere documentazione e le basi adeguate, cmq sono contento di imparare nuove cose. ok, ho sostituito l'apertura della pagina web con il percorso di un programma scritto da terze parti. supponiamo che il programma, una volta lanciato, giri indefinitamente per sempre. come lo termino? (anche brutalmente) ecco l'idea che sto usando per far girare ciao.exe per un tempo definito dall'utente, ma mi manca il comando per terminare il programma. (ho trovato questa discussione ma non riesco a capire come si usa system()) Codice:
#include <stdio.h>
#include <time.h>
#include <iostream>
//#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>
using namespace std;
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
int main ()
{
int n,i;
cout<<"How long do you want to run Ciao.exe? (seconds)"<<endl;
cin>>n;
ShellExecute ( 0,"open","c:\\ciao.exe",NULL,NULL,SW_NORMAL);
printf ("Starting countdown...\n");
for (i=n; i>0; i--)
{
printf ("%d\n",i);
wait (1);
}
printf ("Exit\n");
//dovrei inserire qui il comando per terminare ciao.exe
return 0;
}
__________________
♫ Now that you've found it, it's gone. Now that you feel it, you don't. You've gone off the rails. ♫ Ultima modifica di deggungombo : 11-07-2007 alle 10:01. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ecco un esempio:
Codice:
#include <windows.h>
#include <stdio.h>
int main (void)
{
SHELLEXECUTEINFO shexi;
int iSeconds = 30;
DWORD dwRet;
ZeroMemory (&shexi, sizeof (shexi));
shexi.cbSize = sizeof (shexi);
shexi.fMask = SEE_MASK_NOCLOSEPROCESS;
shexi.lpVerb = "open";
shexi.lpFile = "C:\\pippo.exe";
shexi.nShow = SW_NORMAL;
if (ShellExecuteEx (&shexi))
{
do {
printf ("Attesa %d secondi\n", iSeconds);
dwRet = WaitForSingleObject (shexi.hProcess, 1000); // Timeout 1 secondo
if (dwRet == WAIT_TIMEOUT)
iSeconds--;
} while (dwRet != WAIT_OBJECT_0 && iSeconds > 0);
if (dwRet == WAIT_TIMEOUT)
TerminateProcess (shexi.hProcess, 0);
printf ("Terminato");
CloseHandle (shexi.hProcess);
}
return 0;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2003
Messaggi: 1929
|
grazie mille, anche se ancora non l'ho capito benissmo funziona alla perfezione
era proprio quello che cercavo. giusto per sfizio sapete se esiste un comando per terminare il processo che possa aggiungere al codice che ho scritto nel mio post precedente? grazie
__________________
♫ Now that you've found it, it's gone. Now that you feel it, you don't. You've gone off the rails. ♫ Ultima modifica di deggungombo : 12-07-2007 alle 03:22. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:54.



















