Precedente :: Successivo |
Autore |
Messaggio |
er maximo Semidio
Registrato: 15/01/08 17:16 Messaggi: 268
|
Inviato: 14 Gen 2014 00:53 Oggetto: |
|
|
\" non funzionava quando ci ho provato.. dopo con l'aggiunta di doppioslash non ho pensato a ritorare sulla strada facile
winnsent è un programma che permette lo scambio di messaggi tra diversi compter collegati alla stessa rete.
XP, ha questo comando gia nel sistema stesso. Infatti basta digitare nel prompt net send nomedelpccolelgatoallarete MESSAGGIO.
Vista e successivi non hanno questa opzione.
Ricorro quindi a questo programma che "integra nel prompt" l'operazione.
Grazie a winnosent si possono inviare e ricevere i messaggi (ma deve essere aperto per ricevere).
Winnosent non si collega a nessun file, ha solo l'obbiettivo di inviare e ricevere messaggi attraverso la rete locale.
Non so perchè si collega al "shutcopy.txt", l'unicio collegamento con il file che ha è tramite il programma c++.
Come faccio funzionare winnosent
per inviare e messaggi devi digitae da prompt la seguente sintassi:
sent /u: nomedelcompuetercollegatoallarete "messaggio" (il file .bat lo scrivo volta per volta tramite il "case 7"
Ecco come va:
- come singola operazione apro il programma:
io, persona fisica, modifico un file di testo (shut.txt) che viene copiato periodicamente e rinominato "shutcopy.txt".
"shutcopy.txt" viene aperto ( shut.open("Shutcopy.txt"); ) dal programma in c++, viene letto. se non vi sono operazioni allora il file viene chiuso ( shut.close(); ).
Passa tot tempo.
Viene cancellato e sostiuito con una copia più aggiornata.
Viene aperto , questa volta abbiamo un istruzione: quella di aprire winnosent.
Il programma va nella sezione delle operazioni dedite a quell'istruzione e come prima cosa viene chiuso il file e viene ripristinato il file "shut.txt" (quello originale, fonte delle copie).
Di seguito viene aperto winnosent.
Finite le operazioni si ricomincia.. dopo tot tempo il file shutcopy viene cancellato e risostituito per verificare operazioni da fare....
- come multi operazione apro il programma e avvio un bat qualsiasi (mettiamo un bat che mi crea una certella sul desktop):
Modifico il file shut.txt, quandi la sua versione aggiorata viene copiata.
Il file "shutcopy.txt" viene aperto dal prog c++.
Prima operazione è mettere su TRUE un bool che mi avvisa che ci sono due operazioni da fare.
Segue quindi l'avvio della prima operazione, winnosent viene aperto (la differenza è che adesso (rispetto alla singola operazione ), shutcopy.txt è ancora aperto).
Essendo l'operazione succssiva da effettuare l'ultima, allora viene chiuso il shutcopy.txt, azzerato shut.txt e avviata l'ultima operazione.
ricomincia da capo (con lìhandcap di non poter modificare shutcopy perchè occupato..quindi loop)
---------------
Con un nuovo Debuging fatto, noto che quando il file è aperto (shut.open() ) e si apre anche winnsent allora "winnsent lo trova aperto e se ne impadronisce anche lui".. mentre se il file viene chiuso shut.close() prima di aprire winnsent, allora non viene visto e non viene occupato.
Adesso..dalle nuove delucidazioni dovrei modificare il programma affinchè salvi il contenuto dello shutcopy in un char[xx] e dopo chiuderlo, il file. Evito così il problema.
MA.. il dubbio resta, perchè winsent fa suo il file aperto da shut.open() se lo trova aperto.... questo è il BUG del compilatore di cui parlavo prima allora... oppure ci sono "forze" dietro che non conosco..
grazie del tempo dedicatomi e di tutti i consigli per una migliore scrittura del codice..
spero di averti dato un quadro chiaro.. diciamo che il problema è "risolto"..resta solo quella domanda sulla quale c'è dell'odio coltivato e maturato. |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11559 Residenza: Tokelau
|
Inviato: 14 Gen 2014 10:14 Oggetto: |
|
|
ok, allora direi che potresti evitare anche il file batch per lanciare il comando 'sent' e fare direttamente qualcosa del tipo
Codice: | system("start \"\" sent /u: nomedelcompuetercollegatoallarete \"messaggio\""); |
così ti togli di torno un altro bat inutile... |
|
Top |
|
|
er maximo Semidio
Registrato: 15/01/08 17:16 Messaggi: 268
|
Inviato: 15 Gen 2014 19:56 Oggetto: |
|
|
grazie tante, quando modificherò il programma ti farò sapere com'è andata!!
Grazie ancora! |
|
Top |
|
|
er maximo Semidio
Registrato: 15/01/08 17:16 Messaggi: 268
|
Inviato: 22 Gen 2014 11:42 Oggetto: |
|
|
Ho provato a fare le modifiche affinche il file restasse aperto solo il tempo necessario per passare tutto su una stringa.
Fatto ciò il programma funzionava "egregiamente" ma andando a fare piccole modifiche di qua e di la per migliorare, sono incappato in un errore che non dovrebbe esserci..
Codice: | #include <iostream> // gianluca
#include <stdlib.h>
#include <windows.h>
#include <fstream>
#include "D:\Programmi\Dev\Carminefunz.cpp"
#define azzera {shut.close(); system("Azzera_Gianluca.bat"); }
#define nove { case9=false; goto casenove;}
#define terminatore "*fine*"
#define acapo "nline"
using namespace std;
const int dimacapo=5; //dimensione operatore per traduzione da "acapo"->"\n"
const int dim=500;// grandezza random
const int dimex=500; //grandezzaa massmi carattere da copiare
int main(){
ifstream shut;
ofstream out;
int dimeffettivamex;
int indicemex=0, check=0, unita=0;
char *mex=new char[dimex];
char *numchar=new char[dimex];
bool case9=false;
system("copia.bat");
system("cls");
shut.open("Shutcopy.txt");
if(shut.fail()) exit(1);
shut.close();
do{
system("pause");
delete[] mex;
mex=new char[dimex];
indicemex=0; unita=0;
shut.open("Shutcopy.txt");
shut>>mex;
if (mex[0]=='0' || mex[0]==0){ shut.close();}
else {// inizio else, si chiude alle fine
//copio le istruzioni del file in una stringa, fino al terminatore
char *temp=new char[dim];
while(true){//inizio while
temp[0]=' '; temp[1]='\0'; //inizializza temp per dare uno spazio
strcat(mex, temp);//aggiungendolo alla stringa
shut>>temp;
strcat(mex, temp);
if (!strcmp(temp, terminatore)){
delete [] temp;
break;
}
}//fine while
dimeffettivamex=strlen(mex);
azzera //chiude il file e lo resetta
casenove:
unita=0;
{//inizio blocco
//viene cercata la prima istruzione richiesta
char *u=new char; bool *enne=new bool; *enne=1; int *conto=new int; *conto=0;
for (int i=0; *enne && mex[indicemex]!='\0' && dimeffettivamex>=indicemex ; i++){//inizio for
*u=mex[indicemex+i];
if (*u=='0'|| *u=='1'|| *u== '2' ||*u== '3'|| *u== '4'|| *u== '5'|| *u== '6'|| *u== '7'|| *u== '8'|| *u== '9') //if (*u>=0 && *u<=9)
unita++;
else
if (unita==0 && *u==' ') *conto++;
else *enne=0;
}//fine for
indicemex+=*conto;
delete enne; delete conto; delete u;
}//fine blocco
delete []numchar;
numchar=new char[unita+1];
/*---------------------------------------------------------------*/
/*----------------------- P R O B L E M A -----------------------*/
/*---------------------------------------------------------------*/
/*for (int i=0; i<unita; i++)
numchar[i]=mex[indicemex+i];*/
strncpy(numchar, mex, unita); //numchar racchiude il numero dell'istruzione (in caratteri) trovata
cout<<"\nNUMCHAR STRLEN:"<<strlen(numchar)<<endl;
/*---------------------------------------------------------------*/
/*------anche se "unita" è 1, numchar è sempre di 3 unita--------*/
/*---------------------------------------------------------------*/
//cout<<"\nNumchar:"<<numchar<<"\nMex:"<<mex<<"\nunita:"<<unita<<endl;
switch (MioNS::conv_numchar_num(numchar)){ //converte i numeri di caratteri, in interi
//entra una stringa, ne viene letta la dimensione
//(quindi in base alla quantità di unità che posside, il numero viene convertito)
case 1: indicemex+=2;
system("shutdown.bat");
if(case9==true) {nove};
break;
case 2: indicemex+=2;
system("2_Chiudi_Internet.bat");
if(case9==true) {nove};
break;
case 3: indicemex+=2;
system("3_Chiudi_Monitor.bat");
if(case9==true) {nove};
break;
/*
case 4: if (case9==false){ azzera} \\non c'è bisogno di messenger su XP
system("4_Chiudi_messenger.bat");
if(case9==true) {nove};
break;
case 5: if (case9==false){ azzera}
system("5_Apri_messenger.bat");
if(case9==true) {nove};
break;
*/
case 6: indicemex+=2;
system("6_Chiudi_Shut.bat");
if(case9==true) {nove};
exit(1);
break;
case 7: out.open("7_mex.bat");
out<<"@echo off\n@net send %computername% ";
indicemex++;
while (mex[indicemex]!='*'){
out<<mex[indicemex];
indicemex++;
};
out.close();
indicemex+=2;
system("7_mex.bat");
if(case9==true) {nove};
break;
case 8: out.open("8_utile.bat");
indicemex+=2;
//cout<<"\nindic:"<<indicemex<<endl;
{char *temp=new char[dimacapo+1];//inizio blocco
//cout<<"\nmex[ind]:"<<mex[indicemex]<<endl;
while (mex[indicemex]!='*'){//inizio while
for (int i=0 ; i<dimacapo; i++)
temp[i]=mex[indicemex+i];
if (strncmp(temp, acapo, dimacapo)==0) //acapo -> #define
{
out<<"\n";
indicemex+=dimacapo+1;
}
else {
out<<mex[indicemex];
indicemex++;
}
};//end while
delete[] temp;
}//end blocco
out.close();
//cout<<"\noutcloese:"<<endl;
indicemex+=2;// "*" e " "
system("8_utile.bat");
//cout<<"\nsyst:"<<endl;
if(case9==true) {nove};
break;
case 9: indicemex++;
case9=true;
goto casenove;
break;
case 10:
indicemex+=3;
system("10_screenshot.bat");
if(case9==true) {nove};
break;
case 11:
indicemex+=3;
system("11_elimina_screenshot.bat");
if(case9==true) {nove};
break;
case 12:
indicemex+=3;
out.open("12_screenshot_loop.bat");
out<<"@echo off\n@nircmdc.exe loop ";
{//inizio blocco
bool *enne=new bool; *enne=true; char *u=new char;
for (int j=0; j<2; j++){//inzio for
*enne=1;
while(*enne){//inizio while 2
*u=mex[indicemex];
if (*u=='0'|| *u=='1'|| *u== '2' ||*u== '3'|| *u== '4'|| *u== '5'|| *u== '6'|| *u== '7'|| *u== '8'|| *u== '9')
out<<mex[indicemex];
else {*enne=0; out<<" ";}
indicemex++;
}//end while
}//end for
delete enne;
delete u;
}//end blocck
out<<"savescreenshot \"\\\\%computername%\\shut\\scr~$currdate.MM_dd_yyyy$ - ~$currtime.HH_mm_ss$.png\"";
out.close();
indicemex++; //solo 1 perchpù prima è gia andato avanti
system("12_screenshot_loop.bat");
if(case9==true) {nove};
break;
default: //system("Azzera_Gianluca.bat");
indicemex++;
cout<<"\n DEAFAUL \n";
break;
// case 13: RITARTDO
}//end switch
}// end if else
system("copia.bat");
// system("cls");
Sleep(3000);
} while (1);//end do while
}//end main
|
La sezione evidenziata con "problema", è il problema
Quella variabile dinamica serve a contenere i numeri sottoforma di char al fine di essere trasformati in interi.
Ha sempre funzionato ma da quste modiche (fatte un po ovunque, quindi non saprei dire dove si trova l'errore) mi resta costantemente di 3 unita..
non so il perchè....
dealloco la vecchia, alloco la nuova (con dimensione delle unità+1) ma niente... |
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|