Oppure

Loading
17/12/06 21:30
redlion
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:
at (l'orario attuale + 1 minuto) /interactive "notepad.exe"


Avevo iniziato di usare questo codice per risalire all'orario (includendo il time.h):
time_t orario;
  tm *ptr;
  ptr = localtime(&orario);
  time(&orario);
  ctime(&orario);
   
  int ora = ptr->tm_hour;
  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...

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 17/12/06 21:37
aaa
18/12/06 1:28
pierotofy
#include <string>

// ...

string cmd = "at" + ora + ":" + min + " /interactive \"notepad.exe\"";
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).
Il mio blog: piero.dev
18/12/06 14:11
redlion
Ho provato ad usare una stringa come hai scritto tu, ma mi restituisce questo errore:
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.
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
at 00:00 /interactive "comando"


aaa
18/12/06 15:06
pierotofy
Prova con:

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

Il mio blog: piero.dev
19/12/06 15:02
redlion
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:
char cmd[] = "at 15:51 /interactive \"notepad.exe\"";
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:
char hour[2], minu[2];
  itoa(ora, hour, 10);
  itoa(min, minu, 10);
  string a = "at ";
  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-|
aaa