Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 29
  1. #11

    Re: settaggio

    Originariamente inviato da skypatrik
    conoscendo la noia che viene quando bisogna affibbiare un nome a un file non ti chiedo di aggiungere una lettera in più in ordine alfabetico al nome.... tipo: fileA fileB fileC. Ma credo che attaccare un semplice numero automaticamente progressivo nel tempo come potrebbe esser quello dei secondi passati dal 1/1/1970 non dovrebbe essere tedioso.
    Mi pare un'ottima idea; veloce ed efficace.
    Riguardo l'Hardcoded non conosco ne il termine e non capisco quindi in cosa vuoi scrivere il programma.
    "Hardcoded" significa inserito direttamente nel codice del programma, e di solito si riferisce a configurazioni che sarebbe meglio che fossero modificabili senza ricompilare il programma.
    Riguardo la cartella di backup mi sta bene anche in C:\ o nella root di powerpoint.
    Possiamo sempre specificare il tutto sulla linea di comando... del tipo che viene richiamato come
    codice:
    nomeprogramma.exe "x:\percorso\nomefile.ppt" "x:\percorso\powerpnt.exe" "x:\cartellabackup"
    ; mi pare la soluzione più semplice.
    In ogni caso mi manca un'ultima informazione: questo programma su che versione di Windows dovrà essere eseguito? Perché se viene eseguito su Windows NT/2000/XP/Vista posso attivare il supporto Unicode, altrimenti lo compilo come ANSI.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #12
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34

    Re: Re: settaggio

    Originariamente inviato da MItaly
    In ogni caso mi manca un'ultima informazione: questo programma su che versione di Windows dovrà essere eseguito? Perché se viene eseguito su Windows NT/2000/XP/Vista posso attivare il supporto Unicode, altrimenti lo compilo come ANSI.
    Assolutamente su sistemi Windows non più vecchi del 2000. Purtroppo Linux stenta ancora a decollare per una questione generazionale.Già fanno danni con windows che ormai è di dominio pubblico immaginiamoci con un sistema UNIX. A volte rimpiango il mio vecchio DOS 3.12 del mio vecchio PC1 Olivetti Prodest.

    Comunque, MItaly non so proprio come ringraziarti per l'impegno. Ti inviterei volentieri a bere qualcosa ma proprio ora mi si è rotta la macchina del teletrasporto . Magari se passi da queste parti me lo fai sapere.

    Grazie.
    Il Customer Service Gratis di Linux è migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  3. #13
    Oplà!
    codice:
    //Header di Windows
    #include <windows.h>
    //Shell lightweight API (per manipolare i path)
    #include <shlwapi.h>
    //Funzioni stringa standard C
    #include <cstring>
    //Funzioni ora standard C
    #include <ctime>
    //Funzioni IO standard C
    #include <cstdio>
    //Importo il namespace std, in cui si trovano le funzioni standard visto che le ho incluse con gli header C++ e non C
    using namespace std;
    
    //Macro per ottenere il numero di elementi di un array allocato sullo stack
    #define ARRSIZE(arr)	((size_t)(sizeof(arr)/sizeof(*arr)))
    
    //Prototipi
    //Mostra l'help screen
    void HelpScreen(HWND Parent);
    //Mostra un messaggio di errore
    void ErrorMessage(LPWSTR Message);
    
    //Disabilita un warning che in questo punto dà solo fastidio
    #pragma warning(push)
    #pragma warning(disable:4100)
    //Entrypoint
    int WINAPI WinMain(HINSTANCE hInstance,
    	HINSTANCE hPrevInstance,
    	LPSTR lpCmdLine,
    	int nCmdShow
    )
    {
    	//Valore restituito dal programma e numero di argomenti
    	int ret=ERROR_SUCCESS, argc=0;
    	//Ottiene la linea di comando e ne effettua il parsing
    	LPWSTR * argv=CommandLineToArgvW(GetCommandLineW(),&argc);
    	//Se c'è stato qualche problema con il parsing della linea di comando (non dovrebbe mai accadere, ma non si sa mai)...
    	if(argv==NULL)
    	{
    		//... notifica l'errore
    		ErrorMessage(L"Errore imprevisto durante il parsing della linea di comando.");
    		//ed esce con un errore generico.
    		return ERROR_INTERNAL_ERROR;
    	}
    	//Se c'è almeno un argomento ed è /?...
    	if(argc>=2 && wcscmp(argv[1],L"/?")==0)
    	{
    		//...mostra l'help screen
    		HelpScreen(NULL);
    		//ed esce con successo
    		return ERROR_SUCCESS;
    	}
    	//Se non ci sono sufficienti argomenti...
    	if(argc<4)
    	{
    		//... notifica l'errore,
    		ErrorMessage(L"Non ci sono abbastanza parametri.");
    		//mostra l'help screen
    		HelpScreen(NULL);
    		//ed esce usando un codice d'uscita significativo.
    		return ERROR_INVALID_PARAMETER;
    	}
    	//File da aprire, programma con cui aprirlo, percorso di backup, estensione del file
    	LPWSTR sourceFile, program, backupPath, extension;
    	//Percorso completo del file di backup
    	WCHAR targetFile[MAX_PATH];
    	//Dà agli argomenti degli "alias" più sensati
    	sourceFile=argv[1];
    	program=argv[2];
    	backupPath=argv[3];
    	//Trova il carattere dove comincia l'estensione del file
    	extension=PathFindExtension(sourceFile);
    	//Costruzione del percorso del file di backup
    	//Combina il nome del file con il percorso di backup
    	if(PathCombine(targetFile,backupPath,PathFindFileName(sourceFile))==NULL)
    	{
    		//In caso di errore, notifica ed esce
    		ErrorMessage(L"PathCombine ha restituito NULL.");
    		return ERROR_INTERNAL_ERROR;
    	}
    	//Rimuove l'estensione
    	PathRemoveExtension(targetFile);
    	//Aggiunge il timestamp e l'estensione
    	_snwprintf(targetFile+wcslen(targetFile),ARRSIZE(targetFile)-wcslen(targetFile)-1,L"_%x%s",time(NULL),extension);
    	//Piccolo trucco per evitare problemi con la _snwprintf
    	targetFile[ARRSIZE(targetFile)-1]=0;
    	//Resetta il valore dell'ultimo errore
    	SetLastError(0);
    	//Copia il file
    	if(!CopyFile(sourceFile,targetFile,FALSE))
    	{
    		//In caso di errore notifica...
    		ErrorMessage(L"Impossibile copiare il file nella cartella di backup.");
    		//... e si mette da parte il codice di errore per restituirlo alla fine.
    		ret=GetLastError();
    		//Nota che anche se non riesce a copiare prova comunque ad avviare il programma.
    	}
    	//Disabilita un warning che in questo punto dà solo fastidio
    #pragma warning(push)
    #pragma warning(disable:4311)
    	//Avvia il programma
    	if((int)ShellExecuteW(NULL,L"open",program,sourceFile,NULL,nCmdShow)<=32)
    #pragma warning(pop)
    	{
    		//In caso di errore notifica ed esce
    		ErrorMessage(L"ShellExecute è fallita.");
    		return ERROR_INTERNAL_ERROR;
    	}
    	//Restituisce ERROR_SUCCESS o l'errore per cui la copia è fallita.
    	return ret;
    }
    #pragma warning(pop)
    //Mostra l'help screen
    void HelpScreen(HWND Parent)
    {
    	//Mostra l'help screen
    	MessageBoxW(Parent,
    		L"BackupAndStart by Matteo Italia\n"
    		L"\n"
    		L"Utilizzo:\n\n"
    		L"BackupAndStart nomefile programma cartellabackup\n\n"
    		L"nomefile\t\tNome del file da lanciare e salvare.\n"
    		L"programma\tNome del programma con cui aprire il file; viene avviato tramite ShellExecute.\n"
    		L"cartellabacup\tCartella in cui effettuare il backup.",
    		L"BackupAndStart",
    		MB_ICONINFORMATION);
    }
    
    //Mostra un messaggio di errore
    void ErrorMessage(LPWSTR Message)
    {
    	//Buffer per il messaggio
    	WCHAR message[8192];
    	//Costruisce il messaggio sulla base dell'argomento passato e dell'ultimo errore avvenuto
    	_snwprintf(message,ARRSIZE(message),L"%s\nGetLastError: 0x%08x",Message,GetLastError());
    	//Solito trucco
    	message[ARRSIZE(message)-1]=0;
    	//Mostra il messaggio
    	MessageBoxW(NULL,message,L"Errore",MB_ICONERROR);
    }
    Download eseguibile.
    Download progetto completo.

    Di fatto l'intero oggetto è quasi esclusivamente C anche se il file è .cpp (l'ho usato solo per i commenti single-line e per gli header C++-style); è una mezza porcheria, come si può vedere (tutti quegli smanettamenti sulle stringhe non sono mai troppo belli), ma dovrebbe funzionare.
    Come riga di comando per l'associazione dei file .ppt metti:
    codice:
    c:\percorso\BackupAndStart.exe "%1" powerpnt "c:\cartellabackup"
    .
    Originariamente inviato da skypatrik
    Comunque, MItaly non so proprio come ringraziarti per l'impegno. Ti inviterei volentieri a bere qualcosa ma proprio ora mi si è rotta la macchina del teletrasporto . Magari se passi da queste parti me lo fai sapere.
    Quando a Roma avrò bisogno di birra saprò a chi chiedere...
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #14
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34
    Originariamente inviato da MItaly
    Quando a Roma avrò bisogno di birra saprò a chi chiedere...
    Grande! Lo provo subito! Per la birra basta un messaggio qualche giorno prima e ti aspetto (non sono di Roma... ci studio.... sono di Formia).
    Il Customer Service Gratis di Linux è migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  5. #15
    Originariamente inviato da skypatrik
    (non sono di Roma... ci studio.... sono di Formia).
    Eeeh... da Milano è comunque lunghetta!
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #16
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34

    Exe per salvataggio extremis ppt

    Originariamente inviato da MItaly
    Eeeh... da Milano è comunque lunghetta!

    Va bene non si sa mai.... se passi fammi sapere. Nel frattempo ti do la prima notizia.
    Ho provato il bin... ho sistemato la riga di comando... e ho provato una ppt a caso che non fosse all'interno della cartella di backup.
    Risultato, copia il file nella cartella di backup dopo di che da una serie di errori di indirizzo inesistenti e non apre il file originale (e nemmeno quello copiato).
    Mentre se apro un file qualsiasi nella cartella stessa del backup fa la copia, non da errore e apre il file originale.

    Quindi sostanzialmente credo che il problema è che va alla ricerca del file originale, nella cartella di backup.

    Confermi pure te?

    Per essere piu precisi, l'.EXE l'ho messo direttamente in root (C:\) e altrettanto ho creato una cartella di backup sempre nella root con il nome stesso che gli hai dato tu nelle spiegazioni.

    Confermi l'errore? o è il mio pc che sta tirando le cuoia?
    Il Customer Service Gratis di Linux è migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  7. #17
    Sei sicuro di avere messo
    codice:
    c:\percorso\BackupAndStart.exe "%1" powerpnt "c:\cartellabackup"
    e non
    codice:
    c:\percorso\BackupAndStart.exe %1 powerpnt "c:\cartellabackup"
    ? Quelle virgolette sono fondamentali...
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #18
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34
    Originariamente inviato da MItaly
    Sei sicuro di avere messo
    codice:
    c:\percorso\BackupAndStart.exe "%1" powerpnt "c:\cartellabackup"
    e non
    codice:
    c:\percorso\BackupAndStart.exe %1 powerpnt "c:\cartellabackup"
    ? Quelle virgolette sono fondamentali...

    Assolutamente sicuro. Tanto è vero che ho ricontrollato. Ho scoperto una nuova cosa.
    Praticamente da errore solo quando nell'indirizzo è presente uno spazio.

    Per farti un esempio:

    Il programma funziona se l'indirizzo è simile a questo:
    codice:
    C:\cartella1\cartella2\cartella3\...\cartellan\file.ppt
    Il programma non funziona ad esmpio se nell'indirizzo (come potrebbe esser quello del desktop) e presente questa combinazione:

    codice:
    C:\Document and settings\Utente\...\desktop\file.ppt
    oppure
    codice:
    C:\Program files\...\cartella\file.ppt

    Quindi credo che il problema sta nel fatto che quando prende il path si blocca sullo spazio (space) " ".

    Mi dispiace darti tutte queste noie ma è inportante.
    Se fai qualche correzione poi me la posti con il commento, così capisco pure qual'è il comando giusto.
    Il Customer Service Gratis di Linux è migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

  9. #19
    Le virgolette servono appunto per evitare che abbia quei problemi... non riesco a capire... :master:
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #20
    Utente di HTML.it L'avatar di skypatrik
    Registrato dal
    Aug 2007
    residenza
    Latina
    Messaggi
    34

    il mistero dell'occulto...virtuale.

    Ecco di seguito i messaggi di errore che si rilevano all'apertura del file "file.ppt" all'indirizzo
    codice:
    C:\Documents and Settings\<utente>\Desktop
    Primo avviso, ritengo che almeno questo sia dovuto allo spazio di "Document and Settings":
    codice:
    Il percorso o il nome del file 
    C:\Documents non è valido.
     Verificare che il percorso e il nome del file siano corretti.
    Secondo avviso, questo è il più particolare perchè aggiunge un probabile "and" di "Document and Settings" alla fine del percorso.
    codice:
    Il percorso o il nome del file 
    C:\Documents and Settings\<utente>\Desktop\and non è valido.
     Verificare che il percorso e il nome del file siano corretti.
    Terzo e ultimo avviso, questo sbarella completamente raddoppiando in parte l'indirizzo. Da notare che l'ultimo "Document and Settings" deficita di "and Settings".
    codice:
    Il percorso o il nome del file 
    C:\Documents and Settings\<utente>\Desktop\Settings\<utente>\Desktop\file.ppt non è valido. 
    Verificare che il percorso e il nome del file siano corretti.
    Per "<utente>" intendo il nome dell'utente che normalemente si inserisce nell'istallazione Windows.
    Ho provato su più macchine e mi da sempre questo errore. Solo quando nel percorso è presente uno spazio.

    Le virgolette sono tutte presenti dove mi hai indicato nella barra comando.

    Inoltre ti ricordo che comunque il file viene salvato con il nome modificato nella cartella backup ma poi non viene aperto da powerpoint.

    A te, oh grande stregone....
    Il Customer Service Gratis di Linux è migliore di quello a pagamento della Microsoft e Apple... chiusa la discussione.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.