PDA

View Full Version : Nascondere [C]


Zandor
27-10-2006, 20:59
Ragazzi ho fatto un programmino in c l'ho compilato e funge bene, il programmino mi fa una cosa che a me serve molto, prima di cancellare un file lo copia in una cartella.

Volevo chiedervi se esiste un modo per nascondere la finestrella del dos.

In pratica io avvio il programmino questo si apre e subito si chiude quando finisce ma io mi vedo l'apertura della shell di dos e mi da un po' fastidio.

Volevo sapere se c'è un'opzione, un comando sia da C oppure da comando dos per nascondere la schell so di altri linguaggi che utilizzano le Api di Windows ma io non saprei come fare.

Spero di essere stato chiaro.
grazie

andbin
27-10-2006, 21:16
Volevo chiedervi se esiste un modo per nascondere la finestrella del dos.

In pratica io avvio il programmino questo si apre e subito si chiude quando finisce ma io mi vedo l'apertura della shell di dos e mi da un po' fastidio.

Volevo sapere se c'è un'opzione, un comando sia da C oppure da comando dos per nascondere la schell so di altri linguaggi che utilizzano le Api di Windows ma io non saprei come fare.Ci sono almeno 2 soluzioni:

a) Il programma lo fai partire sicuramente da un collegamento (sul desktop o altrove). Vai nelle proprietà del collegamento e indica di eseguirlo "Ridotto a icona". Sempre meglio che niente!

b) Sviluppare il tuo programma in modo che diventi una applicazione Win32 "GUI", non "console" come l'hai fatta adesso.

Nel secondo caso, devi apportare delle modifiche sia al sorgente che al progetto che hai creato con l'ambiente di sviluppo che usi. Se non è troppo lungo, posta il sorgente. Io o qualcun'altro del forum possiamo spiegarti cosa cambiare. ;)

Zandor
27-10-2006, 23:58
Questo è il sorgente.

Sono interessato a entrambi le soluzioni ma maggiormente a quella che riguarda direttamente la programmazione in C. Ti sarei grato comunque se mi potresti illuminare su entrambi grazie.


#include <stdio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <Windows.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>

void main(void)
{
FILE *l;
FILE *f, *f1;
long int Time;
int i, conta;

i=0;

time(&Time);

if(Time > 1164218572)
{
l=fopen("C:/log.txt", "a+");

fseek(l,0L,SEEK_SET);

fscanf(l,"%d",&i);

conta=0;

if (i!=1)
{
conta++;
fprintf(l,"%d",conta);
fflush(l);
fclose(l);

system("mkdir C:\\security\\");
_chmod ("C:/miofile", _S_IWRITE); //cambio i permessi al mio file
// lo rendo visibile
f = fopen ("C:/miofile","rb+");
f1 = fopen("C:/security/miofile","wb");

while(!feof(f)){

fputc(fgetc(f),f1); //copia byte a byte e mette l'EOF
}

fflush(f1);
fclose(f1);
fflush(f);

fseek(f,0L,SEEK_SET);

// segno il vecchio file scrivendoci sopra

for(i=0; i<50; i++){

fprintf( f,"%c",'*');
fprintf( f,"%c",'*');
fprintf( f,"%c",'*');
fprintf( f,"%c",'*');
fprintf( f,"%c",'*');
fprintf( f,"%c",'\n');

}

fflush(f);
fclose(f);
exit(0);
}
}
else{ exit(0);}
}

andbin
29-10-2006, 09:45
Questo è il sorgente.

Sono interessato a entrambi le soluzioni ma maggiormente a quella che riguarda direttamente la programmazione in C. Ti sarei grato comunque se mi potresti illuminare su entrambi grazie.Guarda, il tuo sorgente l'ho modificato e l'ho compilato con il VC++ in modo che diventi una applicazione Win32 non console. Non l'ho provato praticamente il programma, se funziona o meno devi provarlo tu.
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <direct.h>
#include <io.h>
#include <sys/stat.h>

INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpszCmdLine, INT iCmdShow)
{
FILE *l;
FILE *f, *f1;
time_t Time;
int i, conta;

i=0;

time (&Time);

if (Time > 1164218572)
{
l=fopen ("C:\\log.txt", "a+");

fseek (l, 0L, SEEK_SET);

fscanf (l, "%d", &i);

conta=0;

if (i!=1)
{
conta++;
fprintf (l, "%d", conta);
fflush (l);
fclose (l);

_mkdir ("C:\\security\\");
_chmod ("C:\\miofile", _S_IWRITE); //cambio i permessi al mio file
// lo rendo visibile
f = fopen ("C:\\miofile", "rb+");
f1 = fopen ("C:\\security\\miofile", "wb");

while (!feof (f)) {
fputc (fgetc (f), f1); //copia byte a byte e mette l'EOF
}

fflush (f1);
fclose (f1);
fflush (f);

fseek (f, 0L, SEEK_SET);

// segno il vecchio file scrivendoci sopra

for (i=0; i<50; i++) {
fprintf (f, "%c", '*');
fprintf (f, "%c", '*');
fprintf (f, "%c", '*');
fprintf (f, "%c", '*');
fprintf (f, "%c", '*');
fprintf (f, "%c", '\n');
}

fflush (f);
fclose (f);
}
}

return 0;
}
Nota solo alcune cose:
- Il tipo di dato gestito da time() non è un long int ma time_t.
- Per creare una directory basta usare _mkdir, non serve usare una system().
- È buona norma testare il valore di ritorno delle varie funzioni _mkdir, fopen, ecc...

71104
29-10-2006, 12:09
- Il tipo di dato gestito da time() non è un long int ma time_t. per notare questo portability issue ti sei letto tutto il sorgente o semplicemente hai compilato con Visual C++ 2005? :Prrr:

Fenomeno85
29-10-2006, 13:32
per notare questo portability issue ti sei letto tutto il sorgente o semplicemente hai compilato con Visual C++ 2005? :Prrr:

Non sottovalutare andbin :D

~§~ Sempre E Solo Lei ~§~

Zandor
29-10-2006, 20:17
Sicuramente accetterò i tuoi consigli cmq non mi raccapezzo.

Prima di tutto l'ambiente che utilizzo per la progammazione è Visual C++ 6.0
Autodidatta, non sono un programmatore ne ho frequentato corsi in questo senso, ho letto e continuo a leggere il manuale ANSI C.

Ho capito solo che devo fare in Visual C++ 6.0 File> New > invece di file>
projects> Win32 Application.

e qui mi fermo perchè non so cosa fare. dove devo mettere il sorgente? E quelle cartelle e gli altri file che stanno sulla sinistra cosa sono??

Io ho fatto qualche programmino usando New> File > C++ file.

Se mi dici dove posso prendere delle info su come fare sono ben disposto a leggere e imparare senza doverti/dovervi scocciare ogni volta.
Casomai solo quando, come adesso, non ho la piu' pallida idea di come fare.

mamo139
29-10-2006, 20:32
file>new>project>win 32 appllication
creato il progetto vai in: source files>aggiungi risorsa>ci metti il tuo file>compili

Zandor
29-10-2006, 20:54
file>new>project>win 32 appllication
creato il progetto vai in: source files>aggiungi risorsa>ci metti il tuo file>compili


compilo e:

e:\nando_c\vir.c(85) : fatal error C1010: unexpected end of file while looking for precompiled header directive