Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    59

    [c] esecuzione processo in background

    ciao, sono nuovo di questo forum ma ho visto che c'è gente veramente in gamba e che di cose ne sa parecchie per questo mi rivolgo a voi, ho cercato parecchio in internet ma non ho trovato risposte.

    Sto cercando di fare un programma in c per windows che mi faccia spegnere il pc per motivi che non sto qui a spiegare, la cosa non m è così complicata, ho creato un file .bat che viene eseguito da una execlp del file.exe, solo che mi compare sempre la finestra nera del prompt, io invece vorrei che il tutto fosse eseguito in background. ho provato con il comando
    start /B <nome programma>
    ma niente da fare, non funziona, come posso fare??
    grazie per le eventuali risposte.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' mai eseguire il .bat?

    Se scrivi un programma in C, allora fai tutto da quel programma, chiamando le API opportune ...

    Oppure fai tutto con il .bat ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    59
    allora, ti spiego nel .bat ho inserito il comando shutdown -s -t 30 -f e ho creato il programma che lo lancia, solo in c non saprei come farlo, in windows, lo so fare in linux.

  4. #4
    cioè tu vuoi fare un programma che cliccandoci sopra dovrebbe spegnere il computer?
    in C e' facilissimo:
    [CODE]include <stdlib.h>

    int main()
    {
    system("shutdown -s -t 30 -f");
    /* Ti ricordo che dal C puoi lanciare comandi dos,
    basta usate questo:
    system("comando");
    */
    }

  5. #5
    Perché appoggiarsi ad applicazioni esterne (nello specifico shutdown.exe) quando si possono usare le apposite API?
    codice:
    #include <windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
    {
        HANDLE hToken; 
        TOKEN_PRIVILEGES tkp; 
        //Attende 30 secondi
        Sleep(30000);
        //Ottiene un token per il processo
        if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
            return 1; 
        //Ottiene il LUID per il privilegio SE_SHUTDOWN_NAME (necessario per spegnere il PC)
        LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); 
        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
        //Ottiene il privilegio SE_SHUTDOWN_NAME
        AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); 
        if (GetLastError() != ERROR_SUCCESS) 
            return 2; 
        //Arresta il sistema
        if (!ExitWindowsEx(EWX_SHUTDOWN, 0)) 
            return 3;
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da matysone
    allora, ti spiego nel .bat ho inserito il comando shutdown -s -t 30 -f e ho creato il programma che lo lancia, solo in c non saprei come farlo, in windows, lo so fare in linux.
    Appunto ... tutto questo non e' necessario, come ti dicevo ... vedi la risposta di MItaly ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    59
    ah, ok, comunque una cosa che forse non ho precisato, non voglio fare che cliccandoci sopra si spenga, ma che parta da esecuzione automatica, e dopo tipo 1 ora mi spenga il computer, naturalmente non voglio che esca la finestra del prompt di dos.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da matysone
    ah, ok, comunque una cosa che forse non ho precisato, non voglio fare che cliccandoci sopra si spenga, ma che parta da esecuzione automatica, e dopo tipo 1 ora mi spenga il computer, naturalmente non voglio che esca la finestra del prompt di dos.
    Devi solamente implementare un timer nel programma di MItaly in modo che faccia partire lo spegnimento solo dopo un'ora da quando e' partito.

    Ma scusa, se il computer si spegne, a che serve non far vedere la finestra del dos? Non ha alcun senso ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    59
    Adesso ci provo, comunque per rispondere alla domanda... Non mettetevi a ridere, su richiesta dei miei, devo far spegnere il pc di mio fratello dopo 2 ore che lo usa, avvertendo che si sta per spegnere così che possa salvare i suoi dati, questo perchè gioca troppo, se esce la finestra del dos, la chiude senza problemi.

  10. #10
    Non mettetevi a ridere, su richiesta dei miei, devo far spegnere il pc di mio fratello dopo 2 ore che lo usa
    Per avere una minima utilità il programma deve memorizzare da qualche parte l'ora dell'ultimo spegnimento e controllare durante l'avvio del sistema se dall'ultimo shutdown sia trascorso un tempo minimo prestabilito.

    Comunque nulla vieta a tuo fratello di chiudere il programma PRIMA di iniziare la sua consueta "sessione di gioco".

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.