c++ ja cmd.exe

Miten helppo on toteuttaa c :lla ohjelma, joka suorittaisi cmd.exe:n eli windowsin haluttuja peruskomentoja? Tai onko helpompi jos omassa ohjelmassa avaa cmd.exe:n ohjelmallisesti ja syöttää jotenkin siihen komentoriville halutun komennon? Kun komento on suoritettu, pitäisi siitä tulla jonkinnäköinen tieto takaisin omaan ohjelmaan.
91444
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

"Tai onko helpompi jos omassa ohjelmassa avaa cmd.exe:n ohjelmallisesti ja syöttää jotenkin siihen komentoriville halutun komennon?"

Tarkoitan siis että oma ohjelma syöttäisi automaattisesti cmd.exeen komennon ja kun komento on suoritettu niin siitä tulisi tieto omaan ohjelmaan. Tämän jälkeen oma ohjelma syöttäisi cmd.exeen seuraavan komennon.

Äänestä

// cmd.exe komento system funktioon.

#include

int main(void)
{
system("time /t"); // Aika
system("cls"); // Näyttö tyhjäksi
system("title Otsikko"); // Ikkunan otsikko
// system("shutdown -s"); // Sammutetaan
}

Äänestä
  • tuo system("") funktio tartaa stdlib.h:n
    Eli näin

    #include
    #include

    int main(void)
    {
    system("komento tähän");

    return 0;
    }

    Äänestä

  • koodari kirjoitti:

    tuo system("") funktio tartaa stdlib.h:n
    Eli näin

    #include
    #include

    int main(void)
    {
    system("komento tähän");

    return 0;
    }

    Taas kirjoitin koodia ajatuksissani. Unohdin kokonaan lisätä tuon :(

    :)

    Äänestä

system(char* command) -funktion paluuarvot:
- jos command==NULL -> 0 (jos OK) tai 0 (jos ei onnistu)
- muutoin -1 jos OK (ohjelman paluuarvo) tai -1, jos virhe
Virhetilanteessa errno -muuttuja sisältää virheen selitteen.

>"Tai onko helpompi jos omassa ohjelmassa avaa cmd.exe:n ohjelmallisesti ja syöttää jotenkin siihen komentoriville halutun komennon?"
Aina kun vain on mahdollista niin ois hyvä käytellä wintoosan omia komentoja commandlinen sijaan. Saat oikeilla käskyillä paremmin selville mikä meni pieleen. Helppous tietty riippuu siitä mitä komentoja meinaisit käytellä.

Äänestä
  • Meinasin oikeastaan että teen sen sittenkin win32apilla, kun tuntuis olevan helpompaa. Mutta siis pitäisi suorittaa eräs javasovellus.
    Komento joka pitäis saada cmd.exe:n komentoriville on:

    java -jar jarfile(n).jar [args...]
    Komentoja suoritetaan sarjassa käyttäjän haluama määrä joten args on muuttuva.

    Kun tämä ohjelma on sitten suoritettu niin siitä pitäis saada tieto omaan ohjelmaan.

    Äänestä

  • Juuba kirjoitti:

    Meinasin oikeastaan että teen sen sittenkin win32apilla, kun tuntuis olevan helpompaa. Mutta siis pitäisi suorittaa eräs javasovellus.
    Komento joka pitäis saada cmd.exe:n komentoriville on:

    java -jar jarfile(n).jar [args...]
    Komentoja suoritetaan sarjassa käyttäjän haluama määrä joten args on muuttuva.

    Kun tämä ohjelma on sitten suoritettu niin siitä pitäis saada tieto omaan ohjelmaan.

    Ohjetiedosto löytyy esim.
    http://win32assembly.online.fr/files/win32api.zip
    Yksinkertaiset käskyt ilman seurantamahdollisuutta: ShellExecute tai WinExec. Mutkikkaampi käskysarja: CreateProcess, WaitForSingleObject (,GetExitCodeProcess), CloseHandle
    Paluuarvot, parametrit ja esimerkit löytyvät ohjeista.

    Äänestä

  • Juuba kirjoitti:

    Meinasin oikeastaan että teen sen sittenkin win32apilla, kun tuntuis olevan helpompaa. Mutta siis pitäisi suorittaa eräs javasovellus.
    Komento joka pitäis saada cmd.exe:n komentoriville on:

    java -jar jarfile(n).jar [args...]
    Komentoja suoritetaan sarjassa käyttäjän haluama määrä joten args on muuttuva.

    Kun tämä ohjelma on sitten suoritettu niin siitä pitäis saada tieto omaan ohjelmaan.

    int main()
    {
       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       memset(si,0,sizeof(si));
       si.cb=sizeof(si);
       if( !CreateProcess("C:\\JAVA\\java.exe", //ohjelman osoite
          "-jar jarfile(n).jar [args...]", //parametrit
          NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) //katso muut ohjeista
       )
          ErrorExit("Virheteksti");
       //Odota prosessin loppua
       WaitForSingleObject( pi.hProcess, INFINITE );
       //Lopeta prosessi
       CloseHandle( pi.hProcess );
       CloseHandle( pi.hThread );
    }

    Äänestä

  • test kirjoitti:

    int main()
    {
       STARTUPINFO si;
       PROCESS_INFORMATION pi;
       memset(si,0,sizeof(si));
       si.cb=sizeof(si);
       if( !CreateProcess("C:\\JAVA\\java.exe", //ohjelman osoite
          "-jar jarfile(n).jar [args...]", //parametrit
          NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) //katso muut ohjeista
       )
          ErrorExit("Virheteksti");
       //Odota prosessin loppua
       WaitForSingleObject( pi.hProcess, INFINITE );
       //Lopeta prosessi
       CloseHandle( pi.hProcess );
       CloseHandle( pi.hThread );
    }

    Kiitän paljon. On nimittäin api vielä sen verran heikonlaisesti hanskassa, että tuo ohjekirja ja suomennos auttaa aina asiaa.

    Äänestä

Kommentoi aloitusta


Juuba kirjoitti:

Miten helppo on toteuttaa c :lla ohjelma, joka suorittaisi cmd.exe:n eli windowsin haluttuja peruskomentoja? Tai onko helpompi jos omassa ohjelmassa avaa cmd.exe:n ohjelmallisesti ja syöttää jotenkin siihen komentoriville halutun komennon? Kun komento on suoritettu, pitäisi siitä tulla jonkinnäköinen tieto takaisin omaan ohjelmaan.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu