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.
c++ ja cmd.exe
Juuba
91444
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
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.
// 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
}
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 :(
:)
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ä.
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.
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.