|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
programmino per lanciare un certo file ogni tot tempo
ciao.
ho studiato un minimo di c al primo anno di università ma ora mi ricordo pochissimo... avrei bisogno un programma in c che dopo averlo eseguito mi esegue un file che si trova ad esempio in C/programmi/....e dopo 10 minuti lo riavvia una seconda volta, e cosi via fin che non viene chiuso. Io pensavo di usare un ciclo for e i comandi system e sleep, ho provato a mettermi li con devC++ ma mi son accorto che non mi ricordo piu' nulla....qualcuno puo' aiutarmi a scriverlo? |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
ragazzi dai qualcuno che me lo metta giù, voi ci mettereste 2 secondi...
ah per windows.. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Posta il codice che hai realizzato fin ora.
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
#include <stdio.h>
#include <windows.h> int main () { int tot=0; int n; for (n = 1; n <= 3; n++){ ShellExecute(NULL, "open","C:\Program Files (x86)\...\MElcld.exe", NULL, NULL, SW_SHOWNORMAL); //mi dovrebbe aprire 3 volte il file MElcld.exe //il problema è che questo file, se lo avvio normalmente, lo avvio con un collegamento sul desktop che //ha come destinazione: "C:\Program Files (x86)\...\MEls32.exe" -x //questo -x mi frega perchè non so come inserirlo nella funzione ShellExecute Sleep(5000); tot+=n; } return 0; } |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2014
Messaggi: 1378
|
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Qui trovi la risposta al tuo quesito. In particolare se hai Codice:
HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd ); Quote:
|
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
grazie! quindi facendo cosi dovrebbe funzionare: ShellExecute(NULL, "open","C:\Program Files (x86)\...\MElcld.exe", "-x", NULL, SW_SHOWNORMAL);
Però c'è un problema... int main () { int tot=0; int n; for (n = 1; n <= 10; n++){ ShellExecute(NULL, "open","C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe", NULL, NULL, SW_SHOWNORMAL); Sleep(5000); tot+=n; } return 0; } per esempio cosi mi dovrebbe aprire acrobat reader 3 volte. Ma niente non funziona. Però è strano, perchè sul pc dove ho installato windows 8 funziona, su quello dove devo usare il programma e ho installato w7, non va. Potrebbe essere colpa dell'antivirus (AVAST) ma anche se lo disattivo non funziona. Un altra cosa che ho notato invece è che questo funziona anche su w7: int main () { int tot=0; int n; for (n = 1; n <= 10; n++){ ShellExecute(NULL, "open","notepad", NULL, NULL, SW_SHOWNORMAL); Sleep(5000); tot+=n; } return 0; } Mi apre il notepad a ogni ciclo. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
L'operazione "open" serve per aprire un file con il programma predefinito, non per aprire il programma.
In generale ShellExecute serve per eseguire un'operazione predefinita su un file (ancora una volta, non per aprire un programma). Per eseguire un comando generico devi utilizzare la funzione CreateProcess. |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
int main () {
int tot=0; int n; for (n = 1; n <= 10; n++){ CreateProcess ("C:\\Program Files (x86)\\...\\MEls32.exe", "-k",NULL,NULL,FALSE, CREATE_NO_WINDOW, NULL,NULL, &sInfo, &pInfo ); Sleep(5000); tot+=n; } return 0; } mi da questo errore: [Error] 'sInfo' was not declared in this scope [Error] 'pInfo' was not declared in this scope |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Il messaggio di errore è chiarissimo, non hai dichiarato sInfo e pInfo.
Guarda questo esempio: http://daycounter.com/LabBook/Window...eProcess.phtml |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
Ok ora li ho dichiarati con
PROCESS_INFORMATION pi; STARTUPINFO si; e si compila correttamente. Però quando eseguo mi esce una finestra di errore che mi dice ( impossibile avviare correttamente il l'applicazione. Fare click su ok per chiudere l'applicazione. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Devi anche inizializzarli come nell'esempio che ti ho indicato.
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
Ok adesso funziona,ma il problema è che sembra che non viene lanciato con il "-x"
E' corretto compilare la funzione in sto modo? CreateProcess ("C:\\Program Files (x86)\\...\\MEls32.exe","-x",NULL,NULL,FALSE, 0, NULL,NULL, &si, &pi ) |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Tecnicamente è corretto, tuttavia devi tenere in considerazione questa nota:
Quote:
CreateProcess( "C:\\Program Files (x86)\\...\\MEls32.exe", "\"C:\\Program Files (x86)\\...\\MEls32.exe\" -x", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi ) |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
Mi da un errore alla riga dove chiudo la parentesi della funzione...
[Warning] deprecated conversion from string constant to 'LPSTR {aka char*}' [-Wwrite-strings] [Error] ld returned 1 exit status |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Quote:
|
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
non saprei come fare, ma questa è corretta cosi come la hai scritta tu?
CreateProcess( "C:\\Program Files (x86)\\...\\MEls32.exe", "\"C:\\Program Files (x86)\\...\\MEls32.exe\" -x", NULL,NULL,FALSE,0,NULL,NULL,&si,&pi ) |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
No, è corretta come valori dei parametri, però come ti ho detto nel precedente post il secondo parametro deve essere una variabile.
Puoi fare una cosa del genere: Codice:
char buffer[512]; strcpy(buffer, "\"C:\\Program Files (x86)\\...\\MEls32.exe\" -x"); CreateProcess( "C:\\Program Files (x86)\\...\\MEls32.exe", buffer, NULL,NULL,FALSE,0,NULL,NULL,&si,&pi ); |
|
|
|
|
|
#18 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
si si avevo capito ma non sapevo come potevo dichiarare la variabile.
Comunque non si compila. [Error] ld returned 1 exit status |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Usi un ide o compili da riga di comando? Che comandi usi per compilare/linkare? Versione del compilatore?
|
|
|
|
|
|
#20 |
|
Member
Iscritto dal: Dec 2008
Messaggi: 73
|
non so come ma ora funziona e forse correttamente, ora dovrei riuscir ad andar avanti da solo.
Ti ringrazio Daniels118. Sei stato veramente gentile... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:22.


















