Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C/C++] Alternative valide a system, oltre a Winexec e shellExecute, ce ne sono?

    Salve a tutti. Ho appena finito un banale programma per modificare l'ora di sistema.
    è uno scherzo innocuo, tant'è che alla fine del programma reimposta l'ora come era all0avvio del programma (considerando che dura poco, pressochè uguale).
    Il problema è che se devo farlo senza interfaccia grafica, come Win32 Application, il comando system è stupido da usare, perchè apre tante finestrelle nere quante volte viene richiamata la funzione.
    Usando WinExec non sembra nemmeno funzionare. Ancora non ho provato con ShellExecute. avete qualche idea? Essendo un programma stupido vi chiedo gentilmente di non sottolineare la sua inutità
    codice:
    // timer.cpp : Defines the entry point for the application.
    //
    #include "StdAfx.h"
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    void TimeCatcher(char str[])
    {
    	time_t date;
    	struct tm *tpointer = NULL;
    	char tmp[2];
    	time(&date);
    	tpointer=localtime(&date);
    	itoa(tpointer->tm_hour,str,10);
    	strcat(str,".");
    	itoa(tpointer->tm_min,tmp,10);
    	strcat(str,tmp);
    }
    void Genera_Ora()
    {
    	char TIME[10];
    	strcpy(TIME,"time ");
    	srand( (unsigned) time(NULL));
    	int H = rand()%24;
    	int M = rand()%60;
    	char T1[2];
    	char T2[2];
    	strcat(TIME,itoa(H,T1,10));
    	strcat(TIME,".");
    	strcat(TIME,itoa(M,T2,10));
    	system(TIME);
    //	system("cls");
    }
    void Reimposta_Ora_Reale(char R[])
    {
    	char TIME[10];
    	strcpy(TIME,"time ");
    	strcat(TIME,R);
    	system(TIME);
    //	system("cls");
    }
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    char ora_attuale[5];
    TimeCatcher(ora_attuale);
    for (int i=0;i<100;i++)
    {
    	Genera_Ora();
    }
    Reimposta_Ora_Reale(ora_attuale);
    return 0;
    }
    Grazie in anticipo. Cordiali saluti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non ho capito qual e' la domanda ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    In pratica chiedevo come posso eseguire i comandi di system senza che appaia la schermata nera. Con WinExec(TIME,SW_HIDE); non sembra neanche che funzioni, finisce subito. Grazie ancora

  4. #4
    È normale che non funzioni, visto che time non è un eseguibile, ma un comando interno dell'interprete dei comandi (command.com o cmd.exe). In ogni caso invece di ricorrere ad esso usa piuttosto la API SetSystemTime.
    P.S.: WinExec è arcaica e deprecatissima (è mantenuta solo per compatibilità con applicazioni dei tempi di Windows 3.1), se devi avviare degli eseguibili usa la CreateProcess.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.