Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ShellExecute e time
Forum - C/C++ - ShellExecute e time

Avatar
redlion (Normal User)
Newbie


Messaggi: 10
Iscritto: 11/09/2006

Segnala al moderatore
Postato alle 22:30
Domenica, 17/12/2006
Sera a tutti,
mi spiace di venir qui solo a parlare dei miei problemi, vorrei essere di maggior aiuto... ma il tempo è quello che è 8-|

Dunque, nel programma che sto scrivendo, dovrei far eseguire il comando:
Codice sorgente - presumibilmente C/C++

  1. at (l'orario attuale + 1 minuto) /interactive "notepad.exe"



Avevo iniziato di usare questo codice per risalire all'orario (includendo il time.h):
Codice sorgente - presumibilmente C/C++

  1. time_t orario;
  2.   tm *ptr;
  3.   ptr = localtime(&orario);
  4.   time(&orario);
  5.   ctime(&orario);
  6.    
  7.   int ora = ptr->tm_hour;
  8.   int min = ptr->tm_min +1;


Ancora non conosco molto bene le funzioni di time.h, ma se elimino una delle due (time() o ctime()) il risultato è 14:7, quindi penso che questo pezzo vada abbastanza bene.
Per quanto riguarda il come importare l'ora esatta  ok.

Per i comandi sul DOS, ho sempre utilizzato una semplice ShellExecute() ma in questo caso, dovendo inserire nel comando anke dei valori int... non riesco a trovare un "giusto modo" per farlo...

Codice sorgente - presumibilmente C/C++

  1. ShellExecute(0, "open", "at" + ora + ":" + min + " /interactive \"notepad.exe\"", NULL, 0, SW_SHOW);



L'idea sarebbe questa. Purtroppo non è possibile realizzarla in questo modo...

Che potrei fare?
Grazie :D

Ultima modifica effettuata da redlion il 17/12/2006 alle 22:37


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:28
Lunedì, 18/12/2006
Codice sorgente - presumibilmente C/C++

  1. #include <string>
  2.  
  3. // ...
  4.  
  5. string cmd = "at" + ora + ":" + min + " /interactive \"notepad.exe\"";
  6. ShellExecute(0, "open", cmd.c_str(), NULL, 0, SW_SHOW);



Per contatenare la stringa questo codice funziona, il problema è che non ti funzionerà la chiamata a ShellExecute (non ti riesco a dire come risolvere perchè non riesco esattamente a capire cosa vuoi fare) perchè gli argomenti sono da passare al 4° parametro, anzichè assieme al 3° (dove va semplicemente specificato il percorso dell'applicazione da eseguire).


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
redlion (Normal User)
Newbie


Messaggi: 10
Iscritto: 11/09/2006

Segnala al moderatore
Postato alle 15:11
Lunedì, 18/12/2006
Ho provato ad usare una stringa come hai scritto tu, ma mi restituisce questo errore:
Codice sorgente - presumibilmente C/C++

  1. invalid operands of types `const char*' and `const char[2]' to binary `operator+'


Non capisco esattamente dove sia l'errore. Casomai posto tutto il codice.
Testo quotato

Postato originariamente da pierotofy:
non riesco esattamente a capire cosa vuoi fare


In poche parole quello che sto tentando di fare è un adattamento in C++ di un programma in VB. Non ho molti problemi con la traduzione, tranne che per questo punto.
Il mio programma dovrebbe inserire una voce nella pianificazione programmi in windows. Che poi sarebbe esattamente come digitare da prompt di DOS il comando
Codice sorgente - presumibilmente C/C++

  1. at 00:00 /interactive "comando"





"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:06
Lunedì, 18/12/2006
Prova con:

Codice sorgente - presumibilmente C/C++

  1. string cmd = "at" + (char *)ora + ":" + (char *)min + " /interactive \"notepad.exe\"";




Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
redlion (Normal User)
Newbie


Messaggi: 10
Iscritto: 11/09/2006

Segnala al moderatore
Postato alle 16:02
Martedì, 19/12/2006
Avevo già provato il casting per avere una stringa concatenata con const char, ma non ha funzionato...

Grazie ad un amico, sono riuscito ad ovviare al problema del comando.
Questo codice funziona benissimo:
Codice sorgente - presumibilmente C/C++

  1. char cmd[] = "at 15:51 /interactive \"notepad.exe\"";
  2. system(cmd);


Il risultato è esattamente quello che volevo: l'aggiunta di una voce nella pianificazione programmi di windows.

Ora, bisogna solo riuscire a concatenare una stringa o un array da passare al comando system, visto che ore e minuti vanno rimediati con i passaggi alle funzioni di time.
Questa è una prima prova:
Codice sorgente - presumibilmente C/C++

  1. char hour[2], minu[2];
  2.   itoa(ora, hour, 10);
  3.   itoa(min, minu, 10);
  4.   string a = "at ";
  5.   string finale = a + hour + ":" + minu + " /interactive \"notepad.exe\"";


Ho letto che la prima stringa in una concatenazione deve essere di tipo string, mentre il resto va bene anke char.
Sembrava andare tutto bene. L'ora la prende tranquillamente. Il problema sono i minuti.
Se stampo a video, il risultato è:
at 16:0 /interactive "notepad.exe"

... perchè? 8-|


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote